Acho que o que você está procurando é REDIRECT:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 21 -j REDIRECT --to-port 20000
E você precisa usar o passive-ftp.
Temos um processo Java que contém um servidor FTP incorporado que gostaria de executar em uma máquina RHEL5. Não quero executar o processo como root e não quero que os clientes precisem especificar uma porta ao fazer uma conexão. Parece que eu deveria ser capaz de configurar o vsftpd para escutar em uma porta alternativa (por exemplo, 20000) e, em seguida, configurar ipchains para encaminhar todo o tráfego na porta 21 a 20000. Eu acho que especificamente eu preciso:
ip_conntrack_ftp
para encaminhar o tráfego da porta 21 para 20000 Então, minha pergunta inicial é que isso parece uma abordagem razoável?
Para realizar o passo 1, modifiquei o meu vsftpd.conf para ter a seguinte linha:
listen_port=20000
Eu posso então reiniciar o vsftpd e verificar se ele está escutando em 20000, fazendo o seguinte:
> ftp tstweb1 20000
Connected to tstweb1.pulseenergy.com.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (tstweb1:cclark):
Eu prossigo para o login sem problemas. Etapa 1 concluída.
Quanto ao passo 2, não vejo o módulo carregado:
> /sbin/lsmod | grep ftp
>
Por isso, tento carregá-lo com as informações de encaminhamento de porta adequadas:
> /sbin/modprobe ip_conntrack_ftp ports=21,20000
E eu verifiquei se ele foi carregado:
> /sbin/lsmod | grep ftp
ip_conntrack_ftp 41489 0
ip_conntrack 91109 3 ip_conntrack_ftp,iptable_nat,ip_nat
Mas eu recebo uma conexão recusada quando tento usá-la:
> ftp tstweb1
ftp: connect: Connection refused
Eu sei que o FTP é um protocolo complexo com modos ativos e passivos e comunicação em várias portas, mas fiquei com a impressão de que o módulo ip_conntrack_ftp
esconderia muito disso para mim. Preciso escrever algumas regras específicas do iptables?
Tags iptables ftp vsftpd port forwarding