En supposant que le serveur et le client soient tous deux soumis à des restrictions INPUT
et ouvrir OUTPUT
c'est-à-dire :
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
Et de iptables-extensions(8) sur l'exemple du FTP en mode actif :
1. NOUVEAU
NEW Le paquet a commencé une nouvelle connexion ou autrement associé à à une connexion qui n'a pas vu de paquets dans les deux sens.
Le client sur le port 50000
(un port non privilégié quelconque) se connecte au serveur FTP sur le port 21
le serveur a besoin d'au moins cette information 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 passer paquets dans les deux sens.
Maintenant, du côté client, il a ouvert une connexion sortante au serveur sur le port 21
en utilisant un port local 50000
et il a besoin des iptables suivants pour permettre à la réponse d'arriver de server (21)
a client (50000)
:
sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
3. RELATIONS
RELATED Le paquet démarre une nouvelle connexion, mais est associé à une connexion existante, comme un transfert de données FTP ou une erreur ICMP. ou une erreur ICMP.
Maintenant, après que la connexion FTP a été établie et qu'une connexion de données est sur le point d'être effectuée, le client ouvrira un socket serveur (oui, avec le FTP actif, le client devient un serveur pour la connexion de données) sur le port 60000
(à ma connaissance, le client marquera ce port 60000
comme RELATED
à l'autre connexion de 50000->21
) et enverra ce numéro de port au serveur en utilisant le FTP PORT
commande. Ensuite, le serveur FTP ouvrira une nouvelle connexion depuis son port 20
au port 60000
sur le client, et bien, le client a maintenant besoin de ce qui suit 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 l'option ip_conntrack_ftp
module du noyau pour permettre au système de marquer les connexions/paquets comme étant RELATED
(c'est ce que je comprends, je n'ai pas trop creusé la question) :
modprobe ip_conntrack_ftp