#!/bin/sh

# n'oubliez pas d'exécuter, en root, les commandes suivantes, pour activer le pare-feu au démarrage : 
# sysrc firewall_enable=YES
# sysrc firewall_script="/etc/regles-ipfw.sh" 
# ne démarrez le service que lorsque vous avez terminé de configurer ce fichier !!!

#########################################################################################################
###############################################								#
########## INITIALISATION DES REGLES ##########								#
###############################################								#
ipfw -q -f flush											#
#ipfw table 1 flush											#
													#
##########################										#
# RACCOURCIs POUR LA SUITE										#
##########################										#
# raccourci de commande ipfw										#
cmd="ipfw -q add"											#
# inscrivez ci-dessous le nom de vos interfaces réseau (à la place de wlan0, re0 et re1)		#
pif="wlan0"     # Interface Wi-fi									#
pif1="re0"	# Interface ethernet 1									#
pif2="re1"	# Interface ethernet 2									#
													#	
													#
###########################################								#
# PERMETTRE LE TRAFIC SUR L'INTERFACE LAN								#
###########################################								#
# Change xl0 to LAN NIC interface name									#
# $cmd 00005 allow all from any to any via xl0								#
													#
##################################################							#
# PERMETTRE LE TRAFIC SUR L'INTERFACE DE BOUCLAGE							#
##################################################							#
#$cmd 00010 allow all from any to any via lo0								#
													#
################################################################################			#
# AUTORISER LE PASSAGE DES PAQUETS S'ILS REPONDENT A AU MOINS UNE REGLE QUI SUIT			#
################################################################################			#
$cmd 00101 check-state											#
													#
#########################################################################################################

####################################################################
########## REGLES DE PARE-FEU DEPUIS LE LAN (VERS LE WAN) ##########
####################################################################
# INTERDIRE LA VISITE D'URL
#$cmd 00102 deny ip log from any to DOMAINE-A-BANNIR.com out via $pif
#################################################
# ACCES AUX SERVEURS DE NOMS PUBLIQUES - DNS
# Inscrire les adresses IP des Serveurs de Noms publiques
# Répétez les règles pour chaque Serveur de Noms inscrit dans /etc/resolv.conf
$cmd 00110 allow tcp from any to 1.1.1.1 53 out via $pif setup keep-state	# DNS pour l'interface $pif
$cmd 00111 allow udp from any to 1.1.1.1 53 out via $pif keep-state		# DNS pour l'interface $pif
#$cmd 00112 allow tcp from any to 1.1.1.1 53 out via $pif1 setup keep-state	# DNS pour l'interface $pif1
#$cmd 00113 allow udp from any to 1.1.1.1 53 out via $pif1 keep-state		# DNS pour l'interface $pif1
#$cmd 00114 allow tcp from any to 1.1.1.1 53 out via $pif2 setup keep-state	# DNS pour l'interface $pif2
#$cmd 00115 allow udp from any to 1.1.1.1 53 out via $pif2 keep-state		# DNS pour l'interface $pif2
#################################################
# AUTORISER LE TRAFIC SORTANT VERS LE SERVEUR DHCP 
# Si vous ne connaissez pas l'adresse IP du serveur DHCP, utilisez la première règle qui enregistre les requêtes dans un journal d'évènements. Lancez une requête DHCP puis consultez-le. 
# Puis décommentez la seconde règle, inscrivez l'adresse IP du serveur DHCP, et commentez la première règle.
#$cmd 00120 allow log udp from any to any 67 out via $pif keep-state		# savoir IP DHCP via $pif
#$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state		# autoriser IP DHCP via $pif
#$cmd 00121 allow log udp from any to any 67 out via $pif1 keep-state		# savoir IP DHCP via $pif1
#$cmd 00121 allow udp from any to x.x.x.x 67 out via $pif1 keep-state		# autoriser IP DHCP via $pif1
#$cmd 00122 allow log udp from any to any 67 out via $pif2 keep-state		# savoir IP DHCP via $pif2
#$cmd 00122 allow udp from any to x.x.x.x 67 out via $pif2 keep-state		# autoriser IP DHCP via $pif2
#################################################
# AUTORISER LE TRAFIC SORTANT POUR LES PROTOCOLES HTTP ET HTTPS
$cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state	      	# Interface $pif
$cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state		# Interface $pif
#$cmd 00201 allow tcp from any to any 80 out via $pif1 setup keep-state          # Interface $pif1
#$cmd 00221 allow tcp from any to any 443 out via $pif1 setup keep-state         # Interface $pif1
#$cmd 00202 allow tcp from any to any 80 out via $pif2 setup keep-state          # Interface $pif2
#$cmd 00222 allow tcp from any to any 443 out via $pif2 setup keep-state         # Interface $pif2
#################################################
# AUTORISER LE TRAFIC SORTANT POUR LES PROTOCOLES DES COURRIELS
#$cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state		# Interface $pif
#$cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state		# Interface $pif
#$cmd 00232 allow tcp from any to any 25 out via $pif1 setup keep-state		# Interface $pif1
#$cmd 00233 allow tcp from any to any 110 out via $pif1 setup keep-state	# Interface $pif1
#$cmd 00234 allow tcp from any to any 25 out via $pif2 setup keep-state		# Interface $pif2
#$cmd 00235 allow tcp from any to any 110 out via $pif2 setup keep-state	# Interface $pif2
#################################################
# AUTORISER LE TRAFIC SORTANT POUR LE PROTOCOLE ICMP (PING)
#$cmd 00250 allow icmp from any to any out via $pif keep-state
#$cmd 00251 allow icmp from any to any out via $pif1 keep-state
#$cmd 00252 allow icmp from any to any out via $pif2 keep-state
################################################# 
# AUTORISER LE TRAFIC SORTANT POUR LE PROTOCOLE NTP 
#$cmd 00260 allow udp from any to any 123 out via $pif keep-state
#$cmd 00261 allow udp from any to any 123 out via $pif1 keep-state
#$cmd 00262 allow udp from any to any 123 out via $pif2 keep-state
################################################ 
# AUTORISER LE TRAFIC SORTANT POUR LE PROTOCOLE SSH
#$cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state
#$cmd 00281 allow tcp from any to any 22 out via $pif1 setup keep-state
#$cmd 00282 allow tcp from any to any 22 out via $pif2 setup keep-state
################################################ 
# REFUSER TOUT AUTRE TRAFIC ET ENREGISTRER LES REFUS DANS UN JOURNAL D'EVENEMENTS
$cmd 00297 deny log all from any to any out via $pif				# Interface $pif
$cmd 00298 deny log all from any to any out via $pif1                           # Interface $pif1
$cmd 00299 deny log all from any to any out via $pif2                           # Interface $pif2


