在一開始的設計中,ftp(檔案傳輸協定)就是不安全的,意味着它不會加密兩台機器之間傳輸的資料以及使用者的憑據。這使得資料和伺服器安全面臨很大威脅。
在這篇文章中,我們會介紹在 centos/rhel 7 以及 fedora 中如何在 ftp 伺服器中手動啟用資料加密服務;我們會介紹使用 ssl/tls 證書保護 vsftpd(very secure ftp daemon)服務的各個步驟。
<a target="_blank"></a>
1、 我們首先要在 <code>/etc/ssl</code> 目錄下建立用于儲存 ssl/tls 證書和密鑰檔案的子目錄:
<code># mkdir /etc/ssl/private</code>
2、 然後運作下面的指令為 vsftpd 建立證書和密鑰并儲存到一個檔案中,下面會解析使用的每個選項。
<code>req</code> - 是 x.509 certificate signing request (csr,證書簽名請求)管理的一個指令。
<code>x509</code> - x.509 證書資料管理。
<code>days</code> - 定義證書的有效日期。
<code>newkey</code> - 指定證書密鑰處理器。
<code>rsa:2048</code> - rsa 密鑰處理器,會生成一個 2048 位的密鑰。
<code>keyout</code> - 設定密鑰存儲檔案。
<code>out</code> - 設定證書存儲檔案,注意證書和密鑰都儲存在一個相同的檔案:/etc/ssl/private/vsftpd.pem。
<code># openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048</code>
上面的指令會讓你回答以下的問題,記住使用你自己情況的值。
<code>country name (2 letter code) [xx]:in</code>
<code>state or province name (full name) []:lower parel</code>
<code>locality name (eg, city) [default city]:mumbai</code>
<code>organization name (eg, company) [default company ltd]:tecmint.com</code>
<code>organizational unit name (eg, section) []:linux and open source</code>
<code>common name (eg, your name or your server's hostname) []:tecmint</code>
<code>email address []:[email protected]</code>
3、 在我們進行任何 vsftpd 配置之前,首先開放 990 和 40000-50000 端口,以便在 vsftpd 配置檔案中分别定義 tls 連接配接的端口和被動端口的端口範圍:
<code># firewall-cmd --zone=public --permanent --add-port=990/tcp</code>
<code># firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp</code>
<code># firewall-cmd --reload</code>
4、 現在,打開 vsftpd 配置檔案并在檔案中指定 ssl 的詳細資訊:
<code># vi /etc/vsftpd/vsftpd.conf</code>
找到 <code>ssl_enable</code> 選項把它的值設定為 <code>yes</code> 激活使用 ssl,另外,由于 tsl 比 ssl 更安全,我們會使用<code>ssl_tlsv1_2</code> 選項讓 vsftpd 使用更嚴格的 tls:
<code>ssl_enable=yes</code>
<code>ssl_tlsv1_2=yes</code>
<code>ssl_sslv2=no</code>
<code>ssl_sslv3=no</code>
5、 然後,添加下面的行來定義 ssl 證書和密鑰檔案的位置:
<code>rsa_cert_file=/etc/ssl/private/vsftpd.pem</code>
<code>rsa_private_key_file=/etc/ssl/private/vsftpd.pem</code>
6、 下面,我們要阻止匿名使用者使用 ssl,然後強制所有非匿名使用者登入使用安全的 ssl 連接配接進行資料傳輸和登入過程中的密碼發送:
<code>allow_anon_ssl=no</code>
<code>force_local_data_ssl=yes</code>
<code>force_local_logins_ssl=yes</code>
7、 另外,我們還可以添加下面的選項增強 ftp 伺服器的安全性。當選項 <code>require_ssl_reuse</code> 被設定為 <code>yes</code>時,要求所有 ssl 資料連接配接都會重用 ssl 會話;這樣它們會知道控制通道的主密碼。
是以,我們需要把它關閉。
<code>require_ssl_reuse=no</code>
另外,我們還要用 <code>ssl_ciphers</code> 選項選擇 vsftpd 允許用于加密 ssl 連接配接的 ssl 算法。這可以極大地限制那些嘗試發現使用存在缺陷的特定算法的攻擊者:
<code>ssl_ciphers=high</code>
8、 現在,設定被動端口的端口範圍(最小和最大端口)。
<code>pasv_min_port=40000</code>
<code>pasv_max_port=50000</code>
9、 選擇性啟用 <code>debug_ssl</code> 選項以允許 ssl 調試,這意味着 openssl 連接配接診斷會被記錄到 vsftpd 日志檔案:
<code>debug_ssl=yes</code>
儲存所有更改并關閉檔案。然後讓我們重新開機 vsftpd 服務:
<code># systemctl restart vsftpd</code>
10、 完成上面的所有配置之後,像下面這樣通過在指令行中嘗試使用 ftp 測試 vsftpd 是否使用 ssl/tls 連接配接:
<code># ftp 192.168.56.10</code>
<code>connected to 192.168.56.10 (192.168.56.10).</code>
<code>220 welcome to tecmint.com ftp service.</code>
<code>name (192.168.56.10:root) : ravi</code>
<code>530 non-anonymous sessions must use encryption.</code>
<code>login failed.</code>
<code>421 service not available, remote server has closed connection</code>
<code>ftp></code>

驗證 ftp ssl 安全連接配接
從上面的截圖中,我們可以看到這裡有個錯誤提示我們 vsftpd 隻允許使用者從支援加密服務的用戶端登入。
指令行并不會提供加密服務是以産生了這個錯誤。是以,為了安全地連接配接到伺服器,我們需要一個支援 ssl/tls 連接配接的 ftp 用戶端,例如 filezilla。
11、 filezilla 是一個現代化、流行且重要的跨平台的 ftp 用戶端,它預設支援 ssl/tls 連接配接。
要在 linux 上安裝 filezilla,可以運作下面的指令:
<code>--------- on centos/rhel/fedora ---------</code>
<code># yum install epel-release filezilla</code>
<code>--------- on debian/ubuntu ---------</code>
<code>$ sudo apt-get install filezilla</code>
12、 當安裝完成後(或者你已經安裝了該軟體),打開它,選擇 file => sites manager 或者按 <code>ctrl + s</code> 打開 site manager 界面。
點選 new site 按鈕添加一個新的站點/主機連接配接詳細資訊。
在 filezilla 中添加新 ftp 站點
下一步,像下面這樣設定主機/站點名稱、添加 ip 位址、定義使用的協定、加密和登入類型(使用你自己情況的值):
<code>host: 192.168.56.10</code>
<code>protocol: ftp – file transfer protocol</code>
<code>encryption: require explicit ftp over #recommended</code>
<code>logon type: ask for password #recommended</code>
<code>user: username</code>
在 filezilla 中添加 ftp 伺服器詳細資訊
14、 然後點選 connect,再次輸入密碼,然後驗證用于 ssl/tls 連接配接的證書,再一次點選 <code>ok</code> 連接配接到 ftp 伺服器:
驗證 ftp ssl 證書
到了這裡,我們應該使用 tls 連接配接成功地登入到了 ftp 伺服器,在下面的界面中檢查連接配接狀态部分擷取更多資訊。
通過 tls/ssl 連接配接到 ftp 伺服器
使用 ftp 安全地傳輸檔案
原文釋出時間為:2017-05-13
本文來自雲栖社群合作夥伴“linux中國”