FTP como protocolo é um pouco estranho. Ele usa duas conexões TCP, em vez de apenas a que a maioria dos protocolos usa. Você tem TCP porta 21 , o comando e a conexão de login e uma segunda porta TCP (aleatória) , para a conexão de dados.
Com FTP passivo, a segunda conexão é para uma porta TCP disponível aleatoriamente acima de 1024.
Seus problemas parecem indicar que você não tem essa segunda porta aberta no seu firewall.
Existem várias maneiras de lidar com isso:
Corrigir a porta PASV (intervalo) Uma solução é configurar o VSFTPD para usar um pequeno intervalo de portas ou apenas uma única porta e criar uma regra de firewall para abrir essas portas:
# /etc/vsftpd/vsftpd.conf
# reserve TCP ports 2121-2142 for passive FTP
pasv_min_port=2121
pasv_max_port=2142
E, em seguida, abra o intervalo de portas fixas no seu firewall .
Em um firewall Linux iptables, o módulo multiportas permite um intervalo de portas em vez de 20 linhas, cada uma abrindo uma única porta:
iptables -I INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 2121:2142 -j ACCEPT
A vantagem desse método é que ele também funciona com configurações mais complexas de vários firewalls, encaminhamento de porta etc.
Use um firewall inteligente
Com um firewall inetlligent você não precisa abrir portas adicionais.
Como o FTP é um protocolo de texto claro, seu firewall pode verificar o tráfego na conexão de comando na porta 21. Ele reconhecerá a porta PASV que será atribuída e abrirá o firewall dinamicamente.
Para os firewalls do netfilter (iptables) do Linux, há um módulo do kernel para fazer isso para você: nf_conntrack_ftp
também conhecido como ip_conntrack_ftp
. Carregue esse módulo e os problemas devem desaparecer:
modprobe -i ip_conntrack_ftp
Se você tiver um firewall com estado aceitando RELATED
, o tráfego permitirá automaticamente a conexão com a porta de dados.
Se isso resolver seus problemas de conexão FTP, configure o módulo a ser carregado no momento da inicialização. O método RHEL6 e CentOS 6 de fazer isso, neste caso, é por meio de:
# /etc/sysconfig/iptables-config
# Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which
# are loaded after the firewall rules are applied. Options for the helpers are
# stored in /etc/modprobe.conf.
IPTABLES_MODULES="nf_conntrack_ftp"