下面是针对ftp与防火墙的:
原文在
https://bbs.bsdbase.com/index.php?act=ST&f=1&t=61&s=70ea2defc240d3c2f8068483d082556d
ftp server and nat firewall
ftp服务器与nat防火墙
by 阿土 tutu@bsdbase.com 2002.07.08
2003.02.28修正
pre:对于这个问题,网上早有讨论以及解决的办法,然而我自己在初次遇到
此问题时,却总是觉得找到的资料往往可操作性不够,所以不惜献丑,把自己
的实践经验整理出来,一方面供自己日后参考,也希望能帮助为这个问题所
困扰的兄弟;阿土水平不高,文笔更是一塌糊涂,还请各位大侠帮忙,找出文
中错漏,阿土在此先说谢谢了:)
1.ftp 协议的简单描述
与http等基于单个连接的协议不同,ftp使用两个tcp通道进行工作,
一个是client:any ->; server:21 的连接,称为控制通道,用于传输
相关的ftp工作指令资料;另外一个是数据通道,用于在list/get/put
等指令时传输数据内容,该通道的建立有不同的方式。
在数据通道的建立上,为了适应不同的情况,ftp server支持两种
模式:主动模式/被动模式(port/pasv),在port模式下,当需要在
server和client之间传输数据时(比如用户发送ls指令,服务器要把文
件列表传输回client),client会在控制通道发port指令类似
(PORT 192,168,0,170,4,58),client在本机开一个>;1024的监听端口,
等待server连接,server在控制通道接受该port指令后,使用其20端口
去连接client的监听端口,即server:20 ->; client:any,使用该数据通
道进行数据传输;对于PASV模式,client发pasv指令,server将会随机
开放一个>;1024的监听端口,随后 CLIENT连接到该高端口进行数据传送。
(还有fxp,是比较特别的,不作讨论)
2. 防火墙对ftp的影响以及解决方法;
从上述ftp工作的简单描述中我们看到防火墙会影响到client <->; server
的数据传输,有下列几种情况:
1).server <-wan->; client,没有防火墙,没有任何限制。
2).server <-wan->;fw -- client,client在防火墙后面,使用私网地址,
通过NAT访问公网:
在一般的情况下,port指令将被防火墙阻挡,表现为client发port
指令(通常ls就会需要进行一次data传输)时总是得不到server的响应,直到超时
错误,此时,是因为server无法连接到client所开的随机高端口(client在port指
令中会告知server自己所开的端口以及自己的地址);此时client可以使用pasv模
式进行工作;如果该client不能使用pasv指令(如一些简单的ftp client程序,我
遇到的有ca kill的病毒代码库自动升级程序,使用ftp从服务器下载升级文件),
就要求防火墙具有outing ftp proxy功能(iptables称ftp conntrack),或称ftp
映射内核代理,即防火墙监控在特定端口(一般是21)的ftp连接,在检测到client
向server发送的port指令时,把该指令中的client地址以及端口修改为防火墙地址以
及端口,再把修改后的数据发往server,同时在server返回数据时将该数据重定向到
client的监听端口,完成一次完整的port过程;
在Ipfilter下可以使用类似下面的nat规则实现,其他的防火墙产品请查阅其文档:
map ed0 192.168.100.0/24 ->; 211.97.116.21x/32 proxy port ftp ftp/tcp
3).server --fw <-wan->; client,server在防火墙后面,使用私网地址,通过fw的
重定向接收外部访问:
此时,port指令没问题,但是pasv会被防火墙阻挡,出错的表现类似port指令,
此时,client可使用port指令工作;如果需要server支持pasv,需要在防火墙以及ftp server
上做相应的设置:
首先,设置pasv参数:
Proftpd:
#/usr/local/etc/proftpd.conf
MasqueradeAddress 211.97.116.21x
#该参数设置在client发pasv指令时,server返回给client的pasv地址串中应该包含的连接地址,
#该地址通常是防火墙的外部地址(作rdr的地址)
PassivePorts 30001 50000 # These ports should be safe...
#该参数说明pasv指令使用的端口范围
对于pure-ftpd
# Port range for passive connections replies. - for firewalling.
PassivePortRange 30001 50000
#在防火墙上开放的passsive端口范围
# Force an IP address in PASV/EPSV/SPSV replies. - for NAT.
ForcePassiveIP 211.97.116.21x
#这里211.97.116.21x就是防火墙进行rdr的公网地址了。
对于windows里的serv-u在其高级设置里也有类似的设置(passive ports,passive address),
图形界面,很简单了;
如果是其他的ftpd,应该也有类似的设置,如wu-ftpd,不熟悉,不胡说。
然后设置防火墙:
pass in on ed0 proto tcp from any to 192.168.100.10 port 30000 >;< 50001 flags S keep state
#允许外部连接server的pasv端口范围
rdr ed0 211.97.116.21x/32 port 30001-50000 ->; 192.168.100.10 port 30001 tcp
#将该范围的端口重定向到ftp server
#注意:某些ftp server并没有proftpd这样的配置参数(比如ms iis里的ftp),
#将不能通过此方法解决问题,具体请查阅其说明书。
如果是使用iptables,就简单些:
#iptables modules
#modprobe ip_tables
#nat
modprobe iptable_nat
#connect_track
modprobe ip_conntrack
#ftp NAT,PASV,PORT command.
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
有ftp的DNAT支持模块,在规则里做21端口的DNAT重定向即可,conntrack会自动维护其中的PORT/PASSIVE关系。
4).server --fw<->;fw -- client server和client都在防火墙后面:
如果没有特别的方法,server和client之间将不能工作;解决的办法就是综合上述2).3)的方法,
在server的防火墙以及client的防火墙分别做相应的设置.
BTW:不单是ftp server,其他的某些服务也有类似问题,比如netmeeting(h323),pptp server,解决的思路也相似。
分享到:
相关推荐
ftp与防火墙怎么样设置.docx
在被动模式下,ftp会打开一个高于1024的随机端口与客户端传输数据。这个端口的下限和上限可以在ftp服务端软件中设置的。因此,在设置ftp端口防火墙时,需要开放20和21端口,以确保ftp服务器的安全。此外,还需要在...
在配置 FTP 防火墙设置时,需要配置一个特定的 FTP 站点的外部 IPv4 地址,以便 FTP 服务器可以与外部客户端进行连接。步骤如下: 1. 转到 IIS 7 管理,单击树中的站点节点。 2. 右键单击树中的站点节点,单击...
server2012r2用iis搭建FTP无法访问,需要在防火墙里配置FTP放行规则
FTP类,支持防火墙设置
FTP类,支持防火墙设置
FTP类,支持防火墙设置,在vc上面测试通过,可以放心使用
本文将为大家介绍Linux中使用有状态防火墙实现FTP功能。
在平时发现,按照正常的过程利用Windows server 2008内部的FTP配置服务以后,很多的FTP下载工具都不能正常下载,原因是因为防火墙的问题,本文描述了怎样配置防火墙,使得客户端能够正常访问Windows server 2008自带...
如何配置防火墙4000ip规则(ftp only) 如何配置防火墙4000长连接配置 如何配置防火墙4000串口登陆 如何配置防火墙4000带宽控制 如何配置防火墙4000动态nat 如何配置防火墙4000节点对象和对象组 如何配置防火墙4000...
这个"vc++ FTP类,支持防火墙设置.zip"压缩包显然包含了用Visual C++编写的FTP客户端实现,它允许用户通过可能存在的防火墙进行FTP传输。下面我们将详细探讨FTP的基本原理,以及如何在VC++中实现防火墙支持。 FTP...
"SuSE Linux 11 开启SSH 关闭防火墙 开启FTP" 该文档主要讲解了 SuSE Linux 11 中如何开启 SSH、关闭防火墙和开启 FTP 服务的步骤。下面是相关知识点的详细说明: 一、SSH 服务器配置 在 SuSE Linux 11 中,开启 ...
2、控制面板 --- Windows防火墙 --- 高级 --- 选中"本地连接**”(或者无线网络连接,和使用何种方式连接路由器共享上网有关)--- 设置 --- 钩选"FTP服务器"和“HTTP服务”。开放端口。 3、如果你还使用了路由器,就...
一个FTP类,可以学习FTP的工作原理
FTP服务通过防火墙PPT教案.pptx
分布式防火墙中FTP透明代理的研究与实现.pdf 维普下载 分享给大家
Win2008 R2 IIS FTP防火墙的配置.docx
arp 防火墙,ftp,流量控制,日志分析。
SuSE Linux 11 中启用 SSH、关闭防火墙和启用 FTP 的步骤和配置 在本文中,我们将详细介绍 SuSE Linux 11 中启用 SSH、关闭防火墙和启用 FTP 的步骤和配置。 启用 SSH 要启用 SSH,在 SuSE Linux 11 中需要进行...
- 在IIS管理器的树状结构中,找到IIS管理的根路径,双击“FTP防火墙支持”。 3. **指定端口范围**: - 在弹出的页面中,找到“数据通道端口范围”设置项,输入所需的端口范围(例如:2012-2012),并点击“应用”...