FTP 是 File Transfer Protocol (文件傳輸協(xié)議)的簡(jiǎn)稱僧叉,用于在 Internet 上控制文件的雙向傳輸。作為很古老的一種文件傳輸協(xié)議骤竹,簡(jiǎn)單的服務(wù)器搭建和豐富的客戶端支持是它的優(yōu)勢(shì),但安全性卻是它很大的一個(gè)軟肋尿贫。(在建立連接時(shí)使用明文傳輸用戶名和密碼等重要信息)
一、安全性測(cè)試
1. 安裝 ftp 服務(wù):
ubuntu 16.04 可以使用包管理器直接安裝 vsftpd 以建立 ftp 服務(wù)器爱沟。
$ sudo apt-get install vsftpd
vsftpd 的配置文件為 /etc/vsftpd.conf
帅霜,默認(rèn)即開(kāi)啟了本地用戶(local_enable=YES
)的登錄和下載權(quán)限,可以直接使用呼伸。如需使用上傳功能身冀,可以將配置文件中 #write_enable=YES
前面的注釋去掉。
因?yàn)橹饕菧y(cè)試安全性括享,其他配置選項(xiàng)暫不做改動(dòng)搂根。
2. 使用 wireshark 抓包
Wireshark 是一個(gè)功能強(qiáng)大的網(wǎng)絡(luò)抓包和分析工具。這里使用它來(lái)對(duì) FTP 客戶端與服務(wù)器之間的數(shù)據(jù)交換進(jìn)行監(jiān)控铃辖。
因?yàn)?Ubuntu 服務(wù)器安裝在 virtualbox 虛擬機(jī)中剩愧,聯(lián)網(wǎng)使用的是 Host-only 模式,所以抓包時(shí)監(jiān)控的是 vboxnet0 虛擬網(wǎng)卡娇斩。
可以看到仁卷,F(xiàn)TP 的用戶名和密碼都是使用明文傳輸?shù)模梢灾苯颖豢吹健?/p>
3. 更安全的 SFTP 服務(wù)
SFTP 是 Secure File Transfer Protocol (安全文件傳送協(xié)議)的縮寫(xiě)犬第,包含在 ssh 服務(wù)中锦积。Ubuntu 16.04 系統(tǒng)中,配置好 ssh 服務(wù)后歉嗓,sftp 服務(wù)即默認(rèn)開(kāi)啟丰介。
需要注意的是,sftp 使用了加密鉴分、解密技術(shù)哮幢,所以傳輸效率比普通的FTP要低得多。
可以使用
sudo apt-get openssh-server
命令安裝 ssh 服務(wù)志珍,如 sftp 服務(wù)未默認(rèn)開(kāi)啟橙垢,可以編輯 sshd 配置文件:/etc/ssh/sshd_config
,添加上Subsystem sftp /usr/lib/openssh/sftp-server
伦糯。
使用 sftp 服務(wù)時(shí)的抓包截圖:
可以看到钢悲,截獲的包內(nèi)容都變成了 Encrypted packet
二、搭建安全的 FTPS 服務(wù)
這里要詳細(xì)說(shuō)明的是另外一種解決方案舔株,使用 SSL/TLS 對(duì) FTP 的數(shù)據(jù)傳輸進(jìn)行加密莺琳。關(guān)于 SFTP 與 FTPS 的之間的對(duì)比,建議參考此文章:FTPS (FTP over SSL) vs SFTP (SSH File Transfer Protocol)载慈。
1. 創(chuàng)建證書(shū)
FTPS 是使用安全套接層(SSL)證書(shū)的 FTP 技術(shù)惭等,也就是使用用戶 ID、密碼和 SSL 證書(shū)進(jìn)行身份驗(yàn)證办铡。
$ sudo openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048
上面的命令用于生成證書(shū)和 key 并保存在 vsftpd.pem 文件中辞做。
運(yùn)行后會(huì)提示你輸入相關(guān)信息(可以隨便填寫(xiě)琳要,不要留空):
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:section
Common Name (e.g. server FQDN or YOUR name) []:starky
Email Address []:starky@email.com
2. 修改配置文件
如果你有開(kāi)啟 ufw 防火墻(默認(rèn)是未開(kāi)啟的),需要先在防火墻配置中開(kāi)放指定端口用于通訊和數(shù)據(jù)傳輸秤茅。
$ sudo ufw allow 990/tcp
$ sudo ufw allow 4000:5000/tcp
我這里沒(méi)有開(kāi)啟 ufw 稚补,所以不需要以上操作。直接修改 vsftpd 的配置文件($ sudo vim /etc/vsftpd.conf
)框喳。將文件中的對(duì)應(yīng)配置做如下修改(沒(méi)有就添加):
# 開(kāi)啟 ssl 并指定使用的協(xié)議
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
# 指定證書(shū)和 key 文件
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
# 安全選項(xiàng)
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
# 指定主動(dòng)模式時(shí)使用的端口范圍
pasv_min_port=40000
pasv_max_port=50000
修改完成后重啟 vsftpd 服務(wù):$ sudo systemctl restart vsftpd
三课幕、連接驗(yàn)證
客戶端使用 filezilla 連接服務(wù)器,新建站點(diǎn)時(shí)使用如下配置:
Host: 192.168.56.102
Protocol: FTP – File Transfer Protocol
Encryption: Require explicit FTP over TLS
Logon Type: Ask for password
User: username
點(diǎn)連接后會(huì)跳出輸入密碼界面和證書(shū)信息五垮,確定之后即可成功連接
而此時(shí) wireshark 的抓包截圖如下:
捕捉到的請(qǐng)求和響應(yīng)信息都是已加密過(guò)的密文乍惊。
參考文章
Setting Up a Secure FTP Server using SSL/TLS on Ubuntu
關(guān)于 vsftpd 配置文件的詳細(xì)解釋可參考:Vsftpd - Ubuntu中文