Quiero permitir el tráfico FTP entrante.
CentOS 5.4:
Este es mi /etc/sysconfig/iptables
archivo.
# 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 21
se 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 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"
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 NEW
a 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_ftp
mó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=1
ví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 ESTABLISHED
conexiones, 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:
- https://github.com/rtsisyk/linux-iptables-contrack-exploit
- http://home.regit.org/wp-content/uploads/2011/11/secure-conntrack-helpers.html
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é OUTPUT
reglas 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 iptables
adivinar 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