Protezione FTP
Vsftpd è un server ftp ampiamente utilizzato e se lo stai configurando sul tuo server per il trasferimento di file, tieni presente i problemi di sicurezza che si presentano. Il protocollo ftp ha una sicurezza debole inerente al suo design. Trasferisce tutti i dati in testo normale (non crittografato) e su una rete pubblica/non sicura questo è qualcosa di troppo rischioso.
Per risolvere il problema abbiamo FTPS. Protegge la comunicazione FTP crittografandola con SSL/TLS. E questo post mostra come configurare la crittografia SSL con vsftpd.
Installa vsftpd
Vsftpd è disponibile nei repository predefiniti di tutte le principali distribuzioni inclusi debian, Ubuntu, centos e fedora e può essere installato senza problemi. C'è un solo file di configurazione chiamato vsftpd.conf che risiede nella directory /etc.
# ubuntu/debian $ sudo apt-get install vsftpd # centos/fedora # sudo yum install vsftpd
Il resto è configurare vsftpd per utilizzare la crittografia SSL per la comunicazione ftp. È solo un processo in 2 fasi.
Genera un certificato SSL
Il primo passo è creare un certificato SSL e un file chiave che vsftpd utilizzerà per la crittografia. Il parametro di configurazione "rsa_cert_file" conterrà il percorso del file del certificato. Ha un valore predefinito che può essere trovato nella pagina man.
$ man vsftpd.conf | grep rsa_cert_file -A 5 rsa_cert_file This option specifies the location of the RSA certificate to use for SSL encrypted connections. Default: /usr/share/ssl/certs/vsftpd.pem
È diverso su Ubuntu e CentOS. Possiamo archiviarlo in qualsiasi posizione desideriamo.
Crea un certificato SSL con il comando openssl. Stiamo mettendo insieme il certificato e la chiave in un unico file.
# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Rispondi alle domande che seguono e in pochi secondi il file del certificato dovrebbe essere pronto. L'output sarebbe simile a questo
# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem Generating a 1024 bit RSA private key .............++++++ ....++++++ writing new private key to '/etc/ssl/private/vsftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:US State or Province Name (full name) []:NY Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []:
Configura Vsftpd per SSL
L'attività successiva consiste nel configurare vsftpd per utilizzare questo certificato SSL per la crittografia. Il file vsftpd.conf può essere trovato nel seguente percorso
# Ubuntu/Debian /etc/vsftpd.conf # CentOS/Fedora /etc/vsftpd/vsftpd.conf
Apri il file vsftpd.conf e modificalo come mostrato di seguito
Quanto segue indicherà a vsftpd la posizione del certificato/file chiave da utilizzare.
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
Aggiungi le seguenti opzioni per attivare SSL. Abilita SSL e forzerà la crittografia per i trasferimenti di dati e gli accessi.
ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES
Le righe seguenti diranno a vsftpd di utilizzare TLS quando applicabile, che è più sicuro del suo predecessore SSL.
ssl_tlsv1=YES ssl_sslv2=YES ssl_sslv3=YES
Sono state aggiunte tutte le direttive di configurazione necessarie. Salva il file e riavvia vsftpd
# service vsftpd restart # or # sudo /etc/init.d/vsftpd restart
Test SSL su vsftpd
Ora che la nostra configurazione è completa, è tempo di testarla.
Per prima cosa prova a connetterti usando il semplice comando ftp e dovrebbe non riuscire a chiedere la crittografia.
$ ftp 192.168.1.5 Connected to 192.168.1.5. 220 (vsFTPd 2.2.2) Name (192.168.1.5:enlightened): pal 530 Non-anonymous sessions must use encryption. Login failed. ftp>
Quindi verifica che la crittografia SSL funzioni correttamente. I client ftp Gui come FileZilla possono usare FTPS, ma per comodità, ricorreremo allo strumento da riga di comando chiamato curl, ed ecco il comando molto semplice che dovrebbe connettersi al server FTPS ed elencare i file
$ curl --ftp-ssl --insecure --ftp-port 192.168.1.2:6003 --user pal:pal ftp://192.168.1.5 -rw-r--r-- 1 0 0 0 Jan 03 06:10 abcd.txt -rw-r--r-- 1 0 0 0 Jan 03 06:10 cdefg.txt
Questi file si trovano nella directory home dell'utente pal sul server ftp. Assicurati di avere alcuni file nella home del server per elencarli e verificarli. Altrimenti curl ritornerebbe semplicemente vuoto.
Ecco una rapida spiegazione delle opzioni di curl che abbiamo usato.
ftp-ssl : Tells curl to use ftps insecure : Tells curl not to use any ssl certificate to authenticate and just connect right away. ftp-port : Tells curl that we are in ACTIVE mode. In ACTIVE mode the client has to tell the server the hostname and port number to connect back to. If you have configured passive mode ftp, then do not use this. user : Specifies the username and password joined with a colon. The last thing is the ftp url.
Se non specifichi la porta ftp sulle connessioni ftp in modalità ATTIVA, visualizzerai l'errore "Nessun percorso verso l'host
".
Se ricevi "bind() non riuscito, abbiamo finito le porte!" errore, quindi cambia semplicemente il numero di porta.
Puoi anche utilizzare un URL come questo
$ curl ftps://192.168.1.5 ...
Ma poi curl proverebbe a connettersi alla porta 990 e, a meno che tu non abbia configurato vsftpd per servire su quella porta, non funzionerà.
Se curl non riesce a connettersi a vsftpd o elenca correttamente i file, usa l'opzione dettagliata (-v) e guarda ulteriori dettagli su cosa è andato storto, quindi correggilo.
Note aggiuntive
FTPS protegge FTP aggiungendo la crittografia SSL al canale di comunicazione. Un altro modo consigliato per stabilire connessioni sicure è utilizzare SFTP (SSH File Transfer Protocol). Il popolare pacchetto OpenSSH che fornisce il servizio ssh, fornisce anche SFTP senza la necessità di alcuna configurazione o configurazione aggiuntiva. Tuttavia, non tutti i client FTP e gli strumenti di sviluppo Web supportano SFTP.