Iptables para permitir el FTP entrante

Quiero permitir el tráfico FTP entrante.

CentOS 5.4:

Este es mi /etc/sysconfig/iptables .

 # 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 pnetworkingeterminada, el module ip_conntrack_netbios_n se está cargando.

 #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 module, ya que intenté downloadlo y todavía no tuve suerte.

Si deshabilito iptables, puedo transferir mi copy de security de otra máquina a FTP. Si iptables se está aplicando, entonces la transferencia falló.

Su server ftp necesita un canal para transferir datos. El puerto 21 se usa para establecer la connection. Entonces, para hacer posible la transferencia de datos, necesitarás habilitar el puerto 20 también. Ver la siguiente configuration

Primero cargue el siguiente module para asegurarse de que las conexiones pasivas de ftp no sean rechazadas

 modprobe ip_conntrack_ftp 

Permitir conexiones FTP en el puerto 21 entrante 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 20 para 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" 

Por último, permitir el tráfico entrante pasivo de 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 get más información sobre los problemas de FTP y firewall, consulte: http://slacksite.com/other/ftp.html#active

Editar: Se agregó NEW a la regla de input del puerto 21.

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 module nf_conntrack_ftp . Esto es más conciso y legible, lo que generalmente es bueno, especialmente con firewalls …

FWIW, parece que hubo un cambio en kernel 4.7, por lo que necesita establecer net.netfilter.nf_conntrack_helper=1 través de 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 

(mira aquí para más detalles)

Agregar NEW lo arregló, creo.

Ahora, mi file iptables se ve así ..

 # Generated by iptables-save v1.3.5 on Thu Oct 3 22:25:54 2013 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [824:72492] -A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -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 --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT COMMIT # Completed on Thu Oct 3 22:25:54 2013 

Escribiéndolo como respuesta, ya que no se permiten demasiados personajes en el comentario. Muchas gracias por su ayuda.

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 modo pasivo y activo en el lado del cliente

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