iptables下开放ftp

post by rocdk890 / 2011-9-3 14:30 Saturday linux技术

这两天在给客户安装服务器时也顺便给他们使用 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
、加载模块。


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 上的问题.

夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-44.html

标签: iptables ftp vsftpd

评论: