FTP简要介绍:ftp协议是一个简单、保密性差(明码)的tcp协议,它的工作原理是客户端先连服务器端的21端口,然后经过3步的握手以后建立了一条连接。要注意的是,这条连接只可以用来传输ftp的命令,只有这条连接的话是什么都传不了的,就算是用“ls”命令来查看文件也不行。
建立了命令的连接以后,服务器端就要建立一条数据的连接。数据的连接又分为主动模式(port)和被动模式(passive)。
PORT(主动)方式的连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条 数据链路来传送数据。
PASV(被动)方式的连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来 传送数据。
ftp默认是被动模式,主动和被动之间使用"pass"命令切换。主动模式通过20端口与客户端相连,而被动模式却使用1024以后的端口与客户端相连。由于1024以后的端口是随机分配的,所以在被动模式下我们是不知道服务端是使用什么端口与客户端连接的。也就是说,我们是不知道iptables要开放什么端口。
【测试环境 红帽企业6.5】
业务需求:
(1)服务器1 的eth0网卡所连网络属于可信区域,不需要在服务器配置相关安全策略;
(2)服务器1的默认网关在eth0上;
(3)服务器1的eth1所连网络是不可信区域,需要在服务器上配置iptables,实现eth1只允许接收或发送FTP相关数据,可以Ping通网卡IP地址,其余请求全部丢弃;
(4)服务器1作为client通过eth1网卡向FTP SERVER上传文件;
【验证FTP网络正常】
在服务器1没有配置任何的策略时先验证FTP功能正常,例如:
(1)ssh 192.168.8.150登录到服务器1
(2)执行ftp 192.168.80.4
(3)输入用户名和密码
(4)执行mput xxx随便上传一个文件确认上传正常
【配置iptables且只放行可信网络eth0的流量】
(1)ssh 192.168.8.150登录到服务器1
(2)执行如下iptables命令
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -s 127.0.0.0/8 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -P INPUT DROP
(3)执行service iptables save
(4)执行service iptables start
(5)登录Network2中的客户端,然后确认无法ssh登录192.168.80.3,可ping通192.168.80.3,说明iptables生效
(6)执行ftp 192.168.80.4,会发现无法建立正常的FTP连接
【配置iptables且放行eth1的FTP流量第一步】
(1)ssh 192.168.8.150登录到服务器1
(2)执行iptables -I INPUT 2 -i eth1 -p tcp --sport 21 -d 192.168.80.3 -j ACCEPT
(3)执行ftp 192.168.80.4
(4)输入用户名和密码
(5)执行mput xxx随便上传一个文件,此时发现无法上传
【配置iptables放行eth1的FTP流量第二步】
(1)ssh 192.168.8.150登录到服务器1
(2)执行modprobe ip_nat_ftp
(3)执行modprobe ip_conntrack_ftp
(4)执行iptables -I INPUT 2 -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
(5)执行ftp 192.168.80.4
(6)输入用户名和密码
(7)执行mput xxx随便上传一个文件,确认文件可正常上传
(8)执行service iptables save
(9)执行vim /etc/sysconfig/iptables-config,修改相关内容如下
(10)执行chkconfig iptables on设置开机启动
(11)登录Network2中的客户端,然后确认无法ssh登录192.168.80.3,可ping通192.168.80.3
(12)重启服务器,然后再重新测试FTP上传功能正常