Featured image of post Iptables : Filtrer ftp avec le mode ip_conntrack

Iptables : Filtrer ftp avec le mode ip_conntrack

Les services FTP ont toujours été difficile à filter.

Tout ceci à cause des modes ftp (actif / passif) qui change la donne.

Voici quelques explications :

1 Les modes ftp

Mode actif :

C’est le mode par défaut des clients FTP.
Le client établi dans un premier temps une session TCP sur le port 21 (FTP) du serveur (« control channel »).

Une fois la session établie et l’authentification FTP acceptée, c’est le serveur qui établi une session TCP (avec le port source 20, FTP-DATA) vers un port dynamique du client (« data channel »).

Mode passif :

Le mode passif est conseillé à partir du moment où l’on est derrière un pare-feu.

Comme pour le FTP actif, le client établi une première session TCP sur le port 21 (FTP) du serveur (« control channel »).
Une fois la session établie et l’authentification FTP acceptée,

On demande au serveur de se mettre en attente de session TCP grâce à la commande PASV. Alors le client peut établir une seconde session TCP sur un port dynamique vers le serveur (« data channel »).

2 Les règles iptables pour le ftp

il faut d’abord charger le module ip_conntrack_ftp ( pour suivre les connexions ftp).

modprobe ip_conntrack_ftp

Ensuite la commande suivantes pour que la connexion puisse s’établir :

iptables -A INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

Ensuite, c’est la que l’on a besoin de ip_conntrack_ftp, pour que le serveur puisse établir la connexion pour les données ( en mode actif).

iptables -A INPUT -i eth0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT

Pour que le serveur puisse établir la connexion pour les données (en mode passif) ici le mode ip_conntrack_ftp est nécessaire.

iptables -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state ESTABLISHED -j ACCEPT
iptables -A OUTOUT -o eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state ESTABLISHED,RELATED -j ACCEPT

Voilà !

Built with Hugo
Theme Stack designed by Jimmy