iptables下开放ftp连接

iptables下开放ftp连接

这两天在给客户安装服务器时也顺便给他们使用iptables,不用不知道,一用才发现iptables还有很多东西可以学的,比如开放ftp。
iptables 的filter表的INPUT链的默认策略设为了DROP,其余的链均为ACCEPT。 该服务器即要作ftp服务器,也要连上别的ftp服务器。即是说要把源端口和目的端口都开放21才行:

iptables -A INPUT -p tcp –sport 21 -j ACCEPT
iptables -A INPUT -p tcp –dport 21 -j ACCEPT

开了21端口就行了吗?不是的。先说说ftp协议。ftp协议是一个简单、保密性差(明码)的tcp协议,它的工作原理是客户端先连服务器端 的21端口,然后经过3步的握手以后建立了一条连接。要注意的是,这条连接只可以用来传输ftp的命令,只有这条连接的话是什么都传不了的,就算是用 “ls”命令来查看文件也不行。
建立了命令的连接以后,服务器端就要建立一条数据的连接。数据的连接又分为主动模式(port)和被动模式(passive)。ftp默认是被动 模式,主动和被动之间使用”pass”命令切换。主动模式通过20端口与客户端相连,而被动模式却使用1024以后的端口与客户端相连。由于1024以后 的端口是随机分配的,所以在被动模式下我们是不知道服务端是使用什么端口与客户端连接的。也就是说,我们是不知道iptables要开放什么端口。
开始我使用的是

iptables -A input -p tcp –sport 1024: –dport 1024: -j ACCEPT

来让ftp建立被动连接的。但觉得如果这样的话,那就等于把所以p2p的连接都开放了,不安全。
于是在CU上问人,终于找到了解决的方法:
1、加载模块。

modpobe ip_nat_ftp
modpobe ip_conntrack
modpobe ip_conntrack_ftp

把原有规则:iptables -A input -p tcp –sport 1024: –dport 1024: -j ACCEPT

改为:iptables -A input -p tcp –sport 1024: –dport 1024:  -m state –state ESTABLISHED,RELATED  -j ACCEPT


允许连接保持的被动访问。

问题终于解决了。 

 

 /sbin/iptables -P OUTPUT ACCEPT
        /sbin/iptables -A INPUT -i lo -j ACCEPT
        /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
        /sbin/modprobe ip_nat_ftp
        /sbin/modprobe ip_conntrack
        /sbin/modprobe  ip_conntrack_ftp
        /sbin/iptables -A INPUT -p tcp --sport 21 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state  ESTABLISHED,RELATED  -j ACCEPT
       # /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
        /sbin/iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
        /sbin/iptables -A INPUT  -p icmp -m state --state ESTABLISHED,RELATED  -j ACCEPT
 
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

 

你可能感兴趣的:(iptables下开放ftp连接)