logo rss

Packet Filter le firewall OpenBSD

Je regroupe ici mes notes sur Packet Filter le pare-feu du système d'exploitation OpenBSD

A savoir

/etc/pf.conf
/usr/share/pf

La commande pfctl

pfctl -nf /etc/pf.conf
pfctl -nvf /etc/pf.conf
pfctl -f /etc/pf.conf
pfctl -F rules
pfctl -F all
pfctl -s rules
pfctl -s info
pfctl -s all
pfctl -s state
pfctl -k host | network

Les macros

tcp_services = "{ ssh, domain, www, https }"
pass out proto tcp to any port $tcp_services keep state

Activer PF au démarrage

pf=YES	#activer PF
pf_rules=/etc/pf.conf	# précise l'emplacement du fichier de regles (optionnel)
pfctl -e 		#Enable : active PF
pfctl -ef /etc/pf.conf	#File : permet de préciser un fichier de règles à charger.
block in all	#bloquer tout le trafic entrant
block all  	#bloquer le trafic entrant et sortant. A mettre en premier.
pass out all keep state	#keep state (conserver l'état) comportement par défaut (keep state flags S/SA, laisse passer le flux de retour correspondant à cette connexion. no state pour ne pas prendre en compte l'état)

Mode routeur

Activer le mode routeur de façon temporaire

# sysctl net.inet.ip.forwarding=1
# sysctl net.inet6.ip6.forwarding=1

Activer le mode routeur de façon permanente

Il faut éditer le fichier /etc/sysctl.conf.

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

Exemple de NAT (LAN vers WAN) avec autorisation de tout le trafic

#MACROS
ext_if = "re0"
int_if = "re1"
localnet = $int_if:network

#NAT
match out on $ext_if from $localnet to any nat-to $ext_if

#FILTRAGE
block all
pass from { lo0, $localnet } to any keep state

A savoir : Les règles sont lues de haut en bas. C'est la dernière règle qui correspondra qui sera appliquée. Le mot clé quick permet de s'affranchir de cet ordre. Lorsqu'un paquet correspond à une règle quick, il est traité selon cette règle.

NB : il est de bon usage de placer ses règles de NAT avant ses règles de filtrage.

Exemple NAT (LAN vers WAN) avec autorisation limité du trafic

#MACROS
ext_if = "re0"
int_if = "re1"
client_out = "{ ftp-data, ftp, ssh, domain, pop3, auth, nntp, http, https, 446, cvspserver, 2628, 5999, 8000, 8080 }"
udp_services = "{ domain, ntp }"
localnet = $int_if:network

#NAT
match out on $ext_if from $localnet to any nat-to $ext_if
#FILTRAGE
block all
pass inet proto tcp from $localnet to any port $client_out keep state
pass quick inet proto { tcp, udp } from $localnet to any port $udp_services keep state

Exemple de redirection SSH

Règle de redirection

Redirection ANY:22 vers 10.0.0.2 22 :

pass in quick on $ext_if proto tcp from any to any port ssh rdr-to 10.0.0.2 port ssh

Autoriser les connexions SSH depuis l'extérieur

pass in inet proto tcp from any to $ext_if port ssh keep state
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact