iptables 就是linux系统的防火墙,很多人安装iptables之后重启服务器发现网站无法访问,ftp无法连接。关闭iptables之后网站和ftp服务器都能正常访问,但是为了服务器的安全,不建议关闭防火墙。

要想配置好iptables让ftp服务器正常访问,我们首先要了解一下ftp服务器的工作机制。

ftp协议是一个简单、保密性差(明码)的tcp协议,它的工作原理是客户端先连服务器端的21端口,然后经过3步的握手以后建立了一条连接。要注意的是,这条连接只可以用来传输ftp的命令,只有这条连接的话是什么文件都传不了的,就算是用“ls”命令来查看文件也不行。

建立了命令的连接以后,服务器端就要建立一条数据的连接。数据的连接又分为主动模式(port)和被动模式(passive)。ftp默认是被动模式,主动和被动之间使用”pass”命令切换。主动模式通过20端口与客户端相连,而被动模式却使用1024以后的端口与客户端相连。由于1024以后的端口是随机分配的,所以在被动模式下我们是不知道服务端是使用什么端口与客户端连接的。也就是说,我们是不知道iptables要开放什么端口。

了解之后我们发现,仅仅在iptables设置开放21端口是不行的。

在/etc/sysconfig/iptables-config里面添加ip_nat_ftp、ip_conntrack、ip_conntrack_ftp模块,如下:

vi /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp"
IPTABLES_MODULES="ip_conntrack"
IPTABLES_MODULES="ip_conntrack_ftp"

然后重启iptables或者执行如下命令:

modprobe ip_nat_ftp   (加载ftp模块)
lsmod | grepftp    (查看模块是否被加载)


之后只需要添加规则

iptables -I INPUT -s 192.168.1.1 -d 192.168.1.200 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -d 192.168.1.200 -p tcp --sport 21 -j ACCEPT

注意:如果你把OUTPUT 设置成DROP的就要写上

iptables -A OUTPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT


最后要记得保存和重启iptables服务

/etc/rc.d/init.d/iptablessave
service iptables restart

这样ftp命令能传输了,也可以利用ftp服务器上传下载文件了。


Logo

更多推荐