vsftpd配置詳解之實現加密數據傳輸
vsftpd配置詳解之實現加密數據傳輸:
FTP一個聲名狼藉的問題是它以明文方式發送用戶名和口令。任何人只要在網絡中合適的位置進行抓包分析就可以看到用戶名和口令;FTP發送的數據也是以明文方式傳輸,通過對ftp連接的監控和數據收集就可以重現ftp的數據傳輸。很多用戶為了方便把相同的用戶名和口令用在不同的應用中,如果黑客收集到 FTP口令,他們也可能就得到了你在線帳號或者其他一些機密數據的口令。
下面我們使用linux自帶的抓包工具tcpdump抓包分析,來截取ftp登錄用戶口令:
# tcpdump -i eth0 -A
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
17:44:35.520880 IP 192.168.0.101.vytalvaultpipe > 192.168.0.105.ftp: S 3417937804:3417937804(0) win 65535
E..0..@........e...i ...........p...............
17:44:45.681026 IP 192.168.0.105.ftp > 192.168.0.101.vytalvaultpipe: S 2518028758:2518028758(0) ack 3417937805 win 5840
E..0..@[email].@......i...e[/email].. .........p...............
17:44:35.520954 IP 192.168.0.101.vytalvaultpipe > 192.168.0.105.ftp: . ack 1 win 65535
E..([email]..@........e...i[/email] ...........P....x........
建立TCP連接的三次握手,接下來登錄之前信息,省約……
17:44:36.513224 IP 192.168.0.101.vytalvaultpipe > 192.168.0.105.ftp: P 32:44(12) ack 97 win 513
E..4..@........e...i ...........P...v...USER test1
用戶名:test1
17:44:39.942107 IP 192.168.0.105.ftp > 192.168.0.101.vytalvaultpipe: . ack 13 win 5840
E..(.|@[email].@..5...i...e[/email].. .........P.......
17:44:39.942277 IP 192.168.0.105.ftp > 192.168.0.101.vytalvaultpipe: P 21:55(34) ack 13 win 5840
E..J.}@[email].@......i...e[/email].. .........P....[..331 Please specify the password.
17:44:40.094629 IP 192.168.0.101.vytalvaultpipe > 192.168.0.105.ftp: . ack 55 win 65481
P....l.........e...i ..........
17:44:40.525157 IP 192.168.0.105.32832 > 192.168.0.1.domain: 31226 PTR? 105.0.168.192.in-addr.arpa. (44)
E..H..@.@..;[email]...i.....@.5.4..y............105.0.168.192.in-addr.arpa[/email].....
17:44:41.714630 IP 192.168.0.101.vytalvaultpipe > 192.168.0.105.ftp: P 13:23(10) ack 55 win 65481
P.......PASS abc...i ..........
密碼:abc
17:44:41.742271 IP 192.168.0.105.ftp > 192.168.0.101.vytalvaultpipe: P 55:78(23) ack 23 win 5840
....P....P..230 Login successful.
登錄成功!
怎么樣!弄到密碼很簡單吧!服務器配置的再優秀,數據是明文傳輸的,所以還是會讓別有用心之人有機可乘。
SSL(Secure Socket Layer)工作于傳輸層和應用程序之間。作為一個中間層,應用程序只要采用SSL提供的一套SSL套接字API來替換標準的Socket套接字,就可以把程序轉換為SSL化的安全網絡程序,在傳輸過程中將由SSL協議實現數據機密性和完整性的保證。SSL取得大規模成功后,IETF將SSL作了標準化,并將其稱為TLS(Transport Layer Security)。Ftp結合SSL,將實現傳輸數據的加密,保證數據不被別人竊取。
要讓vsftpd支持SSL,必須在安裝之前修改頭文件builddefs.h,將#undef VSF_BUILD_SSL行改為#define VSF_BUILD_SSL,在安裝小節已經講過。這里我們用OpenSSL結合vsftpd來實現數據加密傳輸。首先查看自己的系統有沒有安裝 OpenSSL,如果沒有安裝,到官網下載安裝,安裝過程很簡單,就不貼出來了。
下面我們為 vsftpd 生成證書:
# cd /etc/vsftpd/
# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
Generating a 1024 bit RSA private key
.........................
.............
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:cn
State or Province Name (full name) [Berkshire]:ShiChuan
Locality Name (eg, city) [Newbury]:ChenDu
Organization Name (eg, company) [My Company Ltd]:linuxer
Organizational Unit Name (eg, section) []:linuxer
Common Name (eg, your name or your server's hostname) []:
www.linuxer.cn
Email Address []:icecard@hotmail.com
填寫這些信息后,就產生了/etc/vsftpd/vsftpd.pem證書文件,接下來我們在配置文件中加入下面兩行:
- ssl_enable=yes
- rsa_cert_file=/etc/vsftpd/vsftpd.pem
#p#
現在我們登錄服務器測試:
- # ftp 127.0.0.1
- Connected to 127.0.0.1.
- 220 (vsFTPd 2.0.5)
- 504 Unknown AUTH type.
- 504 Unknown AUTH type.
- KERBEROS_V4 rejected as an authentication type
- Name (127.0.0.1:root): test1
- 530 Non-anonymous sessions must use encryption.
- Login failed.
已經不能登錄了,可能是這個ftp客戶端不支持ssl的原因吧!在windows下支持ssl的ftp客戶端很多(IE是不支持的),比如 FlashFXP,使用比較簡單,相信大家都會使用。我們這里介紹Linux下使用lftp來登錄服務器。很多Linux發行版中都已經包含了lftp軟件包,如果你的Linux中沒有lftp,到官網下載原碼包來安裝。
# lftp 127.0.0.1
lftp 127.0.0.1:~> user test1
口令:
lftp
test1@127.0.0.1
:~> ls
-rw-r--r-- 1 0 0 5 May 17 21:35 virftp.file
drwxrwxrwx 2 500 500 4096 May 17 21:47 woo
同時我們打開tcpdump抓包測試:
- # tcpdump -i lo -A
- tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
- listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
省約部分信息……
23:32:15.237079 IP localhost.localdomain.ftp > localhost.localdomain.46605: P 36:47(11) ack 7 win 512
..yI...U.....3.........
..M7..M5 AUTH SSL
啟用了SSL
23:32:15.272496 IP localhost.localdomain.46605 > localhost.localdomain.ftp: . ack 47 win 513
.....U..yT....9......
..M@..M6
23:32:15.272570 IP localhost.localdomain.ftp > localhost.localdomain.46605: P 47:137(90) ack 7 win 512
..yT...U...............
..M@..M@ AUTH TLS
EPRT
EPSV
MDTM
23:32:15.272605 IP localhost.localdomain.46605 > localhost.localdomain.ftp: . ack 137 win 513
.....U..y.....9i.....
..M@..M@
23:32:15.273156 IP localhost.localdomain.46605 > localhost.localdomain.ftp: P 7:17(10) ack 137 win 513
.....U..y......2.....
..M@..M@AUTH TLS
使用 TLS 認證方式,這是 Vsftpd 默認的安全認證方式。
我們看到使用tcpdump抓到的包已經使用 TLS 加密了,數據也是加密的,再也不怕第三方竊聽了。
上面的例子只使用了兩條配置語句,vsftp還提供了下面的語句來設置ssl:
- ssl_enable=yes/no //是否啟用 SSL,默認為no
- allow_anon_ssl=yes/no //是否允許匿名用戶使用SSL,默認為no
- rsa_cert_file=/path/to/file //rsa證書的位置
- dsa_cert_file=/path/to/file //dsa證書的位置
- force_local_logins_ssl=yes/no //非匿名用戶登陸時是否加密,默認為yes
- force_local_data_ssl=yes/no //非匿名用戶傳輸數據時是否加密,默認為yes
- force_anon_logins_ssl=yes/no //匿名用戶登錄時是否加密,默認為no
- force_anon_data_ssl=yes/no //匿名用戶數據傳輸時是否加密,默認為no
- ssl_sslv2=yes/no //是否激活sslv2加密,默認no
- ssl_sslv3=yes/no //是否激活sslv3加密,默認no
- ssl_tlsv1=yes/no //是否激活tls v1加密,默認yes
- ssl_ciphers=加密方法 //默認是DES-CBC3-SHA
總結:FTP展望
FTP是在70年代設計出來的,當時的互聯網是一個封閉的網絡,與現代網絡環境還是有很大的差異,現代網絡中不管你使用Port模式還是Passive模式,都可能產生問題。很多人對FTP協議安全性進行不懈的努力,使用SSL/TLS進行ftp傳輸過程的驗證和加密,基本解決明文傳數據的問題。但還是存在不少缺陷,于是出現了一些FTP替代應用,如SCP、SFTP;如果你使用ftp更新你的網頁,還可以考慮WebDAV。
在FTP服務器軟件中,vsftpd可以說是最安全的ftp軟件,短小精悍,且高性能,是ftp服務器軟件中的佼佼者。經過上面的學習,對于搭建安全高效的FTP服務器,再也不會困惑了。
【編輯推薦】