用ipfilter实现透明代理( 四 )


好在RealPlayer提供与防火墙兼容的模式, 可以设置为只使用TCP Port
7070, 7071, 554 三个端口连接Server, 与我们的防火墙正好吻合. 在防火墙工作正常后, RealPlayer 8 的设置方法是:





启动RealPlayer

选择菜单 View -> Perferences -> Transport

选择Auto-Configure, RealPlayer可以自动为你设置为TCP
Only的方式. 也可以手工设置, 去除UDP的方式, 只用TCP的方式.


其他版本的设置方法, 请参照 target=_blank>http://service.real.com/firewall/adminfw.html



QQ的问题


网上有关QQ问题谈得很多, 我使用的是MSN,
因才对QQ不是很了解, 只能做一下简单的分析. 理论上讲, 通过服务器转发或向外发送一般是没有什么问题的, 问题一般出现在无法正常收到对方以UDP方式发送的消息,
该消息无法通过我们的防火墙.
不过这种说法对防火墙来讲不公平, 增加一条规则允许该UDP的包通过非常简单. 问题实际是在NAT上, 我们使用了192.168.0.0/16这样的内部地址. 当QQ向服务器注册时, 实际使用的是Gateway的地址, 但是如果内部有多个人使用QQ,
服务器也会把这些QQ号码连接到这个IP上, 其他用户根据服务器提供的地址从外部发送UDP包到了Gateway,
Gateway就不知道应该把消息转发给谁. 因此这并不是一个简单的允许数据包通过的问题. 与此相同的问题还有netmeeting. 解决的方法, 一是允许用户全部通过服务器转发, 防火墙能够很好地处理这样的问题. 我相信MSN就是这么做的. 但这需要QQ
service provider的合作, 而且对他们的服务器会有更高的要求. 另一种方法是类似ftp client的解决方式, 在Gateway上增加proxy. 我没有QQ的资料, 不能妄下结论.



FTP的问题


FTP协议



这是一个由于FTP协议所造成的问题, 让我们先看一下FTP协议.
FTP一般需要使用两个端口, 端口21只是一个命令端口, 真正传送数据的时候, 还需要另外一个数据端口. 问题就出现在第二个数据端口上.
打开这个数据端口的时候有两种方式, 一种是passive(PASV command)方式, 由FTP Server端提供一个连接的IP/Port, FTP
Client连接到这个IP/Port上进行数据传输. 另一种是active(PORT command)方式, 由FTP Client提供IP/Port,
再由FTP Server回叫至Client提供的地址. 具体采用哪一种方式, 是由FTP
Client决定的, Client通过PASV或PORT命令通知Server采用什么方式. 正是这样的握手方式, 给Server端和Client端都造成了麻烦. 这个问题的具体描述详见
target=_blank>http://www.daemonnews.org/200109/ftpnat.html



FTP Server



Server端一般不希望使用passive方式, 这种方式要求防火墙动态地打开PASV的端口.
而active方式对于Server的防火墙没有什么特殊的要求. 但是FTP
Server是不能选择的, 除非声明不支持passive方式. 一般的解决方法是, 在防火墙上固定地打开一些端口, 如 15001-19999, 每次通信, FTP
Server软件可以从这些端口中选择一个作为PASV的端口通知FTP Client. 如果你的FTP
Server不支持指定passive端口范围, 你应该考虑更换FTP Server了. 这种方式防火墙需要增加规则



pass in quick on tun0 proto tcp from any to 0/32 port 15000>< 20000
flags S keep state keep frags



FTP Client



根据上面的协议规则, 如果FTP Client采用passive方式, 对于防火墙来讲没有什么特殊的要求, 我们可以把问题留给FTP Server.



好消息是,一般的FTP Client软件都支持passive方式, 我使用的网络蚂蚁(netant), 网际快车(FlashGet)默认方式都是passive,
WS_FTP是可以设置的, 这样防火墙就不需要特殊处理了. Unix下需要设置



FTP_PASSIVE_MODE=yes; export FTP_PASSIVE_MODE



坏消息是, 浏览器的FTP使用的是active方式, 而且好像还不能更改. 不过现在直接使用浏览器FTP的人已经是很少了

推荐阅读