如何在Ubuntu上使用Pure-FTPd设置安全FTP服务器
Pure-FTPd是一个免费的开源FTP服务器,其设计考虑到安全性。 在本教程中,我们将研究如何在具有Pure-FTPd的Ubuntu服务器上设置安全的FTP服务器以及如何实施TLS加密。
注意:本教程适用于所有当前的Ubuntu版本,包括Ubuntu 20.04、19.10、18.04和16.04。
纯FTPd功能:
- 它支持SSL / TLS加密,因此可以保护密码和命令。
- 它可以在大多数类似Unix的系统上运行:Linux,BSD,Solaris,Darwin,HPUX,AIX甚至iPhone。
- 提供21种语言的版本。
- 允许您监视活动的会话。
- 支持虚拟配额系统。
- 以及更多
有关功能的完整列表,请访问Pure-FTPd官方网站。
步骤1:在Ubuntu Server上安装Pure-FTPd
它在软件存储库中,因此发出以下命令来安装FTP服务器。
sudo apt install pure-ftpd
一旦安装,Pure-FTPd将自动启动,如以下命令所示:
systemctl status pure-ftpd
输出:
● pure-ftpd.service Loaded: loaded (/etc/init.d/pure-ftpd; bad; vendor preset: enabled) Active: active (running) since Mon 2016-12-12 21:51:46 EST; 23s ago Docs: man:systemd-sysv-generator(8) CGroup: /system.slice/pure-ftpd.service └─3435 pure-ftpd (SERVER)
preset: enabled
表示它将在系统启动时自动启动。 如果它没有运行,请给它加注星标:
sudo systemctl start pure-ftpd
而且它正在侦听TCP端口21,这是控制端口,可以看到
sudo netstat -lnpt | grep pure-ftpd
默认情况下,匿名访问是禁用的。 从现在开始,您可以使用系统帐户登录,但是纯文本FTP是不安全的,因此不建议使用。 为了拥有安全的FTP服务器,我们需要使用TLS加密通信。
步骤2:强制执行TLS加密
要同时启用纯文本加密和TLS加密,请运行以下命令,以创建 /etc/pure-ftpd/conf/TLS
文件,然后将数字1放入文件中。
echo 1 | sudo tee /etc/pure-ftpd/conf/TLS
但是建议禁用纯文本并仅使用TLS加密,因此将数字2替换为文件。
echo 2 | sudo tee /etc/pure-ftpd/conf/TLS
现在我们实施了TLS,我们需要获取有效的TLS证书。 不建议使用自签名证书,因为用户将看到以下屏幕截图所示的警告。
步骤3:从“让我们加密”获取受信任的TLS证书
运行以下命令从默认的Ubuntu存储库安装Let’s Encrypt客户端(certbot)。
sudo apt install certbot
我建议使用 standalone
要么 webroot
插件以获取Pure-FTPd的TLS证书。
独立插件
如果您的Ubuntu服务器上没有运行Web服务器,则可以使用独立插件。 运行以下命令。 不要忘记为您的子域设置DNS A记录。
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d ftp.example.com
哪里:
certonly
:获取证书但不安装。--standalone
:使用独立插件获取证书--preferred-challenges http
:执行http-01挑战以验证我们的域,该域将使用端口80。--agree-tos
:同意“让我们加密服务条款”。--email
:电子邮件地址用于帐户注册和恢复。-d
:指定您的域名。
从以下屏幕截图中可以看到,我已成功获得证书。
使用webroot插件
如果您的Ubuntu服务器具有Web服务器,则最好使用webroot插件来获取证书,因为webroot插件几乎可以与每个Web服务器一起使用,并且我们不需要在Web服务器中安装证书。
首先,您需要创建一个虚拟主机 ftp.example.com
。
阿帕奇
如果您使用的是Apache,则
sudo nano /etc/apache2/sites-available/ftp.example.com.conf
并将以下行粘贴到文件中。
<VirtualHost *:80> ServerName ftp.example.com DocumentRoot /var/www/Pure-FTPd </VirtualHost>
保存并关闭文件。 然后创建Web根目录。
sudo mkdir /var/www/Pure-FTPd
将www-data(Apache用户)设置为Web根目录的所有者。
sudo chown www-data:www-data /var/www/Pure-FTPd -R
启用此虚拟主机。
sudo a2ensite ftp.example.com
重新加载Apache以使更改生效。
sudo systemctl reload apache2
创建并启用虚拟主机后,运行以下命令以使用webroot插件获取Let’s Encrypt证书。
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
Nginx的
如果您使用的是Nginx,则
sudo nano /etc/nginx/conf.d/ftp.example.com.conf
将以下行粘贴到文件中。
server { listen 80; listen [::]:80; server_name ftp.example.com; root /var/www/Pure-FTPd/; location ~ /.well-known/acme-challenge { allow all; } }
保存并关闭文件。 然后创建Web根目录。
sudo mkdir -p /var/www/Pure-FTPd
将www-data(Nginx用户)设置为Web根目录的所有者。
sudo chown www-data:www-data /var/www/Pure-FTPd -R
重新加载Nginx以使更改生效。
sudo systemctl reload nginx
创建并启用虚拟主机后,运行以下命令以使用webroot插件获取Let’s Encrypt证书。
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
步骤4:安装证书
Pure-FTPd要求将证书和私钥合并到一个名为 pure-ftpd.pem
并存储在 /etc/ssl/private/
目录。
更改为 /etc/letsencrypt/live/ftp.example.com/
目录。
cd /etc/letsencrypt/live/ftp.example.com/
您可以使用 cat
命令将两个文件合并为一个,如下所示。
sudo cat fullchain.pem privkey.pem | sudo tee /etc/ssl/private/pure-ftpd.pem
确保只有root用户才能读取该文件。
sudo chmod 600 /etc/ssl/private/pure-ftpd.pem
我们需要使用以下命令生成Diffie-Hellman参数:
sudo openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 4096
如果您的邮件服务器具有单个CPU内核,那么这将花费很长时间(大约10分钟)。
重新启动Pure-FTPd。
sudo systemctl restart pure-ftpd
检查状态以查看其是否正在运行。
systemctl status pure-ftpd
现在,您可以通过TLS连接到FTP服务器。
如果您使用Nautilus文件管理器通过纯文本连接到FTP服务器 ftp://
协议
连接将被拒绝。
代替 ftp://
,您必须使用 ftps://
。
请注意,默认情况下,Filezilla不信任任何证书(自签名或CA签名)。 用户必须选择自己信任证书。
FileZilla未知证书警告
包起来
我希望本教程可以帮助您在Ubuntu上使用Pure-FTPd设置安全的FTP服务器。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯。 您也可以在Twitter或关注我们的Facebook页面上关注我们。