Iptables para permitir FTP entrante

Iptables para permitir FTP entrante

Quiero permitir el tráfico FTP entrante.

CentOS 5.4:

Este es mi /etc/sysconfig/iptablesarchivo.

# Generated by iptables-save v1.3.5 on Thu Oct  3 21:23:07 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133:14837]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Thu Oct  3 21:23:07 2013

Además, de forma predeterminada, se carga el módulo ip_conntrack_netbios_n.

#service iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

Pero el problema no está en ese módulo, ya que intenté descargarlo y aún así no tuve suerte.

Si desactivo iptables, puedo transferir mi copia de seguridad desde otra máquina a FTP. Si se aplica iptables, entonces la transferencia falló.

Respuesta1

Su servidor ftp necesita un canal para transferir datos. El puerto 21se utiliza para establecer la conexión. Entonces, para hacer posible la transferencia de datos 20, también deberá habilitar el puerto . Vea la siguiente configuración

Primero cargue el siguiente módulo para asegurarse de que las conexiones ftp pasivas no sean rechazadas

modprobe ip_conntrack_ftp

Permitir conexiones FTP en el puerto 21entrante y saliente

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"

Permitir puerto FTP 20para conexiones activas entrantes y salientes

iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"

Finalmente permitir el tráfico entrante pasivo FTP

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections"

Para obtener más información sobre problemas de FTP y firewall, consulte:http://slacksite.com/other/ftp.html#active

Editar:Agregado NEWa la regla de entrada del puerto 21.

Respuesta2

Ya vi reglas tan extensas en varios Blogs, etc. y me pregunté por qué no simplemente usar

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

junto con el nf_conntrack_ftpmódulo. Esto es más conciso y legible, lo cual generalmente es algo bueno, especialmente con firewalls...

FWIW, parece que hubo un cambio en el kernel 4.7, por lo que es necesario configurarlo net.netfilter.nf_conntrack_helper=1vía sysctl(por ejemplo, ponerlo en /etc/sysctl.d/conntrack.conf) o usar

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp

(veraquípara más detalles)

Respuesta3

Cliente FTP:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

SERVIDOR FTP:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Para alternar entre el modo pasivo y activo en el lado del cliente

ftp> passive
Passive mode on.
ftp> passive
Passive mode off.

Respuesta4

Si necesita conexiones tanto activas como pasivas y ya acepta ESTABLISHEDconexiones, como por ejemplo:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Luego solo necesitas abrir el puerto 21 y agregar una regla especial para puertos pasivos. No se necesita ninguna regla para el puerto 20, ya que la regla anterior ya lo acepta ESTABLISHED.

Primero acepte nuevas conexiones en port 21:

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

Luego agregue el asistente CT para puertos pasivos 1024::

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp --dport 1024: -j ACCEPT

Ver también:

Nota:debe configurar el 1024:como en su servidor FTP: busque los puertos pasivos predeterminados en su configuración FTP. De lo contrario, abriría demasiados puertos que pueden no ser relativos a FTP.

Nota IMPORTANTE:No agregué OUTPUTreglas como van mis valores predeterminados iptables -P OUTPUT ACCEPT. Lo que significa que confío en lo que sale de mi caja. Puede que esa no sea una buena opción, especialmente en una configuración NAT.

Nota muy importante:FTPS no funcionará con dicha configuración, ya que el puerto pasivo está oculto (encriptado), por lo que no hay forma de iptablesadivinar cuál es el puerto bueno. VerCambiar IPTables para permitir FTP sobre TLS usando puertos pasivosyhttps://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

información relacionada