FreeBSD : Installer un firewall avec pf

freebsd

Après une installation de FreeBSD bien fraîche, il faut commencer par le protéger en utilisant un firewall histoire de ne pas trop ouvrir de port à la terre entière !

Pour commencer PF n’est pas activé par défaut, on va l’activer au démarrage du serveur en ajoutant ces lignes dans /etc/rc.conf :

pf_enable=”YES”
pf_flags=””
pflog_enable=”YES”
pflog_file=”/var/log/pflog”
pflog_flags=””

Pour activer PF manuellement le temps d’un test par exemple, on charge le module a la main :

kldload pf.ko

Pour vérifier si le module est bien pris en compte :

kldstat
Id Refs Address Size Name
1 5 0xffffffff80100000 c9fe20 kernel
2 1 0xffffffff80e22000 a1c pflog.ko
3 1 0xffffffff80e23000 2bd81 pf.ko

On peut voir le status de PF en utilisant :

>pfctl -s all

On pilote PF avec l’utilisation de pfctl :

pfctl -d // Désactiver pf
pfctl -e // Activer pf
pfctl -f /etc/pf.conf -n // Tester le fichier de configuration
pfctl -f /etc/pf.conf -v // Charger en mode verbeux le fichier de conf
pfctl -sr // Afficher le jeux de règles en cours
pfctl -s info // Statistiques de filtrage

Éditons maintenant le fichier des régles (/etc/pf.conf) et ajoutons ces lignes :

# Les Macros
ext_if=”em0″
home=”{ xxx.xxx.xxx.xxx }”
tcp_services=”{ 80 }”
tcp_home=”{ 22, 8080 }”
udp_services=”{ 123 }”
udp_home=”{ 123 }”
#Desactiver tous les filtres sur lo
set skip on lo
#Comportement sur un paquet interdit = drop
set block-policy drop
#Normalise les paquets pour toutes les interfaces avec randomize
scrub in all random-id
#Politique par defaut Block tout en entree et autorise la sortie
block in
pass out
# Antispoof sur lo, em0
antispoof quick for { lo, em0 }
#Ports pour extérieur
pass in on $ext_if proto icmp to $ext_if icmp-type echoreq
pass in on $ext_if proto tcp to $ext_if port $tcp_services
pass in on $ext_if proto udp to $ext_if port $tcp_services
#Ports pour maison
pass in on $ext_if proto tcp from $home to $ext_if port $tcp_home
pass in on $ext_if proto udp from $home to $ext_if port $udp_home

Avec ce script, vous pouvez autoriser des services UDP et TCP pour tout le monde.
Il suffit de renseigner tcp_services et udp_services.
Si vous voulez ouvrir des ports uniquement à votre adresse IP (fixe bien sûre !).
Il faut renseigner home, udp_home et tcp_home.
Pour prendre en compte ce nouveau fichier de configuration, il suffit de le tester puis de l’activer !

pfctl -vnf /etc/pf.conf

D’autres commandes bien utiles :>

pfctl -F all -f /etc/pf.conf // Rechargement du fichier de configuration
tcpdump -i pflog0 -ttt -e -n // Affichage temps réel des paquets bloqués
tcpdump -r /var/log/pflog -ttt -e -n // Affichage du contenus des logs

Voilà, redémarrez pour voir si tout est opérationnel !
J’espère que ça pourra servir à d’autres. Pour moi c’est que du bonheur :)

Ce contenu a été publié dans Linux, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.