# $OpenBSD: pf.conf,v 1.29 2005/08/23 02:52:58 henning Exp $ # # See pf.conf(5) and /usr/share/pf for syntax and examples. # Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1 # in /etc/sysctl.conf if packets are to be forwarded between interfaces. # # ATTENTION: CE FICHIER N'A PAS ETE TESTE. IL EST DONC POSSIBLE QU'IL NE # SOIT PAS DIRECTEMENT OPERATIONNEL # ext_if="pcn0" int_if="pcn1" # pas de filtre de paquet sur l'interface de bouclage set skip on { lo } # on bloque les paquets en retournant une erreur (icmp ou tcp reset) # plutot qu'en detruisant (DROP) les paquets set block-policy return # # on normalise les paquets entrants (et donc les paquets en transit # car ils sont aussi vus sur l'interface d'entree) # scrub in # Rappel: si on utilise pas le mot clef quick, la regle qui s'applique # a un paquet est la derniere dont il verifie les criteres # # Ainsi, on met les traitements generaux en debut de fichier et les traitements # particuliers en fin de fichier. # # # par defaut, on bloque tout # block in log block out log # # ping depuis A et C vers B # # seule cette regle ne suffit pas : # - elle permet au paquet aller de passer en entrée sur le coupe feu (1) # - "keep state" fait que le paquet retour vu en out sur $int_if sera accepté (4) # # - par contre, le paquet aller, vu en sortie sur $ext_if ne sera pas # associe a l'etat cre'e': # + il sera donc refusé en sortie (2) # + et en entrée (3) # schema: # 192.168.10.1 coupe feu 192.168.20.2 ~# (1) (2) # ------------> IN OUT -----> #paquet retour: # (4) (3) # <------------OUT IN <------ # partie gérée partie non gérée # par le keep state par le keep state # de la règle de la règle # # ci-apres 4 solutions. Les 2 dernieres sont couramment utilisees. La derniere # avec l'utilisation de TAGs est la plus elegante et conforme a la philosophie # de pf. # # pass in log on $int_if proto icmp from {192.168.10.1 192.168.10.3} to 192.168.20.2 icmp-type 8 tag OK keep state # solution 1 (precis mais bourrin car on duplique les criteres) #pass out log on $ext_if proto icmp from {192.168.10.1 192.168.10.3} to 192.168.20.2 icmp-type 8 keep state # solution 2 (equivalente si l'antispoofing est active) : ne pas # preciser in et l'interface sur la regle initiale qui sera alors : #pass log proto icmp from {192.168.10.1 192.168.10.3} to 192.168.20.2 icmp-type 8 keep state # solution 3 (courante) : on autorise tout en sortie ce qui autorise aussi # tout le trafic provenant du routeur # pass out log on $ext_if keep state # solution 4 (avec les TAGS) # les paquets autorises en entree ont ete marques par le tag OK # on les autorise en sortie pass out quick log on $ext_if tagged OK keep state # # ssh depuis A vers B # pass in log on $int_if proto tcp from 192.168.10.1 to 192.168.20.2 port ssh flags S/SA tag OK keep state # # dns de A et C vers B # # on autorise le port 53 (domain, cf /etc/services) tant en udp qu'en tcp # de A ou C vers B pass in log on $int_if proto {udp tcp } from {192.168.10.1 192.168.10.3} to 192.168.20.2 port domain tag OK keep state