Como configurar o vsftpd e o iptables para escutar na porta 21 mas rodar em outra porta?

1

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:

  1. Configure o vsftpd para escutar na porta 20000
  2. Configure 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?

    
por cclark 01.09.2009 / 08:47

1 resposta

2

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.

    
por 01.09.2009 / 09:21