OpenBSD & PF : ouverture de ports NFS automatique

D’habitude, sur le serveur NFS qui me permet de booter en réseau mes différentes stations, je n’activais pas PF : tout le trafic pouvait atteindre la machine en entrée.

Ayant activé l’IPv6 sur toutes mes machines et étant donné que la Freebox route tout le trafic IPv6 sur l’interne, je suis dans l’obligation de restreindre les accès en utilisant PF (en IPv4 je n’avais pas ce souci puisqu’elles étaient derrière du NAT).

Le problème avec NFS c’est que certains ports sont alloués de manière statique : nfsd sur le 2049 et le portmapper sur le 111, mais certains autres sont alloués dynamiquement : j’utilise bootparam et mountd pour ma part.

Il me fallait donc une solution pour détecter au démarrage de la machine les ports utilisés par ces services.

La solution que j’utilise est relativement simple. On suppose que PF tourne sur la machine avec un fichier pf.conf valide.

Le principe retenu est d’utiliser une ancre (PF anchor) placée dans les règles de filtrage :

anchor nfs

Ainsi au démarrage de la machine, PF sera démarré avec une ancre d’affectée, à cet instant vide.

Ensuite il reste à lancer mon script Perl permettant de découvrir les ports utilisés et peupler l’ancre PF à l’aide de la commande pfctl.

Pour ce faire, j’utilise le script de démarrage rc.local en ajoutant ceci avant le echo ‘.’ final :

# RPC script
if [ -x /home/scripts/rpcports.pl ] ; then
/home/scripts/rpcports.pl
echo -n ' rpcports.pl'
fi

Attention cependant, ce script s’appuie sur la sortie de la commande rpcinfo -p et se base sur les longueurs fixes des chaînes de caractères en sortie.

Pour finir, le script rpcports.pl en question.

Laisser un commentaire

Vous devez être connecté pour laisser un commentaire.