Asumiendo que tanto el servidor como el cliente sean restrictivos INPUT
y abiertos OUTPUT
, es decir:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
Y de iptables-extensions (8) sobre el ejemplo de FTP en modo activo:
1. NUEVO
NUEVO El paquete ha comenzado una nueva conexión o se ha asociado con una conexión que no ha visto paquetes en ambas direcciones.
El cliente en el puerto 50000
(cualquier puerto aleatorio sin privilegios) se conecta al servidor FTP en el puerto 21
, el servidor necesitaría al menos esto para aceptar esta conexión entrante:
iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT
2. ESTABLECIDO
ESTABLECIDO El paquete está asociado con una conexión que ha visto paquetes en ambas direcciones.
Ahora, en el lado del cliente, abrió una conexión de salida de servidor en el puerto 21
utilizando un puerto local 50000
y necesita los siguientes iptables para permitir que la respuesta a llegar a partir server (21)
de client (50000)
:
sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
3. RELACIONADO
RELACIONADO El paquete está iniciando una nueva conexión, pero está asociado con una conexión existente, como una transferencia de datos FTP o un error ICMP.
Ahora, una vez que se ha establecido la conexión FTP y se va a realizar una conexión de datos, el cliente abrirá un socket de servidor (sí, con el cliente FTP activo se convierte en un servidor para la conexión de datos) en el puerto 60000
(según tengo entendido, el cliente marcará este puerto 60000
en cuanto RELATED
a la otra conexión desde 50000->21
) y enviará este número de puerto al servidor utilizando el PORT
comando FTP . Luego, el servidor FTP abrirá una nueva conexión de su puerto 20
a puerto 60000
en el cliente, y bueno, el cliente ahora requiere lo siguiente para permitir que esta nueva conexión tenga éxito:
sudo iptables -A INPUT -m state --state RELATED -j ACCEPT
Finalmente, para que esto funcione, debe habilitar el ip_conntrack_ftp
módulo del kernel para permitir que el sistema marque conexiones / paquetes como RELATED
( según tengo entendido, no he profundizado demasiado en esto):
modprobe ip_conntrack_ftp