FTP passivo não está funcionando corretamente

3

Eu tenho tido um problema com a configuração do vsftpd. Eu consegui obter FTPS ativo funcionando bem, mas passivo está sendo teimoso. Eu acho que o problema está em como o iptables está gerenciando portas. Quando tento usar ftps passivos no filezilla, tudo se conecta, mas a listagem de diretórios falha com EHOSTUNREACH . Aqui está a troca entre o cliente e o servidor configurando o modo passivo

Command:    PASV
Response:   227 Entering Passive Mode (192,168,0,10,169,39).
Command:    LIST
Error:      The data connection could not be established: EHOSTUNREACH - No route to host

Aqui está a seção relevante do meu vsftpd.conf :

pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000

Aqui está a saída de iptables -L :

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             ctstate NEW tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp ctstate NEW,ESTABLISHED /* Allow ftp connections on port 21 */
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp-data ctstate RELATED,ESTABLISHED /* Allow ftp connections on port 20 */
ACCEPT     tcp  --  anywhere             anywhere             tcp spts:safetynetp:50000 dpts:safetynetp:50000 ctstate ESTABLISHED /* Allow passive ftp inbound connections */

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp ctstate NEW,ESTABLISHED /* Allow ftp connections on port 21 */
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp-data ctstate ESTABLISHED /* Allow ftp connections on port 20 */
ACCEPT     tcp  --  anywhere             anywhere             tcp spts:safetynetp:50000 dpts:safetynetp:50000 ctstate RELATED,ESTABLISHED /* Allow passive ftp inbound connections */

Aqui está o comando que usei para definir a regra de saída. A entrada é muito parecida, mas eu posso fornecê-la se for necessário.

iptables -A OUTPUT -p tcp -m tcp --sport 40000:50000 --dport 40000:50000 -m conntrack -- ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive ftp inbound connections"

Não consigo encontrar nenhuma informação sobre a parte safetynetp das regras do iptables passivo on-line, e acho que o problema é que isso está em conflito com o intervalo de portas (40.000-50.000) que eu configurei, já que parece que está aceitando apenas a porta 50.000.

O iptables pode não ser o problema, eu não sei. Se mais informações forem necessárias, eu certamente posso distribuí-las.

EDITAR:

Aqui estão as regras do iptables do cliente:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
    
por Mitchell 08.06.2017 / 02:36

2 respostas

1

O servidor FTP ao qual você está se conectando está do outro lado de um roteador NAT? Eu vejo 192.168. no seu IP, então existe uma rede privada envolvida. Você tem uma configuração bem aberta do iptables, então eu não acho que é o problema (embora você possa tentar limpar as tabelas e ver se isso faz alguma diferença).

O FTP passivo requer que o servidor FTP faça uma nova conexão com seu cliente FTP ( veja aqui uma descrição mais detalhada do FTP passivo ), portanto, essa nova conexão de retorno provavelmente não conseguirá voltar através de um roteador NAT. Existe um módulo FTP para o IPTables que eu acho que lida com isso, mas se o NAT estiver envolvido, eu usaria apenas o FTP ativo (ou como outro comentário diz - use outra coisa completamente, se possível).

O IPTables que você mostrou é seu para cliente FTP, não um roteador de algum tipo, correto?

    
por 08.06.2017 / 11:02
1

Eu tenho visto problemas que o servidor ftp está dando um endereço NAT, quando o endereço público do servidor FTP é aquele que deve ser configurado. Isso causa problemas com a conexão passiva, pois o cliente está esperando um endereço diferente. A conexão inicial normalmente funciona nesse cenário, mas o modo passivo não funciona.

Dê uma olhada na configuração do vsftpd, ou sinta-se à vontade para compartilhá-la.

    
por 08.06.2017 / 15:30