通過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,筆者在"
實現過程:
Seq1:安裝FTP所需要的軟體包(可以使用原始碼編譯安裝,也可以選擇rpm安裝,這裡採用的是rpm安裝的方式)
- #rpm-qvsftpd##檢視當前Linux系統是否安裝vsftpd軟體包
- #yuminstallvsftpd-y##如果沒有安裝,可以使用yum來安裝
- #rpm-qlvsftpd##檢視vsftpd軟體包在安裝時,所生成的檔案路徑
Seq2:啟動FTP伺服器,並利用Linux自帶的開源軟體tcpdump來截獲FTP登入時產生的相關報文,並分析使用者名稱和密碼。
- #servicevsftpdrestart
- 附加:tcpdump
- tcpdump的語法:
- tcpdump[options][Protocol][Direction][Host(s)][Value][LogicalOperations][Otherexpression]
- #tcpdump-ieth0-nn-Xtcpport21andiphost172.16.88.10
測試:用Windows客戶機使用hadoop使用者登入FTP伺服器,驗證是否FTP使用明文傳輸機制
檢視伺服器產生的報文記錄:(測試結果:不難發現使用者和密碼)
Seq3:通過Openssl建立CA證書頒發機構:可以到筆者“openssl建立私有CA”瞭解詳細資訊
- #cd/etc/pki/CA
- #(umask077;opensslgenrsa-outprivate/cakey.pem2048) ##生成私鑰
- #opensslreq-new-x509-keyprivate/cakey.pemcacert.pem-days3650##生成自謙證書
Seq4:通過Openssl為FTP服務提供一對金鑰並申請證書頒發請求
- #mkdir/etc/vsftpd/ftps
- #(umask077;opensslgenrsa-outftps.key1024) ##建立私鑰
- #opensslreq-new-keyftps.key-outftps.csr-days3650 ##傳送證書頒發請求
Seq5:CA證書頒發機構,收到證書頒發請求,並對證書(csr)頒發數字證書(crt)
- #opensslca-invsftpd.csr-outvsftpd.crt-days3650
Seq6:編輯FTP主配置檔案,在最後一行新增如下內容
- ssl_enable=YES##啟用ssl功能
- ssl_tlsv1=YES##支援ssl哪些協議(tlsv1、sslv2(不建議使用)、sslv3)
- ssl_sslv3=YES
- allow_anon_ssl=NO##對於匿名使用者不採用ssl功能
- force_local_data_ssl=YES##資料在傳輸過程中採用ssl加密傳輸
- force_local_logins_ssl=YES##本地使用者在登入FTP服務時,強制使用ssl功能
- rsa_cert_file=/etc/vsftpd/ftps/vsftpd.crt##FTP服務的數字證書(公鑰),存放的位置
- rsa_private_key_file=/etc/vsftpd/ftps/vsftpd.key##FTP服務自身的金鑰(私鑰),存放位置(許可權為600)
Seq7:設定iptables和SElinux
- 注:在寫iptables會話規則時,需要載入ip_conntrack_ftp和ip_nat_ftp這兩塊模組
- #vim/etc/sysconfig/iptables-config
- IPTABLES_MODULES="ip_conntrack_ftpip_nat_ftp"
- #iptables-F
- #iptables-PINPUTDROP
- #iptables-POUTPUTDROP
- #iptables-PFORWARDDROP
- #iptables-AINPUT-d172.16.88.10-ptcp-mstate--stateESTABLELISHED,RELATED-jACCEPT
- #iptables-AOUTPUT-s172.16.88.10-ptcp-mstate--stateESTABLELISHED,RELATED-jACCEPT
- #serviceiptablessave
- #serviceiptablesrestart
- SELINUX的相關設定
- #gentenforce##檢視selinux的工作狀態
- enforcing##SELinuxsecuritypolicyisenforced.
- permissive##SELinuxprintswarningsinsteadofenforcing.
- disabled##SELinuxisfullydisabled.
- #getsebool-a|grepftp
- allow_ftpd_anon_write-->off
- allow_ftpd_full_access-->off
- allow_ftpd_use_cifs-->off
- allow_ftpd_use_nfs-->off
- allow_tftp_anon_write-->off
- ftp_home_dir-->off
- ftpd_connect_db-->off
- ftpd_disable_trans-->off
- ftpd_is_daemon-->on
- httpd_enable_ftp_server-->off
- tftpd_disable_trans-->off
- #setsebool-Pallow_ftpd_anon_writeon
- #setsebool-Pallow_ftpd_full_accesson
Seq9:再次使用Windows登入FTP服務,看看是否可以正常登入。
測試結果顯示:不能正常登入,須進行驗證
Seq10:我們使用FlashFXP工具並且給予驗證,檢視是否可以正常登入。
執行FlashFXP工具連線FTP伺服器:
點選會話->快速連線->如圖:
測試結果不可以正常登入,顯示連線失敗,那我們通過認證看看是否可以正常登入FTP服務呢:
點選站點->新建站點->如圖:
點選接受或者儲存,即可能力FTP服務,此次使用者名稱和密碼都是以加密的形式傳送的。
轉載於:https://blog.51cto.com/guodayong/1186003