FTP服务器的配置与管理
2.1 FTP概述
FTP
的基本概念
vsftpd 的名字代表
"very secure FTP daemon",安全性是vsftpd的一个最大特点。他的主要功能是以TCP数据包的模式在服务器与客户机之间进行文件的传输。FTP服务器使用了两个连接,分别是命令通道和数据流通道,因为是TCP数据包,所以这两个连接都需要经过3次握手。
使用到的端口号:
l 命令通道的
FTP(默认的端口为21)
l 数据传输的
FTP-data(默认为端口20)
FTP
默认的主动方式连接
主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>;1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>;1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:
- 任何端口到FTP服务器的21端口 (客户端初始化的连接 S<-C)
- FTP服务器的21端口到大于1023的端口(服务器响应客户端的控制端口 S->C)
- FTP服务器的20端口到大于1023的端口(服务器端初始化数据连接到客户端的数据端口 S->C)
- 大于1023端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口 S<-C)
过程如图所示:
在第1步中,客户端的命令端口与FTP服务器的命令端口建立连接,并发送命令“PORT 1027”。然后在第2步中,FTP服务器给客户端的命令端口返回一个"ACK"。在第3步中,FTP服务器发起一个从它自己的数据端口(20)到客户端先前指定的数据端口(1027)的连接,最后客户端在第4步中给服务器端返回一个"ACK"。
主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的
安装Ftp服务器
2.2.1 挂载光盘,并使用rpm安装软件包
2.2.2 启动ftp服务器
[root@localhost Server]# service vsftpd start
2.2.3 安装抓包软件wireshark(抓取用户登录时的相关信息)
[root@localhost ~]# yum list all |grep wireshark
[root@localhost ~]# yum install -y wireshark
2.2.4 设置wireshark的抓取信息
[root@localhost ~]# tshark -ni eth0 -R "tcp.dstport eq 21"
当客户端user1用ftp登录时wireshark抓取到如下信息
97.739250 192.168.2.3 -> 192.168.2.100 FTP
Request: USER user1
97.971646 192.168.2.3 -> 192.168.2.100 TCP 2927 > 21 [ACK] Seq=13 Ack=55 Win=372240 Len=0
100.362071 192.168.2.3 -> 192.168.2.100 FTP
Request: PASS 123
抓取到了用户的帐号和密码,可见其不安全性,我们可以通过CA提高安全性
2.3 CA
服务器的安装
2.3.1编辑openssl.cnf文件
[root@localhost ~]# cd /etc/pki/
[root@localhost pki]# vim tls/openssl.cnf
45 dir
= /etc/pki/CA # Where everything is kept改变路径
88到90行 match改为optional
88 countryName
= optional
89 stateOrProvinceName
= optional
90 organizationName
= optional
2.3.2 在CA目录下新建crl crets newcerts 目录及index.txt 和serial文件
[root@localhost pki]# cd CA/
[root@localhost CA]# mkdir crl certs newcerts
[root@localhost CA]# touch index.txt serial
把01写入serial
[root@localhost CA]# echo "01" >serial
2.3.3 创建CA的私钥
[root@localhost CA]# openssl genrsa 1024 >private/cakey.pem
Generating RSA private key, 1024 bit long modulus
......++++++
................++++++
e is 65537 (0x10001)
2.3.4.创建CA的证书
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
Country Name (2 letter code) [GB]:CN
State or Province Name (full name) [Berkshire]:BEIJING
Locality Name (eg, city) [Newbury]:BEIJING
Organization Name (eg, company) [My Company Ltd]:SCHOOL
Organizational Unit Name (eg, section) []:tec
Common Name (eg, your name or your server's hostname) []:rootca.net.net
Email Address [] :
2.3.5 为了安全设置cakey.pem的权限
[root@localhost CA]# chmod 600 private/cakey.pem
2.3.6 ftp建立钥匙
[root@localhost CA]# mkdir /etc/vsftpd/certs
[root@localhost CA]# cd /etc/vsftpd/certs/
[root@localhost certs]# ll
total 0
[root@localhost certs]# openssl genrsa 1024 >vsftpd.key
Generating RSA private key, 1024 bit long modulus
...................++++++
..........++++++
e is 65537 (0x10001)
2.3.7 请求文件
[root@localhost certs]# openssl req -new -key vsftpd.key -out vsftp.csr
Country Name (2 letter code) [GB]:CN
State or Province Name (full name) [Berkshire]:BEIJING
Locality Name (eg, city) [Newbury]:BEIJING
Organization Name (eg, company) [My Company Ltd]:FTP
Organizational Unit Name (eg, section) []:FTP
Common Name (eg, your name or your server's hostname) []:ftp.bj.com
Email Address []:
2.3.8 请求得到证书
[root@localhost certs]# openssl ca -in vsftpd.csr -out vsftpd.cert
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Mar 26 03:48:59 2012 GMT
Not After : Mar 26 03:48:59 2013 GMT
Subject:
countryName = CN
stateOrProvinceName = BEIJING
organizationName = FTP
organizationalUnitName = FTP
commonName = ftp.bj.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
16:AB:F4:E9:6D:32:28:C0:3E:9F:13:97:68:F3:3B:CE:C5:78:C9:53
X509v3 Authority Key Identifier:
keyid:4E:C6:CE:F1:54:03:ED:7B:82:3C:9F:B0:70:71:FC:DC:4F:A3:41:35
Certificate is to be certified until Mar 26 03:48:59 2013 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
2.3.9设置certs目录内文件的权限
[root@localhost certs]# chmod 600 *
2.4
编辑ftp
主配置文件
[root@localhost certs]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
no_anon_password=YES
#允许匿名用户登录,并且不需要密码
dirmessage_enable=YES
message_file=.message
#打开文件夹时显示的提示信息
connect_from_port_20=YES
idle_session_timeout=600
#会话的空闲时间是600s
data_connection_timeout=120
#数据连接超时的时间为120s
ftpd_banner=Welcome to zzdx FTP service.
#登录到ftp服务器时显示的欢迎信息!
chroot_local_user=YES
#禁止本地用户切换到自己家目录以外的地方,以保证服务器的安全!
use_localtime=YES
#使用本地时间
max_clients=30
#最大在线用户为30
max_per_ip=2
#同一个ip地址所允许打开的最大在线量
userlist_deny=YES
local_max_rate=1000000
#限制本地用户速度,单位是bit
anon_max_rate=100000
#限制匿名用户速度,单位是bit
pasv_min_port=65400
pasv_max_port=65410
#限定被动连接的端口在65400与65410之间
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
ssl_enable=YES
ssl_sslv1=YES
ssl_sslv2=YES
ssl_tlsv3=YES
#强制各个版本的ssl安全登录
rsa_cert_file=/etc/vsftpd/certs/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/certs/vsftpd.key
#证书以及key的存放位置
重新启动ftp服务
[root@localhost certs]# service vsftpd restart
Shutting down vsftpd:
[ OK ]
Starting vsftpd for vsftpd:
[ OK ]
2.5
结果测试
2.5.1 安装FlashFXP软件测试用户访问ftp服务器
打开该软件选择 站点→站点管理器→新建站点
填写访问地址,并选择访问类型
访问Ftp服务器时出现的证书,选择“接受一次”或“接受并保存”
user1已成功登录到自己的家目录
用wireshark抓取到用户登录是的信息如下
700.563257 192.168.2.3 -> 192.168.2.100 FTP Request: AUTH SSL
700.583757 192.168.2.3 -> 192.168.2.100 FTP Request: \200\310\001\003\001\000\237\000\000\000 \000\300\024\000\300
700.585468 192.168.2.3 -> 192.168.2.100 FTP Request: \026\003\001\000\206\020\000\000\202\000\200F\252\273&
700.694289 192.168.2.3 -> 192.168.2.100 TCP 3555 > 21 [ACK] Seq=403 Ack=894 Win=371400 Len=0
701.965255 192.168.2.3 -> 192.168.2.100 FTP Request: \027\003\001\000\030p\237U\236\034\361\373~\373\214\276\307\275lf)s\257L\204
加密后我们并未抓取到用户的帐号和密码,从而实现了用户的安全性的访问。
user2登陆后限制在自己的家目录