使用VSFTPD搭建FTP协议,从服务器下载离线完成的文件

FTP协议诞生于20世纪70年代,比HTTP的出现早了近20年。在HTTP并不完善的年代,FTP协议过帮助很多教育科研乃至政府机关完成不同规模的文件交互,其存在代表了与现代互联网完全不同的一个互联的世界。但随着HTTP协议的逐步完善,断点续传,大文件分割传输等,FTP的独特优势逐渐被HTTP赶上或是超越。

本文配合《安装transmission,在闲置服务器上搭建属于自己的BT离线下载服务》食用效果更佳

为什么选用FTP传输文件?

上文提到HTTP传输已经成熟了,目前已知的PS4游戏下载就是依托HTTPS(HTTP协议加密版)传输,但是涉及到不同客户端的兼容问题以及客户端的使用便捷,就不得不拉出FTP来了,毕竟Windows情况下打开文件夹就等于打开FTP。另外还有基于SSH的SFTP传输,基本上有SSH的系统必定自带SFTP,而且SFTP自带加密传输不需要额外配置,优势比FTP大很多。如果服务器和客户端之间的连接不跨国,可以直接使用SFTP。但是如果服务器在海外,我推介放弃SFTP,因为SFTP基于SSH,而SSH曾经用于翻墙,走22端口的连接一般一小时下来也就几百K的流量,而SFTP在SSH协议上面传输大量数据,经常会被误以为是利用SSH协议翻墙导致服务器被列入黑名单。

这次选来搭建FTP的程序是VSFTPD,当然其他PureFTPd、ProFTPD等并没有特别严重的问题,选择 VSFTPD 单纯就是因为我习惯用这个。

搭建环境

  • 操作系统:CentOS 7.4
  • 内存:1G
  • CPU:1核心

开始搭建

安装 VSFTPD 本体

由于VSFTPD程序包含在CentOS的官方软件源里面,所以不需要额外添加软件库

yum install vsftpd

安装完毕之后启动 VSFTPD ,并且将其设置成开机自启动

systemctl start vsftpd
systemctl enable vsftpd

使用status命令查询程序运行状态

systemctl status vsftpd

如果返回值如下,证明程序正常运行

配置VSFTPD

配置文件内有所有选项的说明,而且官方网站上面也有对于配置文件项目的说明

vi /etc/vsftpd/vsftpd.conf

然后清空配置文件,复制以下内容粘贴到文件内

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=20000
pasv_max_port=21000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES

具体配置项目不做详细说明,感兴趣的可以到官方配置文件解析(纯英文说明)去了解

给FTP套SSL/TLS加密

FTPS和HTTPS是相同的道理,都是基于协议FTP/HTTP然后套SSL/TLS加密,如果自己有域名而且有购买证书的话,直接将验证文件放到rsa_cert_file和rsa_private_key_file所在的位置即可。如果之前没有用过相关的服务又想套加密,就要自签证书

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

如果你的/etc/vsftpd/vsftpd.conf是完全套用我前面给出的,那工作至此就完成了,如果是自己有额外的设置,请确保证书位置的一致性。然后重启VSFTPD应用新的配置文件

systemctl restart vsftpd

放行指定端口

如果CentOS的firewall处于激活状态,请将20、21、20000-21000(注:20000-21000取决于/etc/vsftpd/vsftpd.conf中pasv_min_port以及pasv_max_port,请注意自己的设定是否与我一致)等端口放行

firewall-cmd --permanent --add-port=20-21/tcp
firewall-cmd --permanent --add-port=20000-21000/tcp

然后重载防火墙来应用变更

firewall-cmd --reload

如果服务商后台有额外提供防火墙,请记得把以上端口也添加到放行列表里

创建FTP用户

创建名为“ftpuser”的用户

adduser ftpuser

然后添加密码

passwd ftpuser

将 “ftpuser” 这个用户添加进允许FTP连接的用户名单里

echo "ftpuser" | sudo tee -a /etc/vsftpd/user_list

创建对应的用户根目录以及设定相关的权限

mkdir -p /home/ftpuser/ftp
chmod 750 /home/ftpuser/ftp
chown -R newftpuser: /home/ftpuser/ftp

到此为止,应该就可以通过“ftpuser”这个用户名以及密码来登录ftp服务器了,Windows常用的FTP工具有FileZillaWinSCP等,都可以试一下。

写在最后

FTP服务器搭建好之后,可以和transmission配合使用,将transmission的下载目录设置到FTP用户的根目录之后,通过transmission的WEBUI添加种子进行下载,通过FTP传输方式从服务器取回。当然,如果服务器的网络状况不太好就没办法了

发表评论

电子邮件地址不会被公开。 必填项已用*标注