首先大家要认清楚一个概念,使用ftp是从http代理出去,还是由socks代理或firewall上打开一个口转发。从http代理出去的ftp,实际上使用的是http代理程序,象最常用的squid,是http/https代理,但是它也能代理ftp请求。当你打开浏览器登陆ftp站点时,使用的就是http代理程序来处理ftp的问题。而有些程序只能设置成socks或firewall代理,象cuteftp,wu-ftp和dos下的ftp。此类的代理才是标准的ftp代理。
本文假设大家.netfilter技术已经有了一定了解,介绍利.netfilter的有状态功能在inux2.4内核上实现ftp。
系统环境:
linux7.2,安装了iptable,squid,有两块网卡:
eth0:x.x.x.x 接inte.net
eth1:192.168.0.1 接内网
firewall相关规则:
##ismod the firewall modules *加载模块
modprobe ip_tables
insmod ip_conntrack
insmod ip_conntrack_ftp
insmod ip_nat_ftp
关于有状态功能,重点在于后三个模块:
ip_conntrack模块能够使防火墙具有连接跟踪能力。(通过输入 "cat /proc.net/ip_conntrack" 可以查看您的机器参与的活动网络连接。)加载这个模块后,基本上所有有状态的返回包都能识别,例:te.net,http,qq,mail,ping,dns等。
实际上,加载了ip_conntrack模块,ftp已经能够登陆,并能使用象pwd,cd等命令,但当使用ls命令显示文件内容时,就会timeout。原因在于显示文件列表的包防火墙无法识别,就会进入默认策略----禁止,此时就需要加载ip_conntrack_ftp模块。
ip_conntrack_ftp模块使防火墙能够识别ftp某类特殊的返回包。
如果防火墙上对所有出去的返回包作了伪装,就需要加载ip_nat_ftp模块。
ip_nat_ftp模块在出去的包作了伪装以后,必须加载,否则防火墙无法知道返回的包该转发到哪里。
##define the policy *定义默认规则
iptables -p input drop
iptables -p forward drop
iptables -p output accept
#masquerade
$iptables -t nat -a postrouting -s 192.168.0.0/24 -o eth0 -j masquerade
所有从局域网出去的包伪装
#accept lan use ftp *允许所有局域网用户使用ftp
iptables -a forward -s 192.168.0.0/24 -i eth1 -p tcp --dport 20 -j accept
iptables -a forward -s 192.168.0.0/24 -i eth1 -p tcp --dport 21 -j accept
iptables -a forward -s 192.168.0.0/24 -i eth1 -p udp --dport 20 -j accept
iptables -a forward -s 192.168.0.0/24 -i eth1 -p udp --dport 21 -j accept
打开ftp的20,21端口
#accept come back packets from inte.net
iptables -a forward -m state --state established,related -j accept
允许有状态的返回包转发
关.netfilter有状态基础知识,请查看下面这篇优秀的文章:
http://www.linuxeden.com/edu/doctext.php?docid=1627
另:本人水平有限,错误之处再所难免。关于ip_conntrack_ftp和ip_nat_ftp模块的资料本人没有找到,只是按照自己的理解作了上述解释。欢迎各位同行批评指正或来信交流。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器