Eu tenho algumas regras iptables em um host, com o objetivo de encaminhar o tráfego FTP passivo vindo da Internet para um servidor FTP localizado dentro da mesma sub-rede. As regras são as seguintes:
iptables -t nat -A PREROUTING -p tcp --dport 21 -j DNAT --to-destination $ftp_host:21
iptables -t nat -A PREROUTING -p tcp --dport 20 -j DNAT --to-destination $ftp_host:20
iptables -t nat -A PREROUTING -p tcp --dport $pasv_min_port:$pasv_max_port -j DNAT --to-destination $ftp_host:$pasv_min_port-$pasv_max_port
iptables -A FORWARD -s $ftp_host -p tcp --sport 20 -j ACCEPT
iptables -A FORWARD -s $ftp_host -p tcp --sport 21 -j ACCEPT
iptables -A FORWARD -s $ftp_host -p tcp --sport $pasv_min_port:$pasv_max_port -j ACCEPT
iptables -A OUTPUT -p tcp --sport $pasv_min_port: --dport $pasv_min_port: -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport $pasv_min_port: --dport $pasv_min_port: -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT: --dport 1024: -m st$
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport $pasv_min_port: --dport $pasv_min_port: -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE
Isso funciona muito bem. O problema é quando tento redirecionar o tráfego ftp para um servidor ftp externo, com ip público (colocando em $ftp_host
).
Nesse caso, posso conectar-me ao servidor remoto, mas ele pára quando começa a listar o diretório e, em seguida, desconecta o tempo limite.
Preciso modificar algo nas regras do iptables?