加密ssl vsftp、ftp隐式加密&显式加密_如果你真的想做一件事,你一定会找到方法; 如果你不想做一件事,你一定会找到借口。
* \: N# i# ~* s% K- m) U( W1 T w/ o4 `1 c [; Q7 w) U! n
FTP over SSL (Implicit)隐式ssl与FTP over SSL (Explicit)显式ssl:
( `4 |- C+ I L2 n( n8 Ivsftp默认启动时用的是显式ssl,也可以配置启用隐式ssl,对应端口21(可修改成990)- }7 W$ ]6 ^6 ]! o3 R5 g0 H+ ^
- 显式ssl: 在与ftp服务器建立连接后,ftp客户端要以命令("AUTH SSL" 或者 "AUTH TLS")显式地告诉服务器端来初始化相应的安全连接。此时使用的是默认的ftp端口21。参考文档:RFC 2228
- 隐式ssl:当ftp客户端连接到服务器端时,服务器端自动建立安全连接。此时,客户端默认以990端口来安全连接服务器端,而服务器端端口可设置。
1 K9 C* o4 D4 b6 s2 f2 c5 O) w 3 A3 _+ i" V/ L
ssl加密的vsftp(vsftp with OpenSSL)
$ G% A) [9 f% y0 Q$ {4 N5 t- Y- a. ftp默认的传输数据是明文,弄个抓包软件就可以通过数据包来分析到账号和密码,为了搭建一个安全性比较高ftp,可以结合SSL来解决问题
- b. 检查vsftp是否支持SSL:从2.0.0版本开始,vsftpd支持命令连接和数据连接的加密传输。vsftpd服务器版本查看:rpm -qa vsftpd 输出:vsftpd-2.2.2-11.el6.i686
- c. 检查vsftp是否支持SSL:ldd /usr/sbin/vsftpd | grep libssl,如果输出类似与libssl.so.10 => /usr/lib/libssl.so.10 (0x00dfb000),那么支持。如果不支持,那么重新编译vsftp,然后再重新安装
- d. 用openssl生成vsftpd的证书:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
- e. 修改vsftpd.conf,设置强制启用ssl
+ K9 P) V! l, Z+ l" O: D4 S; hssl_enable=YES
! ~3 ^1 ^% J1 E5 s! Hallow_anon_ssl=NO( C% \4 i: @. m; `9 X1 k
force_local_data_ssl=YES8 g* Z7 ^- T6 B3 N. }
force_local_logins_ssl=YES, {2 ^' }% Y- N& q4 z l9 U
ssl_tlsv1=YES* g' U/ p) L6 n# _6 M" `% l/ N
ssl_sslv2=NO
& L8 N! |9 ]1 Q, G6 ~) ]ssl_sslv3=NO
$ W/ K v% a/ K4 h/ i: X* Krsa_cert_file=/etc/vsftpd/vsftpd.pem, H) O2 z( ]% R" m- S
ssl_ciphers=HIGH - f. 默认不启用隐式ssl功能,相应的服务器端隐式ssl默认端口是21(很多客户端隐式ssl连接时,设置的默认端口为990,因此如果服务器的不自定义成和客户端一致的话,会导致连接失败!)。如果启用了隐式ssl,那么ftp客户端也必须以隐式ssl的方式连接到21/990端口,ftp客户端的不加密连接、显式ssl连接都会超时。所以不建议开启该设置!
5 K3 \8 T: Y5 O9 g$ p' M& Q
, B3 t7 Y9 @1 e+ q' H8 H' n. n: s' u
// ssl设置8 C* e/ y! J: |& h1 {- V# O
ssl_enable=YES
" ~9 g# I# @. A( j% Uallow_anon_ssl=NO
P/ m. V; k9 `3 K4 Hforce_local_data_ssl=YES
6 b2 j( P6 s' ?( c7 t( m) }force_local_logins_ssl=YES6 u* P7 r1 H/ n
ssl_tlsv1=YES! }( `! m4 O$ R2 a" A
ssl_sslv2=NO' {6 u, O7 S! t3 t" _' p
ssl_sslv3=NO
: @; t9 @/ V/ Ersa_cert_file=/etc/vsftpd/vsftpd.pem, g' N0 N0 Z- k$ q) ]5 |
ssl_ciphers=HIGH: ^! \( [$ o6 W& R& K) u
; J8 w/ ]. R5 W$ v6 u- B+ Z7 p#implicit_ssl=no // 是否启用隐式ssl功能,不建议开启
! @1 o6 c3 i' g/ O! R% U' U#listen_port=990 // 隐式ftp端口设置,如果不设置,默认还是21,但是
* M3 J" m( W1 @) M/ ^# y当客户端以隐式ssl连接时,默认会使用990端口,导致连接失败!!
: y8 ?) R4 J" q$ G#debug_ssl=YES // 输出ssl相关的日志信息
2 R/ T, P1 @; M$ a' `- T% j5 s- I9 Y) _& E9 r/ P5 @6 a6 h
9 T; g+ v( {! M# f, }4 _ |