天天看點

如何在 CentOS 7 中使用 SSL/TLS 加強 FTP 伺服器進行安全檔案傳輸

在一開始的設計中,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&gt;</code>

如何在 CentOS 7 中使用 SSL/TLS 加強 FTP 伺服器進行安全檔案傳輸

驗證 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 =&gt; sites manager 或者按 <code>ctrl + s</code> 打開 site manager 界面。

點選 new site 按鈕添加一個新的站點/主機連接配接詳細資訊。

如何在 CentOS 7 中使用 SSL/TLS 加強 FTP 伺服器進行安全檔案傳輸

在 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>

如何在 CentOS 7 中使用 SSL/TLS 加強 FTP 伺服器進行安全檔案傳輸

在 filezilla 中添加 ftp 伺服器詳細資訊

14、 然後點選 connect,再次輸入密碼,然後驗證用于 ssl/tls 連接配接的證書,再一次點選 <code>ok</code> 連接配接到 ftp 伺服器:

如何在 CentOS 7 中使用 SSL/TLS 加強 FTP 伺服器進行安全檔案傳輸

驗證 ftp ssl 證書

到了這裡,我們應該使用 tls 連接配接成功地登入到了 ftp 伺服器,在下面的界面中檢查連接配接狀态部分擷取更多資訊。

如何在 CentOS 7 中使用 SSL/TLS 加強 FTP 伺服器進行安全檔案傳輸

通過 tls/ssl 連接配接到 ftp 伺服器

如何在 CentOS 7 中使用 SSL/TLS 加強 FTP 伺服器進行安全檔案傳輸

使用 ftp 安全地傳輸檔案

原文釋出時間為:2017-05-13

本文來自雲栖社群合作夥伴“linux中國”

繼續閱讀