基于IP Filter的NAT透析
4.4.2外网Client访问内网Ftp Server
从上一小节介绍了如何让内网的客户端访问外网的Ftp服务器在使用PORT模式可以顺利通过,而这一小节要解决的问题和上一小节的刚好相反,外网的客户端使用PORT模式可以在现有的rules基础上不做任何更改就能和内网Ftp服务器建立连接并传输数据,但用PASV模式反而不行,如图4-6所示。这种现象在上一小节已经分析得比较清楚了,因为PASV模式下,在内网的服务器端会建立一个随机监听端口并在此之前给外网客户机送一个带有其IP地址(192.168.0.*的内网地址)和新建端口号信息的 PASV帧,外网的客户端能正确的接收到该帧然后以“192.168.0.*:服务器新端口号”为目的地址回复确认报文,当然这种数据报是不可能发送到目的地的,如图4-7所示。

图4-6 外网客户端FlashFXP用PASV模式时收到到的错误信息
图4-7 从外网客户端捕获的连接失败过程的数据报
通过分析发现问题的主要症结就在于服务器端告诉客户端的IP地址是一个内网地址,这个信息和普通的TCP连接的源地址不一样,后者的地址信息放置在IP 报头里,防火墙有能力分析并映射为自己的IP,而前者的地址信息放置在上层的应用层报文内部,防火墙不会对每个报文的应用层数据帧进行分析处理,所以内网 IP地址不能被转换成防火墙的真实IP。既然防火墙没有办法实现那只有找发送PASV的服务器寻找解决问题的方法。好在大部分的Ftp服务器都支持手动调节PASV信息帧的内容,拿Windows平台最流行的Server-U服务器为例,设置如图4-8所示:

图4-8 Server-U设定PASV的IP和随机端口范围
在这种情况下,内网服务器给外网客户会发一个PASV告诉客户端确认报文发送到202.115.65.225,端口为40000到60000随机产生的一个确定数值,外网客户端按照要求回复的数据报会被防火墙接收,但它还不知道怎么转发到内网服务器,还需加入下面rule才能正确转发到内网Ftp服务器。
rdr rl1 202.115.65.225/32 port 40000-60000 -> 192.168.0.221 port 40000 tcp
这条rule会把请求40000-60000的端口范围的数据报转发到192.168.0.221 Ftp服务器。

图4-9 连接成功后的客户端和服务器端捕获的数据报
五、总结
把所有的rules汇总生成最后的rules 如下:
map rl1 192.168.0.0/24 -> 202.115.65.225/32 portmap tcp/udp 10000:39999
map rl1 192.168.0.0/24 -> 202.115.65.225/32
map rl0 192.168.0.0/24 -> 202.115.65.225/32
rdr rl1 202.115.65.225/32 port 40000-60000 -> 192.168.0.251 port 40000 tcp
map rl1 192.168.0.0/24 -> 202.115.65.225/32 proxy port Ftp Ftp/tcp
rdr rl1 202.115.65.225/32 port 80 -> 192.168.0.251 port 80
rdr rl1 202.115.65.225/32 port 21 -> 192.168.0.251 port 21
rdr rl1 202.115.65.225/32 port 25 -> 192.168.0.251 port 25
rdr rl1 202.115.65.225/32 port 110 -> 192.168.0.251 port 110
rdr rl1 202.115.65.225/32 port 139 -> 192.168.0.2 port 139
rdr rl0 202.115.65.225/32 port 139 -> 192.168.0.2 port 139
rdr rl0 202.115.65.225/32 port 80 -> 192.168.0.251 port 80
rdr rl0 202.115.65.225/32 port 21 -> 192.168.0.251 port 21
rdr rl0 202.115.65.225/32 port 25 -> 192.168.0.251 port 25
rdr rl0 202.115.65.225/32 port 110 -> 192.168.0.251 port 110
rdr rl0 202.115.65.225/32 port 139 -> 192.168.0.251 port 139 把上面的rules保存到nat.conf文件中后运行下面的命令,防火墙就能完成案例的所有需求了。
#ipnat –CF
#ipnat –f nat.conf 本文经过分析简单的rule来推测著名防火墙软件IP Filter的NAT工作机理,并在此基础上探讨了复杂 路由 的设计思路,结合实际案例分析 路由 数据报的收发流程并提出了完美的解决方案。(完)