Permitir FTP con IPTables

26

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 obtener 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
IOTAMAN
fuente
1
arregló su formato para que sea legible.
Avery Payne
¿Estoy asumiendo que estás usando Rackspace? El tutorial tiene ese defecto. Solo sigue las instrucciones de @Evan Anderson.
Andres SK

Respuestas:

41

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

  • Para hacer FTP en modo activo, debe permitir conexiones entrantes al puerto TCP 21 y conexiones salientes desde el puerto 20.
  • Para hacer FTP en modo pasivo, debe permitir las conexiones entrantes al puerto TCP 21 y las conexiones entrantes a un puerto generado aleatoriamente en la computadora servidor (es necesario usar un módulo conntrack en netfilter)

No tiene nada en relación con su cadena de SALIDA en su publicación, así que también la incluiré aquí. 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 leer:

IPTABLES_MODULES="ip_conntrack_ftp"

Guarde la configuración de iptables y reinicie iptables.

service iptables save
service iptables restart

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

nc -l 21

Esto comenzará a escuchar netcat en el puerto 21 y hará eco de la entrada a su shell. Desde otro host, TELNET al puerto 21 de su servidor y verifique que obtiene una conexión TCP y que ve la salida en el shell cuando escribe la conexión TELNET.

Finalmente, recupere 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 lo hace netcat, entonces algo está mal con su configuración de VSFTPD.

Evan Anderson
fuente
Gracias por la ayuda, las sugerencias que describió para el modo pasivo solucionaron mi problema. Agradezco la ayuda.
IOTAMAN
Reiniciar iptables eliminará cualquier cambio que haya realizado si no tiene IPTABLES_SAVE_ON_STOP establecido en "yes".
Kevin M
@Kevin: ¡Absolutamente, totalmente un buen punto! > smile <Voy a soltar una edición sobre eso ahora.
Evan Anderson
@ GLB03: No hay problema. Vivo para el servidor falla ...> sonrisa <
Evan Anderson
Esta respuesta no funcionó para mí, así que para cualquier otra persona que tenga este problema, señalaré que esto (y también la apertura / entrada del puerto 21) funcionó para mí: linuxquestions.org/questions/linux-security-4 / ... -
ehsanul
0

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
Mate
fuente
0

En mi caso, me faltaba el módulo del kernel ip_conntrack_ftp. Necesita ser cargado. 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

Kornel
fuente