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