Para configurar o modo passivo para o vsftpd, você precisa definir alguns parâmetros no vsftpd.conf.
pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090
Isso habilita o modo passivo e o restringe a usar as onze portas para conexões de dados. Isso é útil porque você precisa abrir essas portas no seu firewall.
iptables -I INPUT -p tcp --destination-port 10090:10100 -j ACCEPT
Se depois de testar tudo isso, salve o estado do seu firewall com
service iptables save
que atualizará o arquivo /etc/sysconfig/iptables
.
Para fazer isso é o CentOS 7 você tem que usar o novo firewalld, não o iptables:
Encontre sua zona:
# firewall-cmd --get-active-zones
public
interfaces: eth0
Minha zona é "pública", por isso, defino minha zona como pública, adiciono o intervalo de portas e, depois disso, recarregamos:
# firewall-cmd --permanent --zone=public --add-port=10090-10100/tcp
# firewall-cmd --reload
O que acontece quando você faz uma conexão
-
Seu cliente faz uma conexão com o servidor vsftpd na porta 21.
-
O servidor responde ao cliente informando a qual porta conectar-se a partir do intervalo especificado acima.
-
O cliente faz uma conexão de dados na porta especificada e a sessão continua.
Há uma ótima explicação sobre os diferentes modos de ftp aqui