註:
通過筆者”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安裝的方式)
- # rpm -q vsftpd ##查看當前Linux系統是否安裝vsftpd軟體包
- # yum install vsftpd -y ##如果沒有安裝,可以使用yum來安裝
- # rpm -ql vsftpd ##查看vsftpd軟體包在安裝時,所產生的檔案路徑
Seq2:啟動FTP伺服器,並利用Linux內建的開源軟體tcpdump來截獲FTP登入時產生的相關報文,並分析使用者名稱和密碼。
- # service vsftpd restart
- 附加:tcpdump
- tcpdump的文法:
- tcpdump [options] [Protocol] [Direction] [Host(s)] [Value] [Logical Operations] [Other expression]
- # tcpdump -i eth0 -nn -X tcp port 21 and ip host 172.16.88.10
測試:用Windows客戶機使用hadoop使用者登入FTP伺服器,驗證是否FTP使用明文傳輸機制
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95WV2-0.png" />
查看伺服器產生的報文記錄:(測試結果:不難發現使用者和密碼)
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95W154-1.png" />
Seq3:通過Openssl建立CA憑證授權單位:可以到筆者“openssl建立私人CA”瞭解詳細資料“
- # cd /etc/pki/CA
- # (umask 077;openssl genrsa -out private/cakey.pem 2048) ##產生私密金鑰
- # openssl req -new -x509 -key private/cakey.pem cacert.pem -days 3650 ##產生自謙認證
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95UR3-2.png" />
Seq4:通過Openssl為FTP服務提供一對密鑰並申請憑證發行請求
- # mkdir /etc/vsftpd/ftps
- # (umask 077; openssl genrsa -out ftps.key 1024) ##建立私密金鑰
- # openssl req -new -key ftps.key -out ftps.csr -days 3650 ##發送憑證發行請求
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95QA1-3.png" />
Seq5:CA憑證授權單位,收到憑證發行請求,並對認證(csr)頒發數位憑證(crt)
- # openssl ca -in vsftpd.csr -out vsftpd.crt -days 3650
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95V556-4.png" />
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_ftp ip_nat_ftp"
- # iptables -F
- # iptables -P INPUT DROP
- # iptables -P OUTPUT DROP
- # iptables -P FORWARD DROP
- # iptables -A INPUT -d 172.16.88.10 -p tcp -m state --state ESTABLELISHED,RELATED -j ACCEPT
- # iptables -A OUTPUT -s 172.16.88.10 -p tcp -m state --state ESTABLELISHED,RELATED -j ACCEPT
- # service iptables save
- # service iptables restart
- SELINUX的相關設定
- # gentenforce ## 查看selinux的工作狀態
- enforcing ##SELinux security policy is enforced.
- permissive ##SELinux prints warnings instead of enforcing.
- disabled ##SELinux is fully disabled.
- # getsebool -a | grep ftp
- 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 -P allow_ftpd_anon_write on
- # setsebool -P allow_ftpd_full_access on
Seq9:再次使用Windows登入FTP服務,看看是否可以正常登入。
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95V0U-5.png" />
測試結果顯示:不能正常登入,須進行驗證
Seq10:我們使用FlashFXP工具並且給予驗證,查看是否可以正常登入。
運行FlashFXP工具串連FTP伺服器:
點擊會話->快速串連->
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95W340-6.png" />
測試結果不可以正常登入,顯示串連失敗,那我們通過認證看看是否可以正常登入FTP服務呢:
點擊網站->建立網站->
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95VG9-7.png" />
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95W948-8.png" />
點擊接受或者儲存,即可能力FTP服務,此次使用者名稱和密碼都是以加密的形式傳送的。
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131227/1T95T115-9.png" />
本文出自 “See you next year CA” 部落格,請務必保留此出處http://guodayong.blog.51cto.com/263451/1186003