全部博文(191)
分类:
2009-07-08 14:07:10
一,ftp被动式连接图示如下:
第一步、首先是客户端随机打开>1024端口连接到FTP服务器的21端口,同时客户端随机打开了另一个>1024端口,处于wait状态。
第二步、随后FTP服务器发来一个“ACK“确认连接成功,同时告诉客户端,我服务器使用哪个端口(而非20端口)进行数据连接
第三步、客户端使用>1024的端口来连接>1024的服务器端口(数据端口)
第四步、服务器端给客户端返回一个“ACK”,也即服务器端>1024端口连接客户端>1024端口确认连接成功
二:实验
第一步、环境
客户端IP:192.168.1.113 FTP服务器IP:192.168.1.112 ,用户apple
第二步、连接FTP服务器192.168.1.112
[root@www ~]# ftp -d 192.168.1.112 ---------------------连接服务器,参数-d 显示更多信息
Connected to 192.168.1.112.
220 (vsFTPd 2.0.5)
ftp: setsockopt: Bad file descriptor
---> AUTH GSSAPI
530 Please login with USER and PASS.
---> AUTH KERBEROS_V4
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.112:root): apple --------------------输入FTP服务器账户
---> USER apple
331 Please specify the password.
Password: --------------输入用户-密码
---> PASS XXXX
230 Login successful.
cmds.c:276: verbose=1 debug=1 overbose=1
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
---> PASV -----------------被动模式
227 Entering Passive Mode (192,168,1,112,76,152) --------------FTP服务器的>1023端口被打开
---> LIST
150 Here comes the directory listing.
drwxr-xr-x 2 500 500 4096 Jun 11 22:29 Desktop
drwxrwxrwx 2 500 500 4096 Jul 05 10:23 mnt
226 Directory send OK.
ftp>
第三步、看看被动模式下的端口状态
netstat -an |less
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address Stat
e
tcp 0 0 192.168.1.112:19608 192.168.1.113: 43348 TIME_WAIT --等待数据传输
tcp 0 0 192.168.1.112:21 192.168.1.113:38525 ESTABLISHED-已经建立连接
分析:客户端随机打开两个>1024端口,分别是 43348和38525
服务器端的连接端口21,数据端口随机打开>1024端口,是19608(256*76+152得来的)
问题:当客户端连接到FTP服务器端的高位端口时候,有可能被服务器前面的
iptables防火墙阻塞掉,导致客户端无法访问FTP服务器
解决:
Iptables防火墙需要添加如下理论规则:
第一条规则:允许FTP客户端从大于1024的端口连接FTP服务器的21端口
第二条规则:允许FTP服务器从21端口回应FTP客户端大于1024端口的网络连接
第三条规则:允许FTP客户端从大于1024端口连接FTP服务器的大于1024端口
第四条规则:允许FTP服务器从大于1024端口回应来自FTP客户端大于1024端
口的网络连接
说明:上述规则中的第三、第四条规则中,红色加粗部分的“FTP服务器从大于1024端口”,在iptables防火墙设置中可以设定FTP服务器高端位端口的一个有限的范围,以较少地泄露FTP服务器的端口。