Come configurare vsftpd per funzionare con la modalità passiva


49

Ogni volta che eseguo vsftpdl' installazione centos, installo solo l'ambiente jail per gli utenti e il resto è la configurazione predefinita di vsftpd. Creo l'utente e provo a connettermi con filezilaclient ftp, ma non sono riuscito a connettermi con la modalità passiva. Cambio sempre la transfer settingsmodalità attiva per connettermi con successo alla ftp serveraltrimenti ottengo

 Error: Failed to retrieve directory listing

Quindi c'è un modo per cambiare qualsiasi direttiva nel vsftp.conffile e possiamo connetterci con la modalità passiva al server?

Risposte:


86

Per configurare la modalità passiva per vsftpd è necessario impostare alcuni parametri in vsftpd.conf.

pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090

Ciò abilita la modalità passiva e la limita all'utilizzo delle undici porte per le connessioni dati. Ciò è utile in quanto è necessario aprire queste porte sul firewall.

iptables -I INPUT -p tcp --destination-port 10090:10100 -j ACCEPT

Se dopo il test tutto funziona, salva lo stato del tuo firewall con

service iptables save

che aggiornerà il /etc/sysconfig/iptablesfile.

Per fare questo è CentOS 7 devi usare il nuovo firewalld, non iptables:

Trova la tua zona:

# firewall-cmd --get-active-zones
public
  interfaces: eth0

La mia zona è "pubblica", quindi imposto la mia zona su pubblica, aggiungo l'intervallo di porte e successivamente ricarichiamo:

# firewall-cmd --permanent --zone=public --add-port=10090-10100/tcp
# firewall-cmd --reload

Cosa succede quando si effettua una connessione

  • Il client effettua una connessione al server vsftpd sulla porta 21.

  • Il server risponde al client dicendogli a quale porta connettersi dall'intervallo sopra specificato.

  • Il client stabilisce una connessione dati sulla porta specificata e la sessione continua.

C'è una grande spiegazione delle diverse modalità ftp qui.


Mi chiedo perché metti la maxporta dopo il min... ma, soprattutto, se apri le porte da 10090 a 10100, sono 11 porte e non 10 come dici tu.
Alexis Wilke,

Credo che sia alfabetico, non importa davvero perché sono direttive separate.
user9517 supporta GoFundMonica il

3
Questo non funziona per me senza pasv_address.
fbmd,

mi ci sono voluti anni per trovarlo, nessuna delle guide di vsftpd elenca questo ... geniale
Pete,

Fantastico - questa configurazione di vsftp ha risolto tutti i miei problemi con il firewall FTP :)
BurninLeo,

24

Per abilitare la modalità passiva, imposta le seguenti opzioni di configurazione nel tuo vsftp.conf:

pasv_enable=YES
pasv_min_port=41361
pasv_max_port=65534
pasv_address=xxx.xxx.xxx.xxx

Ovviamente puoi cambiare la porta di inizio e fine e sostituire gli xxx con l'IP pubblico del tuo server.

Inoltre, è necessario aprire l'intervallo di porte in modalità passiva nel firewall. Su centos, puoi caricare il ip_conntrack_ftpmodulo per gestire le connessioni ftp nel tuo firewall. Modifica /etc/sysconfig/iptables-confige aggiungi ip_conntrack_ftp all'opzione IPTABLES_MODULES. Successivamente riavviare iptables:

/sbin/service iptables restart

3
pasv_addressè ciò che fa il trucco quando tutto il resto è stato impostato e non funziona ancora.
fbmd,

1
@fbmd prima di provare pasv_address, si dovrebbe anche verificare se sia pasv_max che min_port sono nell'ordine giusto. Mi è successo che avevo configurato il valore massimo in pasv_min_port e vsftpd semplicemente lo ignora. È un difetto / bug silenzioso noto che ti farà pensare visivamente che le porte pasv siano configurate correttamente, ma non lo sono. Questo è successo a me e ha risolto il mio problema.
Pedro Sousa

Se si desidera specificare un indirizzo DNS in pasv_address, è necessario aggiungere pasv_addr_resolve=YES(impostazione predefinita a NO)
Pierre-Damien,

6

Accanto a pasv_enable=YES, specificare un intervallo di porte in cui VSFTP eseguirà la modalità PASV:

pasv_min_port=50000
pasv_max_port=50999
port_enable=YES

Non dimenticare di configurare iptables per consentire la trasmissione di pacchetti su queste porte:

iptables -I INPUT -p tcp --dport 50000:50999 -j ACCEPT

Su un sistema CentOS standard c'è un DROP generale che fa iptables -A INPUT ... ignorare le regole aggiunte
user9517 supporta GoFundMonica il

Assicurati di includere pasv_addressnel file vsftpd.conf.
Pedro Madrid,

3

Di solito, non è il server ftp, vsftpd, ma il firewall come iptable che impedisce l'utilizzo della modalità passiva (blocco della connessione tcp necessaria per il trasferimento dei dati).


In realtà, vsftpd potrebbe essere abbastanza intelligente da aprire una porta nel firewall ... ma dalle risposte che vedo qui, non sembra che sia capace di tale impresa.
Alexis Wilke,

3
@Alexsis. Non ha senso un firewall se le app ignorano le regole e aprono comunque le porte.
ekerner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.