Asumming pour le serveur et le client un restrictif INPUT
et ouvert OUTPUT
, à savoir:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
Et depuis iptables-extensions (8) sur l'exemple de FTP en mode actif:
1. NOUVEAU
NEW Le paquet a démarré une nouvelle connexion ou est associé d'une autre manière à une connexion qui n'a pas vu de paquets dans les deux sens.
Le client sur le port 50000
(n'importe quel port non privilégié aléatoire) se connecte au serveur FTP sur le port 21
, le serveur aurait au moins besoin de cela pour accepter cette connexion entrante:
iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT
2. ÉTABLI
ESTABLISHED Le paquet est associé à une connexion qui a vu des paquets dans les deux sens.
Maintenant , du côté client, il a ouvert une connexion sortante vers le serveur sur le port à l' 21
aide d' un port local 50000
et il a besoin iptables suivantes pour permettre la réponse à arriver de server (21)
à client (50000)
:
sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
3. LIÉS
RELATED Le paquet commence une nouvelle connexion, mais est associé à une connexion existante, telle qu'un transfert de données FTP ou une erreur ICMP.
Maintenant, une fois que la connexion FTP a été établie et qu'une connexion de données est sur le point d'être établie, le client ouvre un socket de serveur (oui, avec un client FTP actif, il devient un serveur pour la connexion de données) sur le port 60000
(le client, à ma connaissance, marquera ce port). 60000
quant RELATED
à l’autre connexion depuis 50000->21
) et enverra ce numéro de port au serveur à l’aide de la PORT
commande FTP . Ensuite, le serveur FTP ouvrira une nouvelle connexion de son port 20
à un autre 60000
sur le client. Et bien, le client a maintenant besoin des éléments suivants pour permettre à cette nouvelle connexion de réussir:
sudo iptables -A INPUT -m state --state RELATED -j ACCEPT
Enfin, pour que cela fonctionne, vous devez activer le ip_conntrack_ftp
module de noyau afin de permettre au système de marquer les connexions / packages de la manière suivante RELATED
(c'est ce que je comprends, je n'ai pas trop creusé le sujet):
modprobe ip_conntrack_ftp