vsftpd配置詳解之實(shí)現(xiàn)加密數(shù)據(jù)傳輸
vsftpd配置詳解之實(shí)現(xiàn)加密數(shù)據(jù)傳輸:
FTP一個(gè)聲名狼藉的問題是它以明文方式發(fā)送用戶名和口令。任何人只要在網(wǎng)絡(luò)中合適的位置進(jìn)行抓包分析就可以看到用戶名和口令;FTP發(fā)送的數(shù)據(jù)也是以明文方式傳輸,通過對(duì)ftp連接的監(jiān)控和數(shù)據(jù)收集就可以重現(xiàn)ftp的數(shù)據(jù)傳輸。很多用戶為了方便把相同的用戶名和口令用在不同的應(yīng)用中,如果黑客收集到 FTP口令,他們也可能就得到了你在線帳號(hào)或者其他一些機(jī)密數(shù)據(jù)的口令。
下面我們使用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.
登錄成功!
怎么樣!弄到密碼很簡(jiǎn)單吧!服務(wù)器配置的再優(yōu)秀,數(shù)據(jù)是明文傳輸?shù)?,所以還是會(huì)讓別有用心之人有機(jī)可乘。
SSL(Secure Socket Layer)工作于傳輸層和應(yīng)用程序之間。作為一個(gè)中間層,應(yīng)用程序只要采用SSL提供的一套SSL套接字API來替換標(biāo)準(zhǔn)的Socket套接字,就可以把程序轉(zhuǎn)換為SSL化的安全網(wǎng)絡(luò)程序,在傳輸過程中將由SSL協(xié)議實(shí)現(xiàn)數(shù)據(jù)機(jī)密性和完整性的保證。SSL取得大規(guī)模成功后,IETF將SSL作了標(biāo)準(zhǔn)化,并將其稱為TLS(Transport Layer Security)。Ftp結(jié)合SSL,將實(shí)現(xiàn)傳輸數(shù)據(jù)的加密,保證數(shù)據(jù)不被別人竊取。
要讓vsftpd支持SSL,必須在安裝之前修改頭文件builddefs.h,將#undef VSF_BUILD_SSL行改為#define VSF_BUILD_SSL,在安裝小節(jié)已經(jīng)講過。這里我們用OpenSSL結(jié)合vsftpd來實(shí)現(xiàn)數(shù)據(jù)加密傳輸。首先查看自己的系統(tǒng)有沒有安裝 OpenSSL,如果沒有安裝,到官網(wǎng)下載安裝,安裝過程很簡(jiǎn)單,就不貼出來了。
下面我們?yōu)?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
填寫這些信息后,就產(chǎn)生了/etc/vsftpd/vsftpd.pem證書文件,接下來我們?cè)谂渲梦募屑尤胂旅鎯尚校?/P>
- ssl_enable=yes
- rsa_cert_file=/etc/vsftpd/vsftpd.pem
#p#
現(xiàn)在我們登錄服務(wù)器測(cè)試:
- # 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.
已經(jīng)不能登錄了,可能是這個(gè)ftp客戶端不支持ssl的原因吧!在windows下支持ssl的ftp客戶端很多(IE是不支持的),比如 FlashFXP,使用比較簡(jiǎn)單,相信大家都會(huì)使用。我們這里介紹Linux下使用lftp來登錄服務(wù)器。很多Linux發(fā)行版中都已經(jīng)包含了lftp軟件包,如果你的Linux中沒有l(wèi)ftp,到官網(wǎng)下載原碼包來安裝。
# 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
同時(shí)我們打開tcpdump抓包測(cè)試:
- # 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 認(rèn)證方式,這是 Vsftpd 默認(rèn)的安全認(rèn)證方式。
我們看到使用tcpdump抓到的包已經(jīng)使用 TLS 加密了,數(shù)據(jù)也是加密的,再也不怕第三方竊聽了。
上面的例子只使用了兩條配置語句,vsftp還提供了下面的語句來設(shè)置ssl:
- ssl_enable=yes/no //是否啟用 SSL,默認(rèn)為no
- allow_anon_ssl=yes/no //是否允許匿名用戶使用SSL,默認(rèn)為no
- rsa_cert_file=/path/to/file //rsa證書的位置
- dsa_cert_file=/path/to/file //dsa證書的位置
- force_local_logins_ssl=yes/no //非匿名用戶登陸時(shí)是否加密,默認(rèn)為yes
- force_local_data_ssl=yes/no //非匿名用戶傳輸數(shù)據(jù)時(shí)是否加密,默認(rèn)為yes
- force_anon_logins_ssl=yes/no //匿名用戶登錄時(shí)是否加密,默認(rèn)為no
- force_anon_data_ssl=yes/no //匿名用戶數(shù)據(jù)傳輸時(shí)是否加密,默認(rèn)為no
- ssl_sslv2=yes/no //是否激活sslv2加密,默認(rèn)no
- ssl_sslv3=yes/no //是否激活sslv3加密,默認(rèn)no
- ssl_tlsv1=yes/no //是否激活tls v1加密,默認(rèn)yes
- ssl_ciphers=加密方法 //默認(rèn)是DES-CBC3-SHA
總結(jié):FTP展望
FTP是在70年代設(shè)計(jì)出來的,當(dāng)時(shí)的互聯(lián)網(wǎng)是一個(gè)封閉的網(wǎng)絡(luò),與現(xiàn)代網(wǎng)絡(luò)環(huán)境還是有很大的差異,現(xiàn)代網(wǎng)絡(luò)中不管你使用Port模式還是Passive模式,都可能產(chǎn)生問題。很多人對(duì)FTP協(xié)議安全性進(jìn)行不懈的努力,使用SSL/TLS進(jìn)行ftp傳輸過程的驗(yàn)證和加密,基本解決明文傳數(shù)據(jù)的問題。但還是存在不少缺陷,于是出現(xiàn)了一些FTP替代應(yīng)用,如SCP、SFTP;如果你使用ftp更新你的網(wǎng)頁,還可以考慮WebDAV。
在FTP服務(wù)器軟件中,vsftpd可以說是最安全的ftp軟件,短小精悍,且高性能,是ftp服務(wù)器軟件中的佼佼者。經(jīng)過上面的學(xué)習(xí),對(duì)于搭建安全高效的FTP服務(wù)器,再也不會(huì)困惑了。
【編輯推薦】