一、FTP的概述 文件传输协议(FTP)是TCP/IP提供的标准机制,用来将文件从一个主机复制到另一个主机。FTP使用TCP的服务。 FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。
控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的, PI称为控制连接。 数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。 FTP协议中,控制连接均有客户端发起。 数据连接有两种工作方式:PORT(主动)方式和PASV(被动)方式。 主动方式: 1.客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,源端口为随机端口x,在客户端,远程端口为21,在服务器。 2.客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。 3.服务器打开20号源端口并且建立和客户端数据端口的连接。此时,源端口为20,远程数据端口为(x+1)。 4.客户端通过本地的数据端口建立一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经建立好了一个连接。 被动方式: 当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。 FTP的优点: 1.促进文件的共享 2.鼓励间接或者隐式的使用远程计算机 3.向用户屏蔽不同主机中各种文件存储系统的细节 4.可靠和高效的传输数据 FTP的缺点: 1.密码和文件内容都使用明文传输,可能产生不希望发生的窃听。 2.因为必须开放一个随机的端口以建立连接,当防火墙存在时,客户端很难过滤处于主动模式下的FTP流量。这个问题通过使用被动模式的FTP得到了很大解决。 3.服务器可能会被告知连接一个第三方计算机的保留端口。 登录FTP服务器有三种方式 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。 本地用户登录:使用/etc/passwd中的系统用户登录。 虚拟用户登录:有两种方式实现虚拟用户:本地数据文件(DB)和数据库服务器(MySQL)。FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的资源,大大增强了系统的安全。 FTPS简介 一种多传输协议,相当于加密版的FTP。当你在FTP服务器上收发文件的时候,你面临两个风险。第一个风险是在上载文件的时候为文件加密。第二个风险是,这些文件在你等待接收方下载的时候将停留在FTP服务器上,这时你如何保证这些文件的安全。你的第二个选择(创建一个支持SSL的FTP服务器)能够让你的主机使用一个FTPS连接上载这些文件。这包括使用一个在FTP协议下面的SSL层加密控制和数据通道。一种替代FTPS的协议是安全文件传输协议(SFTP)。这个协议使用SSH文件传输协议加密从客户机到服务器的FTP连接。 FTPS是在安全套接层使用标准的FTP协议和指令的一种增强型FTP协议,为FTP协议和数据通道增加了SSL安全功能。 FTPS也称作“FTP-SSL”和“FTP-over-SSL”。SSL是一个在客户机和具有SSL功能的服务器之间的安全连接中对数据进行加密和解密的协议。 实验安全机密的访问机制 拓扑图
二、配置步骤 1、安装vsftpd软件包 yum install -y vsftpd-2.0.5-16.el5.i386.rpm 启动vsftpd服务 service vsftpd start 安装抓包工具 yum -y install wireshark-1.0.8-1.el5_3.1.i386.rpm 创建账号user1 useradd user1 passwd user1 user1登陆ftp服务器
因为传递是明文的,我们看是否能够抓到用户的账号信息 [iyunv@mail Server]# tshark -ni eth0 -R "tcp.dstport eq 21" Running as user "root" and group "root". This could be dangerous. Capturing on eth0 203.336196 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=2 203.337266 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [ACK] Seq=1 Ack=1 Win=8192 Len=0 203.545563 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [ACK] Seq=1 Ack=21 Win=8172 Len=0 206.871753 192.168.10.15 -> 192.168.10.10 FTP Request: USER user1 207.071412 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [ACK] Seq=13 Ack=55 Win=8136 Len=0 208.183262 192.168.10.15 -> 192.168.10.10 FTP Request: PASS 123 208.827546 192.168.10.15 -> 192.168.10.10 TCP 50487 > 21 [ACK] Seq=23 Ack=78 Win=8112 Len=0 我们得到用户名称user1,密码:123,显然这种明文传递的方式显然是存在安全隐患的,我们为了提高ftp访问的安全性,采取ftps加密的访问方式 2、CA的相关配置 [iyunv@mail ~]# cd /etc/pki/ [iyunv@mail pki]# vim tls/openssl.cnf 45 dir = /etc/pki/CA #证书路径 颁发证书机构与申请机构必须在同一地区,改为可选的 88 countryName = optional 89 stateOrProvinceName = optional 90 organizationName = optional 在CA目录下创建三个目录两个文件 [iyunv@localhost CA]# mkdir crl certs newcerts [iyunv@localhost CA]# touch index.txt serial 颁发的证书的序列号码从01开始 [iyunv@localhost CA]# echo "01" >serial 为证书颁发机构产生钥匙,并重定向到private目录下的cakey.pem文件中,钥匙长度为1024位 [iyunv@localhost CA]# openssl genrsa 1024 >private/cakey.pem 修改文件权限,确保钥匙的安全,其他用户没有权限 [iyunv@localhost CA]# chmod 600 private/* 产生密钥 #–new表示新的钥匙 –x509表示一种格式 [iyunv@localhost CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem -days 3650 Country Name (2 letter code) [CN]: State or Province Name (full name) [BEIJING]: Locality Name (eg, city) [BEIJING]: Organization Name (eg, company) [My Company Ltd]:SECCENTER Organizational Unit Name (eg, section) []:TEC Common Name (eg, your name or your server's hostname) []:rootca.net.net ftp服务器的配置 创建存放私有钥匙,证书等信息的目录 mkdir -pv /etc/ftpd/certs 产生钥匙 cd /etc/httpd/certs/ openssl genrsa 1024 >ftpd.key 向根机构请求证书, [iyunv@localhost certs]# openssl req -new -key ftpd.key -out ftpd.csr Country Name (2 letter code) [CN]: State or Province Name (full name) [BEIJING]: Locality Name (eg, city) [BEIJING]: Organization Name (eg, company) [My Company Ltd]:abc Organizational Unit Name (eg, section) []:tec Common Name (eg, your name or your server's hostname) []:ftp.abc.com 利用请求,得到证书 [iyunv@localhost certs]# openssl ca -in ftpd.csr -out ftpd.cert Web服务器申请证书信息 Subject: countryName = CN stateOrProvinceName = BEIJING organizationName = abc organizationalUnitName = tec commonName = ftp.abc.com 修改钥匙证书所在目录的权限,保证信息的安全 [iyunv@localhost certs]# chmod 600 * 3、配置vsftpd的配置文件 钥匙 119 rsa_cert_file=/etc/ftpd/certs/ftpd.cert #证书路径和名字 120 rsa_private_key_file=/etc/ftpd/certs/ftpd.key #私钥的位置 121 ssl_tlsv1=YES 122 ssl_ssl2=YES 123 ssl_ssl3=YES #支持ssl_tls的三个版本 124 force_local_logins_ssl=YES #本地账号登陆加密 125 force_local_data_ssl=YES #传递数据加密 126 ssl_enable=YES #开启ssl加密 三、客户端测试 安装ftp的客户端软件,新建站点
连接到ftp服务器
由于没有配置DNS,所以证书提示证书名称与访问不匹配,信任证书,可以成功实现加密访问ftp
继续在eth0网卡的21端口抓包,我们看到验证方式为ssl,增加安全性 tshark -ni eth0 -R "tcp.dstport eq 21" 4890.084795 192.168.10.15 -> 192.168.10.10 FTP Request: AUTH SSL 4890.160493 192.168.10.15 -> 192.168.10.10 FTP Request: \200\310\001\003\001\000\237\000\000\000 \000\300\024\000\300 4890.276378 192.168.10.15 -> 192.168.10.10 FTP Request: \026\003\001\000\206\020\000\000\202\000\200\032g\314\373\006\360\236\360~\233\326\221\032\225\335\004\030^H\201~-\375\v<\025/z\237O;\002\301x\310\241\267\026\304@\217l\313=\031\000P\223\253\301\f\356^ 4890.488872 192.168.10.15 -> 192.168.10.10 TCP 51921 > 21 [ACK] Seq=403 Ack=896 Win=64804 Len=0 案例二 待续。。。。 |