Permitir FTP con IPTables

Permitir FTP con IPTables

Mi escenario actual implica permitir varias reglas, pero necesito que se pueda acceder a ftp desde cualquier lugar. El sistema operativo es Cent 5 y estoy usando VSFTPD. Parece que no puedo entender la sintaxis correcta. Todas las demás reglas funcionan correctamente.

## Filter all previous rules
*filter

## Loopback address
-A INPUT -i lo -j ACCEPT

## Established inbound rule
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Management ports
-A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT

## Allow NRPE port (Nagios)
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT

##Allow FTP

## Default rules
:INPUT DROP [0:0]
:FORWARD DROP
:OUTPUT ACCEPT [0:0]
COMMIT

Las siguientes son reglas que he probado.

##Allow FTP
-A INPUT --dport 21 any -j ACCEPT
-A INPUT --dport 20 any -j ACCEPT

-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT


-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT

-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT

Respuesta1

Aquí está el documento al que remito a las personas para que puedan seguir el protocolo FTP:http://slacksite.com/other/ftp.html

  • Para realizar FTP en modo activo, debe permitir conexiones entrantes al puerto TCP 21 y conexiones salientes desde el puerto 20.
  • Para realizar FTP en modo pasivo, debe permitir conexiones entrantes al puerto TCP 21 y conexiones entrantes a un puerto generado aleatoriamente en la computadora servidor (lo que requiere el uso de un módulo conntrack en netfilter)

No tienes nada relacionado con tu cadena de SALIDA en tu publicación, así que la incluiré aquí también. Si su cadena de SALIDA es predeterminada, entonces esto es importante.

Agregue estas reglas a su configuración de iptables:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

Para admitir FTP en modo pasivo, debe cargar el módulo ip_conntrack_ftp en el arranque. Descomente y modifique la línea IPTABLES_MODULES en el archivo /etc/sysconfig/iptables-config para que lea:

IPTABLES_MODULES="ip_conntrack_ftp"

Guarde la configuración de iptables y reinicie iptables.

service iptables save
service iptables restart

Para descartar completamente que VSFTPD sea un problema, detenga VSFTPD, verifique que no esté escuchando en el puerto 21 con "netstat -a" y luego ejecute:

nc -l 21

Esto iniciará la escucha de netcat en el puerto 21 y hará eco de la entrada en su shell. Desde otro host, haga TELNET al puerto 21 de su servidor y verifique que obtenga una conexión TCP y que vea el resultado en el shell cuando escriba la conexión TELNET.

Finalmente, reinicie VSFTPD, verifique que esté escuchando en el puerto 21 e intente conectarse nuevamente. Si la conexión a netcat funcionó, entonces sus reglas de iptables están bien. Si la conexión a VSFTPD no funciona después de que netcat lo haga, entonces algo anda mal con su configuración de VSFTPD.

Respuesta2

Prueba esta regla. Nota: $EXTIPes su dirección IP externa para el servidor FTP.

-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT

Respuesta3

En mi caso me faltaba el módulo del kernel ip_conntrack_ftp. Es necesario cargarlo. Entonces puedes probar esto:

modprobe ip_conntrack_ftp

Y también agregue ip_conntrack_ftp a /etc/modules para que funcione después de reiniciar

información relacionada