iptables下开放ftp
这两天在给客户安装服务器时也顺便给他们使用
iptables
,不用不知道,一用才发现
iptables
还有很多东西可以学的,比如开放
ftp
。
iptables
的
filter
表的
INPUT
链的默认策略设为了
DROP
,其余的链均为
ACCEPT
。
该服务器即要作
ftp
服务器,也要连上别的
ftp
服务器。即是说要把源端口和目的端口都开放
21
才行:
iptables -A INPUT -p tcp –sport 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
、加载模块。
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
2,
加上一条规则:
处于
server
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
处于
client
iptables -A OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
允许连接保持的被动访问。
其实这样在重启
iptables
的时候所需的模块又不见了,通过不懈的努力终于找到了最终的解决方法,编辑
/etc/sysconfig/iptables-config
:
IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"
把需要加载的模块加入,无论重启系统还是
iptables
但
ftp
模块始终还是加载的。
就这样搞定,希望能在以后帮助大家来解决 ftp 上的问题.
评论: