mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-29 21:41:00 +08:00
236 lines
9.7 KiB
Markdown
236 lines
9.7 KiB
Markdown
How to Secure a FTP Server Using SSL/TLS for Secure File Transfer in CentOS 7
|
||
============================================================
|
||
|
||
By its original design, FTP (File Transfer Protocol) is not secure, meaning it doesn’t encrypt data being transmitted between two machines, along with user’s credentials. This poses a massive threat to data as well as server security.
|
||
|
||
In this tutorial, we will explain how to manually enable data encryption services in a FTP server in CentOS/RHEL 7 and Fedora; we will go through various steps of securing VSFTPD (Very Secure FTP Daemon) services using SSL/TLS certificates.
|
||
|
||
#### Prerequisites:
|
||
|
||
1. You must have [installed and configured a FTP server in CentOS 7][1]
|
||
|
||
Before we start, note that all the commands in this tutorial will be run as root, otherwise, use the [sudo command][2] to gain root privileges if you are not controlling the server using the root account.
|
||
|
||
### Step 1\. Generating SSL/TLS Certificate and Private Key
|
||
|
||
1. We need to start by creating a subdirectory under: `/etc/ssl/` where we will store the SSL/TLS certificate and key files:
|
||
|
||
```
|
||
# mkdir /etc/ssl/private
|
||
```
|
||
|
||
2. Then run the command below to create the certificate and key for vsftpd in a single file, here is the explanation of each flag used.
|
||
|
||
1. req – is a command for X.509 Certificate Signing Request (CSR) management.
|
||
2. x509 – means X.509 certificate data management.
|
||
3. days – defines number of days certificate is valid for.
|
||
4. newkey – specifies certificate key processor.
|
||
5. rsa:2048 – RSA key processor, will generate a 2048 bit private key.
|
||
6. keyout – sets the key storage file.
|
||
7. out – sets the certificate storage file, note that both certificate and key are stored in the same file: /etc/ssl/private/vsftpd.pem.
|
||
|
||
```
|
||
# openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048
|
||
```
|
||
|
||
The above command will ask you to answer the questions below, remember to use values that apply to your scenario.
|
||
|
||
```
|
||
Country Name (2 letter code) [XX]:IN
|
||
State or Province Name (full name) []:Lower Parel
|
||
Locality Name (eg, city) [Default City]:Mumbai
|
||
Organization Name (eg, company) [Default Company Ltd]:TecMint.com
|
||
Organizational Unit Name (eg, section) []:Linux and Open Source
|
||
Common Name (eg, your name or your server's hostname) []:tecmint
|
||
Email Address []:admin@tecmint.com
|
||
```
|
||
|
||
### Step 2\. Configuring VSFTPD To Use SSL/TLS
|
||
|
||
3. Before we perform any VSFTPD configurations, let’s open the ports 990 and 40000-50000 to allow TLS connections and the port range of passive ports to define in the VSFTPD configuration file respectively:
|
||
|
||
```
|
||
# firewall-cmd --zone=public --permanent --add-port=990/tcp
|
||
# firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp
|
||
# firewall-cmd --reload
|
||
```
|
||
|
||
4. Now, open the VSFTPD config file and specify the SSL details in it:
|
||
|
||
```
|
||
# vi /etc/vsftpd/vsftpd.conf
|
||
```
|
||
|
||
Look for the option ssl_enable and set its value to `YES` to activate the use of SSL, in addition, since TSL is more secure than SSL, we will restrict VSFTPD to employ TLS instead, using the ssl_tlsv1_2 option:
|
||
|
||
```
|
||
ssl_enable=YES
|
||
ssl_tlsv1_2=YES
|
||
ssl_sslv2=NO
|
||
ssl_sslv3=NO
|
||
```
|
||
|
||
5. Then, add the lines below to define the location of the SSL certificate and key file:
|
||
|
||
```
|
||
rsa_cert_file=/etc/ssl/private/vsftpd.pem
|
||
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
|
||
```
|
||
|
||
6. Next, we have to prevent anonymous users from using SSL, then force all non-anonymous logins to use a secure SSL connection for data transfer and to send the password during login:
|
||
|
||
```
|
||
allow_anon_ssl=NO
|
||
force_local_data_ssl=YES
|
||
force_local_logins_ssl=YES
|
||
```
|
||
|
||
7. In addition, we can add the options below to boost up FTP server security. When option require_ssl_reuse is set to `YES`, then, all SSL data connections are required to exhibit SSL session reuse; proving that they know the same master secret as the control channel.
|
||
|
||
Therefore, we have to turn it off.
|
||
|
||
```
|
||
require_ssl_reuse=NO
|
||
```
|
||
|
||
Again, we need to select which SSL ciphers VSFTPD will permit for encrypted SSL connections with the ssl_ciphers option. This can greatly limit efforts of attackers who try to force a particular cipher which they probably discovered vulnerabilities in:
|
||
|
||
```
|
||
ssl_ciphers=HIGH
|
||
```
|
||
|
||
8. Now, set the port range (min and max port) of passive ports.
|
||
|
||
```
|
||
pasv_min_port=40000
|
||
pasv_max_port=50000
|
||
```
|
||
|
||
9. Optionally, allow SSL debugging, meaning openSSL connection diagnostics are recorded to the VSFTPD log file with the debug_ssl option:
|
||
|
||
```
|
||
debug_ssl=YES
|
||
```
|
||
|
||
Save all the changes and close the file. Then let’s restart VSFTPD service:
|
||
|
||
```
|
||
# systemctl restart vsftpd
|
||
```
|
||
|
||
### Step 3: Testing FTP server With SSL/TLS Connections
|
||
|
||
10. After doing all the above configurations, test if VSFTPD is using SSL/TLS connections by attempting to use FTP from the command line as follows:
|
||
|
||
```
|
||
# ftp 192.168.56.10
|
||
Connected to 192.168.56.10 (192.168.56.10).
|
||
220 Welcome to TecMint.com FTP service.
|
||
Name (192.168.56.10:root) : ravi
|
||
530 Non-anonymous sessions must use encryption.
|
||
Login failed.
|
||
421 Service not available, remote server has closed connection
|
||
ftp>
|
||
```
|
||
[
|
||
![Verify FTP SSL Secure Connection](http://www.tecmint.com/wp-content/uploads/2017/02/Verify-FTP-Secure-Connection.png)
|
||
][3]
|
||
|
||
Verify FTP SSL Secure Connection
|
||
|
||
From the screen shot above, we can see that there is an error informing us that VSFTPD can only allow user to login from clients that support encryption services.
|
||
|
||
The command line does not offer encryption services thus producing the error. So, to securely connect to the server, we need a FTP client that supports SSL/TLS connections such as FileZilla.
|
||
|
||
### Step 4: Install FileZilla to Securely Connect to a FTP Server
|
||
|
||
11. FileZilla is a modern, popular and importantly cross-platform FTP client that supports SSL/TLS connections by default.
|
||
|
||
To install FileZilla in Linux, run the command below:
|
||
|
||
```
|
||
--------- On CentOS/RHEL/Fedora ---------
|
||
# yum install epel-release filezilla
|
||
--------- On Debian/Ubuntu ---------
|
||
$ sudo apt-get install filezilla
|
||
```
|
||
|
||
12. When the installation completes (or else if you already have it installed), open it and go to File=>Sites Manager or (press `Ctrl+S`) to get the Site Manager interface below.
|
||
|
||
Click on New Site button to add a new site/host connection details.
|
||
|
||
[
|
||
![Add New FTP Site in Filezilla](http://www.tecmint.com/wp-content/uploads/2017/02/Add-New-FTP-Site-in-Filezilla.png)
|
||
][4]
|
||
|
||
Add New FTP Site in Filezilla
|
||
|
||
13. Next, set the host/site name, add the IP address, define the protocol to use, encryption and logon type as in the screen shot below (use values that apply to your scenario):
|
||
|
||
```
|
||
Host: 192.168.56.10
|
||
Protocol: FTP – File Transfer Protocol
|
||
Encryption: Require explicit FTP over #recommended
|
||
Logon Type: Ask for password #recommended
|
||
User: username
|
||
```
|
||
[
|
||
![Add FTP Server Details in Filezilla](http://www.tecmint.com/wp-content/uploads/2017/02/Add-FTP-Server-Details-in-Filezilla.png)
|
||
][5]
|
||
|
||
Add FTP Server Details in Filezilla
|
||
|
||
14. Then click on Connect to enter the password again, and then verify the certificate being used for the SSL/TLS connection and click `OK` once more to connect to the FTP server:
|
||
|
||
[
|
||
![Verify FTP SSL Certificate](http://www.tecmint.com/wp-content/uploads/2017/02/Verify-FTP-SSL-Certificate.png)
|
||
][6]
|
||
|
||
Verify FTP SSL Certificate
|
||
|
||
At this stage, we should have logged successfully into the FTP server over a TLS connection, check the connection status section for more information from the interface below.
|
||
|
||
[
|
||
![Connected to FTP Server Over TLS/SSL ](http://www.tecmint.com/wp-content/uploads/2017/02/connected-to-ftp-server-with-tls.png)
|
||
][7]
|
||
|
||
Connected to FTP Server Over TLS/SSL
|
||
|
||
15. Last but not least, try [transferring files from the local machine to the FTP sever][8] in the files folder, take a look at the lower end of the FileZilla interface to view reports concerning file transfers.
|
||
|
||
[
|
||
![Transfer Files Securely Using FTP](http://www.tecmint.com/wp-content/uploads/2017/02/Transfer-Files-Securely-Using-FTP.png)
|
||
][9]
|
||
|
||
Transfer Files Securely Using FTP
|
||
|
||
That’s all! Always keep in mind that FTP is not secure by default, unless we configure it to use SSL/TLS connections as we showed you in this tutorial. Do share your thoughts about this tutorial/topic via the feedback form below.
|
||
|
||
--------------------------------------------------------------------------------
|
||
|
||
作者简介:
|
||
|
||
Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge.
|
||
|
||
--------------------------------------------------------------------------------
|
||
|
||
via: http://www.tecmint.com/secure-vsftpd-using-ssl-tls-on-centos/
|
||
|
||
作者:[Aaron Kili][a]
|
||
译者:[译者ID](https://github.com/译者ID)
|
||
校对:[校对者ID](https://github.com/校对者ID)
|
||
|
||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||
|
||
[a]:http://www.tecmint.com/author/aaronkili/
|
||
|
||
[1]:http://www.tecmint.com/install-ftp-server-in-centos-7/
|
||
[2]:http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/
|
||
[3]:http://www.tecmint.com/wp-content/uploads/2017/02/Verify-FTP-Secure-Connection.png
|
||
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/Add-New-FTP-Site-in-Filezilla.png
|
||
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/Add-FTP-Server-Details-in-Filezilla.png
|
||
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Verify-FTP-SSL-Certificate.png
|
||
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/connected-to-ftp-server-with-tls.png
|
||
[8]:http://www.tecmint.com/sftp-command-examples/
|
||
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/Transfer-Files-Securely-Using-FTP.png
|