如何在 CentOS 7 中使用 SSL/TLS 加固 FTP 伺服器進行安全文件傳輸
在這篇文章中,我們會介紹在 CentOS/RHEL 7 以及 Fedora 中如何在 FTP 伺服器中手動啟用數據加密服務;我們會介紹使用 SSL/TLS 證書保護 VSFTPD(Very Secure FTP Daemon)服務的各個步驟。
前提條件:
- 你必須已經在 CentOS 7 中安裝和配置 FTP 服務 。
在我們開始之前,要注意本文中所有命令都以 root 用戶運行,否則,如果現在你不是使用 root 用戶控制伺服器,你可以使用 sudo 命令 去獲取 root 許可權。
第一步:生成 SSL/TLS 證書和密鑰
1、 我們首先要在 /etc/ssl
目錄下創建用於保存 SSL/TLS 證書和密鑰文件的子目錄:
# mkdir /etc/ssl/private
2、 然後運行下面的命令為 vsftpd 創建證書和密鑰並保存到一個文件中,下面會解析使用的每個選項。
req
- 是 X.509 Certificate Signing Request (CSR,證書籤名請求)管理的一個命令。x509
- X.509 證書數據管理。days
- 定義證書的有效日期。newkey
- 指定證書密鑰處理器。rsa:2048
- RSA 密鑰處理器,會生成一個 2048 位的密鑰。keyout
- 設置密鑰存儲文件。out
- 設置證書存儲文件,注意證書和密鑰都保存在一個相同的文件:/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
上面的命令會讓你回答以下的問題,記住使用你自己情況的值。
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
第二步:配置 VSFTPD 使用 SSL/TLS
3、 在我們進行任何 VSFTPD 配置之前,首先開放 990 和 40000-50000 埠,以便在 VSFTPD 配置文件中分別定義 TLS 連接的埠和被動埠的埠範圍:
# firewall-cmd --zone=public --permanent --add-port=990/tcp
# firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp
# firewall-cmd --reload
4、 現在,打開 VSFTPD 配置文件並在文件中指定 SSL 的詳細信息:
# vi /etc/vsftpd/vsftpd.conf
找到 ssl_enable
選項把它的值設置為 YES
激活使用 SSL,另外,由於 TSL 比 SSL 更安全,我們會使用 ssl_tlsv1_2
選項讓 VSFTPD 使用更嚴格的 TLS:
ssl_enable=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO
5、 然後,添加下面的行來定義 SSL 證書和密鑰文件的位置:
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
6、 下面,我們要阻止匿名用戶使用 SSL,然後強制所有非匿名用戶登錄使用安全的 SSL 連接進行數據傳輸和登錄過程中的密碼發送:
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
7、 另外,我們還可以添加下面的選項增強 FTP 伺服器的安全性。當選項 require_ssl_reuse
被設置為 YES
時,要求所有 SSL 數據連接都會重用 SSL 會話;這樣它們會知道控制通道的主密碼。
因此,我們需要把它關閉。
require_ssl_reuse=NO
另外,我們還要用 ssl_ciphers
選項選擇 VSFTPD 允許用於加密 SSL 連接的 SSL 演算法。這可以極大地限制那些嘗試發現使用存在缺陷的特定演算法的攻擊者:
ssl_ciphers=HIGH
8、 現在,設置被動埠的埠範圍(最小和最大埠)。
pasv_min_port=40000
pasv_max_port=50000
9、 選擇性啟用 debug_ssl
選項以允許 SSL 調試,這意味著 OpenSSL 連接診斷會被記錄到 VSFTPD 日誌文件:
debug_ssl=YES
保存所有更改並關閉文件。然後讓我們重啟 VSFTPD 服務:
# systemctl restart vsftpd
第三步:用 SSL/TLS 連接測試 FTP 伺服器
10、 完成上面的所有配置之後,像下面這樣通過在命令行中嘗試使用 FTP 測試 VSFTPD 是否使用 SSL/TLS 連接:
# 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>
驗證 FTP SSL 安全連接
從上面的截圖中,我們可以看到這裡有個錯誤提示我們 VSFTPD 只允許用戶從支持加密服務的客戶端登錄。
命令行並不會提供加密服務因此產生了這個錯誤。因此,為了安全地連接到伺服器,我們需要一個支持 SSL/TLS 連接的 FTP 客戶端,例如 FileZilla。
第四步:安裝 FileZilla 以便安全地連接到 FTP 伺服器
11、 FileZilla 是一個現代化、流行且重要的跨平台的 FTP 客戶端,它默認支持 SSL/TLS 連接。
要在 Linux 上安裝 FileZilla,可以運行下面的命令:
--------- On CentOS/RHEL/Fedora ---------
# yum install epel-release filezilla
--------- On Debian/Ubuntu ------$ sudo apt-get install filezilla
12、 當安裝完成後(或者你已經安裝了該軟體),打開它,選擇 File => Sites Manager 或者按 Ctrl + S
打開 Site Manager 界面。
點擊 New Site 按鈕添加一個新的站點/主機連接詳細信息。
在 FileZilla 中添加新 FTP 站點
- 下一步,像下面這樣設置主機/站點名稱、添加 IP 地址、定義使用的協議、加密和登錄類型(使用你自己情況的值):
Host: 192.168.56.10
Protocol: FTP – File Transfer Protocol
Encryption: Require explicit FTP over #recommended
Logon Type: Ask for password #recommended
User: username
在 Filezilla 中添加 FTP 伺服器詳細信息
14、 然後點擊 Connect,再次輸入密碼,然後驗證用於 SSL/TLS 連接的證書,再一次點擊 OK
連接到 FTP 伺服器:
驗證 FTP SSL 證書
到了這裡,我們應該使用 TLS 連接成功地登錄到了 FTP 伺服器,在下面的界面中檢查連接狀態部分獲取更多信息。
通過 TLS/SSL 連接到 FTP 伺服器
15、 最後,在文件目錄嘗試 從本地傳輸文件到 FTP 伺服器,看 FileZilla 界面後面的部分查看文件傳輸相關的報告。
使用 FTP 安全地傳輸文件
就是這些。記住 FTP 默認是不安全的,除非我們像上面介紹的那樣配置它使用 SSL/TLS 連接。在下面的評論框中和我們分享你關於這篇文章/主題的想法吧。
作者簡介:
Aaron Kili 是一個 Linux 和 F.O.S.S 的愛好者,Linux 系統管理員,網路開發員,目前也是 TecMint 的內容創作者,他喜歡和電腦一起工作,並且堅信共享知識。
via: http://www.tecmint.com/secure-vsftpd-using-ssl-tls-on-centos/
作者:Aaron Kili 譯者:ictlyh 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive