Mot-clé - netfilter

Fil des billets - Fil des commentaires

Support du suivi de connexion pour IP Virtual Server

Vous utilisez un serveur sous GNU/Linux Debian qui fait à la fois de la répartition de charge en mode NAT, pour un ou plusieurs services donnés, à l'aide d'IPVS (IP Virtual Server) et pare-feu grâce à NetFilter ? Vous rencontrez probablement quelques soucis en terme de filtrage, et notamment pour les paquets SYN/ACK renvoyés par vos serveurs réels sur lesquels vous faite la répartition de charge. C'est là qu'intervient le support du suivi de connexion pour IPVS ! Il vous faut en effet appliquer le patch NFCT (NetFilter Connection Tracking) à votre noyau pour que tout fonctionne correctement.

Lire la suite...

Gestion du FTP avec NetFilter

Il est sûrement arrivé à plus d'un de vouloir laisser passer un flux FTP sur leur pare-feu NetFilter : Quoi de plus normal ?

Survient alors le fameux épisode du module ip_conntrack_ftp, voir en prime ip_nat_ftp dans le cas d'une translation d'adresse. On se renseigne sur la différence entre active mode et passive mode côté FTP, on rajoute quelques lignes dans NetFilter, puis on finit par tester le tout : ça ne fonctionne pas ... Ou tout du moins qu'en partie.

On épluche les logs et on se rend finalement compte que l'authentification s'est correctement effectuée, mais que cela bloque dès lors qu'une commande est envoyée : Mais pourquoi donc ? Vient alors la découverte du module ip_conntrack_ftp, la solution à tous nos soucis. Un suivi de connexion effectué par iptables rien que pour le FTP : n'est ce pas merveilleux ? On s'empresse alors de charger ce fameux module :

# modprobe ip_conntrack_ftp

Puis on relance notre test afin de s'assurer que tout fonctionne.

Cependant nous aimerions bien mettre en place une petite translation de destination. Dans ce cas, nous pensons à bien charger le module adéquat :

# modprobe ip_nat_ftp

Il nous vient soudain une idée : Pourquoi ne pas changer le port par défaut de notre serveur FTP ? 45 au lieu de 21, ça semble pas mal ça ? Sachant qu'en plus de cela nous avons un autre serveur FTP qui est à l'écoute sur le port 44.

On se rend finalement compte que cela ne fonctionne plus, de nouveau. En effet il faut indiquer à ce cher module ip_conntrack_ftp le(s) port(s) que ce dernier doit gérer. Pour ceci, l'option ports est des plus remarquable :

# modprobe ip_conntrack_ftp ports=44,45

Si le module en question était déjà chargé, il est bien sûr nécessaire de le décharger avant de le charger avec la commande précédente :

# rmmod ip_conntrack_ftp

Il peut être enfin appréciable de faire en sorte que tout cela se charge au démarrage de la machine. Sur une distribution telle que GNU/Linux Debian Etch, deux fichiers s'avèrent nécessaires :

  • Le fichier /etc/modules contenant les modules à charger, ligne par ligne, tels que ip_conntrack_ftp et ip_nat_ftp
  • Le fichier /etc/modprob.d/arch/i386 contenant des aliases et options pour les modules à charger. Dans le cas du module ip_conntrack_ftp, il s'agirait d'ajouter la ligne suivante : options ip_conntrack_ftp ports=44,45

On redémarre notre machine et voilà que tout semble fonctionner du premier coup : Que du bonheur !

NetFilter : quelques "régles"

Les deux premières leçons à retenir en ce qui concerne NetFilter :

  • Il faut toujours initialiser les cibles par défaut, même pour les chaînes des tables que nous ne pensons peut-être pas utiliser. Il faut en toute situation connaître l'état de de ces cibles. Un script Netfilter devrait donc toujours commencer par :
     # Initialisation de la table FILTER
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
     # Initialisation de la table NAT
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
     # Initialisation de la table MANGLE
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
  • En cas de doute, utiliser la commande "iptables -L -v -t table" permettant d'obtenir bon nombre d'informations sur le nombre de paquets pour lesquels s'applique une règle ou un comportement par défaut.