####################################################################
########## REGLES DE PARE-FEU DEPUIS LE WAN (VERS LE LAN) ##########
####################################################################
# REFUSER TOUT TRAFIC EN PROVENANCE D'ADRESSES NON ROUTABLES
$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif	#RFC 1918 private IP
$cmd 00301 deny all from 192.168.0.0/16 to any in via $pif1
$cmd 00302 deny all from 192.168.0.0/16 to any in via $pif2
$cmd 00302 deny all from 172.16.0.0/12 to any in via $pif	#RFC 1918 private IP
$cmd 00303 deny all from 172.16.0.0/12 to any in via $pif1     
$cmd 00304 deny all from 172.16.0.0/12 to any in via $pif2
$cmd 00304 deny all from 10.0.0.0/8 to any in via $pif		#RFC 1918 private IP
$cmd 00305 deny all from 10.0.0.0/8 to any in via $pif1
$cmd 00306 deny all from 10.0.0.0/8 to any in via $pif2
$cmd 00307 deny all from 127.0.0.0/8 to any in via $pif		#Interface de bouclage
$cmd 00308 deny all from 127.0.0.0/8 to any in via $pif1
$cmd 00309 deny all from 127.0.0.0/8 to any in via $pif2
$cmd 00310 deny all from 0.0.0.0/8 to any in via $pif		#Tout l'internet 
$cmd 00311 deny all from 0.0.0.0/8 to any in via $pif1
$cmd 00312 deny all from 0.0.0.0/8 to any in via $pif2 
$cmd 00313 deny all from 169.254.0.0/16 to any in via $pif      #DHCP auto-config
$cmd 00314 deny all from 169.254.0.0/16 to any in via $pif1
$cmd 00315 deny all from 169.254.0.0/16 to any in via $pif2
$cmd 00316 deny all from 192.0.2.0/24 to any in via $pif        #reserved for docs
$cmd 0O317 deny all from 192.0.2.0/24 to any in via $pif1 	
$cmd 00318 deny all from 192.0.2.0/24 to any in via $pif2
$cmd 00319 deny all from 204.152.64.0/23 to any in via $pif     #Sun cluster interconnect
$cmd 00320 deny all from 204.152.64.0/23 to any in via $pif1    
$cmd 00321 deny all from 204.152.64.0/23 to any in via $pif2
$cmd 00322 deny all from 224.0.0.0/3 to any in via $pif         #IP de classe  D & E multidiffusion
$cmd 00323 deny all from 224.0.0.0/3 to any in via $pi1
$cmd 00324 deny all from 224.0.0.0/3 to any in via $pif2
# REFUSER TOUT TRAFIC PROVENANT DE L'EXTERIEUR VIA LE PROTOCOLE ICMP (PING)
$cmd 00325 deny icmp from any to any in via $pif
$cmd 00326 deny icmp from any to any in via $pif1
$cmd 00327 deny icmp from any to any in via $pif2
# REFUSER TOUT TRAFIC PROVENANT DE L'EXTERIEUR VIA LE PROTOCOLE ident 
$cmd 00328 deny tcp from any to any 113 in via $pif
$cmd 00329 deny tcp from any to any 113 in via $pif1
$cmd 00330 deny tcp from any to any 113 in via $pif2
# REFUSER TOUT TRAFIC DES SERVICES VIA NETBIOS
$cmd 00331 deny tcp from any to any 137 in via $pif
$cmd 00332 deny tcp from any to any 137 in via $pif1
$cmd 00333 deny tcp from any to any 137 in via $pif2
$cmd 00334 deny tcp from any to any 138 in via $pif
$cmd 00335 deny tcp from any to any 138 in via $pif1
$cmd 00336 deny tcp from any to any 138 in via $pif2
$cmd 00337 deny tcp from any to any 139 in via $pif
$cmd 00338 deny tcp from any to any 139 in via $pif1
$cmd 00339 deny tcp from any to any 139 in via $pif2
$cmd 00340 deny tcp from any to any 81 in via $pif
$cmd 00341 deny tcp from any to any 81 in via $pif1
$cmd 00342 deny tcp from any to any 81 in via $pif2
# REFUSER TOUT PAQUET FRAGMENTE
$cmd 00343 deny all from any to any frag in via $pif
$cmd 00344 deny all from any to any frag in via $pif1
$cmd 00345 deny all from any to any frag in via $pif2
# REFUSE LES PAQUETS ACK QUI NE SONT PAS PRESENTS DANS LA TABLE DE REGLES DYNAMIQUE
$cmd 00346 deny tcp from any to any established in via $pif
$cmd 00347 deny tcp from any to any established in via $pif1
$cmd 00348 deny tcp from any to any established in via $pif2
# AUTORISER LE TRAFIC ENTRANT EN PROVENANCE D'UN SERVEUR DHCP PUBLIC (Fournisseur d'accès internet, par exemple)
# remplacez x.x.x.x par l'adresse IP du serveur DHCP
#$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state
#$cmd 00361 allow udp from any to x.x.x.x 67 in via $pif1 keep-state
#$cmd 00362 allow udp from any to x.x.x.x 67 in via $pif2 keep-state
# AUTORISER LE TRAFIC ENTRANT VIA LE PROTOCOLE HTTP (pour un serveur web, par exemple)
#$cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2
#$cmd 00401 allow tcp from any to me 80 in via $pif1 setup limit src-addr 2
#$cmd 00402 allow tcp from any to me 80 in via $pif2 setup limit src-addr 2
# AUTORISER LE TRAFIC ENTRANT VIA LE PROTOCOLE HTTPS (pour un serveur web, par exemple)
#$cmd 00403 allow tcp from any to me 443 in via $pif setup limit src-addr 2
#$cmd 00404 allow tcp from any to me 443 in via $pif1 setup limit src-addr 2
#$cmd 00405 allow tcp from any to me 443 in via $pif2 setup limit src-addr 2
# AUTORISER LE TRAFIC ENTRANT VIA LE PROTOCOLE SSH
#$cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2
#$cmd 00411 allow tcp from any to me 22 in via $pif1 setup limit src-addr 2
#$cmd 00412 allow tcp from any to me 22 in via $pif2 setup limit src-addr 2
# REJETTER ET ENREGISTRER DANS UN JOURNAL D'EVENEMENTS TOUTE AUTRE CONNEXION ENTRANTE  
$cmd 00497 deny log all from any to any in via $pif
$cmd 00498 deny log all from any to any in via $pif1
$cmd 00499 deny log all from any to any in via $pif2

#####################################
########## REGLES DE DNAT  ##########
#####################################
# N'oubliez pas d'exécuter, en root, (en plus des 2 commandes au début du script), les lignes suivantes, pour activer le NAT sur ipfw :
# sysrc gateway_enable=YES
# sysrc firewall_nat_enable=YES
#####################################
# Exemple de DNAT lorsque le paquet arrive sur l'interface $pif (interface WAN pour l'exemple)
#nat -interface $pif -redirect_port IP-LAN:PORT PORT-ADRESSE-WAN-CHOISI
#$cmd 00600 allow tcp from IP-AUTORISEE-A-SE-CONNECTER to me PORT-ADRESSE-WAN-CHOISI in via $pif  

###################################################################### 
# CONSERVER LA TRACE DES PAQUETS REJETTES DANS UN JOURNAL D'EVENEMENTS
######################################################################
$cmd 00999 deny log all from any to any

