本页内容
- 第 1 步 - 更新并升级软件包
- 第 2 步 - 安装 ProFTPD
- 第 3 步 - 配置 ProFTPD
- 第 4 步 - 配置 SSL/TLS
- 第 5 步 - 创建 FTP 用户
- 第 6 步 - 测试
- 参考
FTP(文件传输协议)可能是向服务器上传文件最常用的方法。ProFTPD 是一款广受欢迎且易于配置的 FTP 服务器,适用于类 Unix 系统,并支持 SSL/TLS 加密。
本教程将介绍如何在 FreeBSD 12.0 上使用 ProFTPD 服务器程序搭建 FTP 服务器。我们将安装 ProFTPD 服务器,通过 SSL/TLS 安全机制完成部署与加固,并创建 FTP 用户。
先决条件
本指南将使用 FreeBSD 操作系统,服务器配置为 1 GB 内存和 2 个 CPU。
我们将完成以下操作:
- 更新并升级软件包
- 安装 ProFTPD
- 配置 ProFTPD
- 配置 SSL/TLS
- 创建 FTP 用户
- 测试
第 1 步 - 更新并升级软件包
首先,我们将使用 FreeBSD 的 pkg 软件包管理工具更新软件包仓库,并将所有软件包升级到最新版本。
使用以下命令更新所有可用仓库并将所有软件包升级到最新版本。
pkg update
pkg upgrade
所有安装完成后,进入下一步并安装 ProFTPD 软件包。

第 2 步 - 安装 ProFTPD
在本步骤中,我们将安装 ProFTPD 软件包。FreeBSD 仓库提供了 ProFTPD 软件包以及用于后端数据库的其他模块,例如面向 MySQL、PostgreSQL 和 SQLite 数据库的模块。
使用以下命令查看所有可用的 ProFTPD 软件包。
pkg search proftpd
您将看到如下所示的结果。

现在仅使用下面的 pkg 命令安装 ProFTPD 软件包。
pkg install proftpd
安装完成后,将 ProFTPD 服务添加到系统开机启动项。
sysrc proftpd_enable=yes
然后启动 ProFTPD 服务并查看其状态。
service proftpd start
service proftpd status
现在你应看到 ProFTPD 服务已在 FreeBSD 12.0 系统上启动并运行。

默认情况下,该服务使用默认的 FTP 端口 '21'。使用以下 sockstat 命令查看系统上已开放的端口。
sockstat -4 -l -P tcp
你将看到 ProFTPD 服务正在端口 '21' 上运行。
第 3 步 - 配置 ProFTPD
现在我们将通过编辑位于 '/usr/local/etc' 目录中的配置文件来配置 ProFTPD 安装。
进入 '/usr/local/etc' 目录,并使用 vim 编辑器修改配置文件 'proftpd.conf'。
cd /usr/local/etc/
vim proftpd.conf
将 'ServerName' 修改为你的信息,并将端口保持为默认的 '21'。
ServerName "Hakase-Labs ProFTPd Server" Port 21
关闭 IPv6 支持,并为每个用户启用 jail 限制。
UseIPv6 off DefaultRoot ~
如需额外配置,可添加以下配置以隐藏服务器身份,并取消对用户登录所需有效 shell 的限制。
# Hide Server Identity ServerIdent off RequireValidShell no
现在为 ProFTPD 系统及系统上的每次传输启用日志。
# Setup Log Files TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log
保存并退出。
接下来,创建 ProFTPD 日志目录 '/var/log/proftpd'。
mkdir -p /var/log/proftpd
然后使用以下命令重启 ProFTPD 服务。
service proftpd restart
至此,ProFTPD 服务已重启,并已基于基本配置正常运行。

第 4 步 - 配置 SSL/TLS
在本步骤中,我们将通过为 ProFTPD 服务器启用 TLS 模块来加固 ProFTPD 部署。我们将启用 mod_tls 模块,然后向 ProFTPD 配置目录添加额外的 TLS 配置。
在继续之前,请确保你已获取 SSL 证书,然后将证书文件复制到 '/usr/local/etc/ssl' 目录。
cp /pat/to/ssl/*.pem /usr/local/etc/ssl/

随后,进入 '/usr/local/etc' 目录,并使用 vim 编辑器修改 ProFTPD 配置文件 'proftpd.conf'。
cd /usr/local/etc/
vim proftpd.conf
将以下 'Include' 配置添加到文件末尾。
Include /usr/local/etc/proftpd/tls.conf
保存并退出。
接下来,在 '/usr/local/etc/proftpd/' 目录中创建 'tls.conf' 配置文件。
vim proftpd/tls.conf
将相关内容替换为你自己的信息,并将配置粘贴到该文件中。
# Load the TLS Module LoadModule mod_tls.c # Define the SSL/TLS Configuration <IfModule mod_tls.c> TLSEngine on TLSRSACertificateFile /usr/local/etc/ssl/fullchain.pem TLSRSACertificateKeyFile /usr/local/etc/ssl/privkey.pem TLSLog /var/log/proftpd/tls.log TLSProtocol TLSv1.2 TLSRequired on TLSVerifyClient off </IfModule>
保存并退出。
现在使用以下命令重启 ProFTPD 服务。
service proftpd restart
至此,ProFTPD 服务已在启用 SSL/TLS 的情况下正常运行,你可以通过 FTP 安全地向服务器传输文件。

第 5 步 - 创建 FTP 用户
在本步骤中,我们将创建一个新 FTP 用户。我们将创建一个带有主目录和密码的新系统用户,但不允许其通过 shell 登录。
创建一个名为 'hakase' 的新用户,其主目录为 '/home/hakase',默认 shell 为 'nologin'。
运行以下命令。
adduser
现在按如下内容输入各项信息。
Username: hakase Full name: Hakase Labs Uid (Leave empty for default): Login group [hakase]: Login group is hakase. Invite hakase into other groups? []: Login class [default]: Shell (sh csh tcsh bash rbash nologin) [sh]: nologin Home directory [/home/hakase]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: no Use a random password? (yes/no) [no]: no Enter password: Enter password again: Lock out the account after creation? [no]: Username : hakase Password : ***** Full Name : Hakase Labs Uid : 1001 Class : Groups : hakase Home : /home/hakase Home Mode : Shell : /usr/sbin/nologin Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (hakase) to the user database. Add another user? (yes/no): no Goodbye!
至此,新的 FTP 用户 'hakase' 已创建完成。
第 6 步 - 测试
本步骤将使用 'FileZilla' 软件测试我们的 ProFTPD 安装。该软件可安装在 Mac、Windows 和 Linux 操作系统上。
打开 FileZilla 应用程序,输入服务器地址、用户名、密码以及 FTP 端口 '21'。
现在点击 'Quickconnect'(快速连接)按钮,系统将提示你验证 SSL/TLS 证书。
点击 'Ok'(确定)以验证服务器证书。

至此,你将成功连接到 ProFTPD 服务器,并可在已启用 SSL/TLS 的 ProFTPD 服务器上安全地传输文件。

至此,FreeBSD 上 ProFTPD 服务器的安装与配置已成功完成。
参考
- https://www.freebsd.org/doc/
- http://www.proftpd.org/docs/