1. 程式人生 > 實用技巧 >通過Openssl提供FTP+SSL/TLS認證功能,並實現安全資料傳輸

通過Openssl提供FTP+SSL/TLS認證功能,並實現安全資料傳輸

注:
通過筆者”FTP伺服器工作原理及如何通過PAM認證實現虛擬使用者登入“博文,我們瞭解到FTP是一種檔案共享協議,而且使用的是明文傳輸機制,所以在網際網路上傳輸使用者和密碼是不安全的,所以要採用SSL/TLS加密演算法提供密文傳輸機制,來保證使用者和密碼在傳輸過程的安全性。
相關理論知識在這就不再闡述,想了解的博友可以到“
FTP理論”瞭解FTP相關知識及簡單配置。

下面博文主要介紹基於SSL/TLS通過openssl工具實現FTP+SSL/TLS實現安全傳輸機制 要實現 SSL/TLS功能,必須安裝mod_ssl模組,所以需要事先安裝mod_ssl及利用openssl工具建立私有CA,筆者在"

如何通過Openssl實現私有CA,並實現TLS/SSL功能"的博文中詳細介紹瞭如何通過openssl工具建立私有CA證書頒發機構,所以在這也不再闡述。

實現過程:
Seq1:安裝FTP所需要的軟體包(可以使用原始碼編譯安裝,也可以選擇rpm安裝,這裡採用的是rpm安裝的方式)

  1. #rpm-qvsftpd##檢視當前Linux系統是否安裝vsftpd軟體包
  2. #yuminstallvsftpd-y##如果沒有安裝,可以使用yum來安裝
  3. #rpm-qlvsftpd##檢視vsftpd軟體包在安裝時,所生成的檔案路徑

Seq2:啟動FTP伺服器,並利用Linux自帶的開源軟體tcpdump來截獲FTP登入時產生的相關報文,並分析使用者名稱和密碼。

  1. #servicevsftpdrestart
  2. 附加:tcpdump
  3. tcpdump的語法:
  4. tcpdump[options][Protocol][Direction][Host(s)][Value][LogicalOperations][Otherexpression]
  5. #tcpdump-ieth0-nn-Xtcpport21andiphost172.16.88.10

測試:用Windows客戶機使用hadoop使用者登入FTP伺服器,驗證是否FTP使用明文傳輸機制

檢視伺服器產生的報文記錄:(測試結果:不難發現使用者和密碼)

Seq3:通過Openssl建立CA證書頒發機構:可以到筆者“openssl建立私有CA”瞭解詳細資訊

  1. #cd/etc/pki/CA
  2. #(umask077;opensslgenrsa-outprivate/cakey.pem2048) ##生成私鑰
  3. #opensslreq-new-x509-keyprivate/cakey.pemcacert.pem-days3650##生成自謙證書

Seq4:通過Openssl為FTP服務提供一對金鑰並申請證書頒發請求

  1. #mkdir/etc/vsftpd/ftps
  2. #(umask077;opensslgenrsa-outftps.key1024) ##建立私鑰
  3. #opensslreq-new-keyftps.key-outftps.csr-days3650 ##傳送證書頒發請求

Seq5:CA證書頒發機構,收到證書頒發請求,並對證書(csr)頒發數字證書(crt)

  1. #opensslca-invsftpd.csr-outvsftpd.crt-days3650

Seq6:編輯FTP主配置檔案,在最後一行新增如下內容

  1. ssl_enable=YES##啟用ssl功能
  2. ssl_tlsv1=YES##支援ssl哪些協議(tlsv1、sslv2(不建議使用)、sslv3)
  3. ssl_sslv3=YES
  4. allow_anon_ssl=NO##對於匿名使用者不採用ssl功能
  5. force_local_data_ssl=YES##資料在傳輸過程中採用ssl加密傳輸
  6. force_local_logins_ssl=YES##本地使用者在登入FTP服務時,強制使用ssl功能
  7. rsa_cert_file=/etc/vsftpd/ftps/vsftpd.crt##FTP服務的數字證書(公鑰),存放的位置
  8. rsa_private_key_file=/etc/vsftpd/ftps/vsftpd.key##FTP服務自身的金鑰(私鑰),存放位置(許可權為600)

Seq7:設定iptables和SElinux

  1. 注:在寫iptables會話規則時,需要載入ip_conntrack_ftp和ip_nat_ftp這兩塊模組
  2. #vim/etc/sysconfig/iptables-config
  3. IPTABLES_MODULES="ip_conntrack_ftpip_nat_ftp"
  4. #iptables-F
  5. #iptables-PINPUTDROP
  6. #iptables-POUTPUTDROP
  7. #iptables-PFORWARDDROP
  8. #iptables-AINPUT-d172.16.88.10-ptcp-mstate--stateESTABLELISHED,RELATED-jACCEPT
  9. #iptables-AOUTPUT-s172.16.88.10-ptcp-mstate--stateESTABLELISHED,RELATED-jACCEPT
  10. #serviceiptablessave
  11. #serviceiptablesrestart
  12. SELINUX的相關設定
  13. #gentenforce##檢視selinux的工作狀態
  14. enforcing##SELinuxsecuritypolicyisenforced.
  15. permissive##SELinuxprintswarningsinsteadofenforcing.
  16. disabled##SELinuxisfullydisabled.
  17. #getsebool-a|grepftp
  18. allow_ftpd_anon_write-->off
  19. allow_ftpd_full_access-->off
  20. allow_ftpd_use_cifs-->off
  21. allow_ftpd_use_nfs-->off
  22. allow_tftp_anon_write-->off
  23. ftp_home_dir-->off
  24. ftpd_connect_db-->off
  25. ftpd_disable_trans-->off
  26. ftpd_is_daemon-->on
  27. httpd_enable_ftp_server-->off
  28. tftpd_disable_trans-->off
  29. #setsebool-Pallow_ftpd_anon_writeon
  30. #setsebool-Pallow_ftpd_full_accesson

Seq9:再次使用Windows登入FTP服務,看看是否可以正常登入。


測試結果顯示:不能正常登入,須進行驗證

Seq10:我們使用FlashFXP工具並且給予驗證,檢視是否可以正常登入。
執行FlashFXP工具連線FTP伺服器:
點選會話->快速連線->如圖:

測試結果不可以正常登入,顯示連線失敗,那我們通過認證看看是否可以正常登入FTP服務呢:
點選站點->新建站點->如圖:


點選接受或者儲存,即可能力FTP服務,此次使用者名稱和密碼都是以加密的形式傳送的。

轉載於:https://blog.51cto.com/guodayong/1186003