|
发表于 2009-8-18 20:19:46
|
显示全部楼层
楼主你的设置有问题。
控制能否访问外部服务是最好设置在OUTPUT链上,这样从逻辑上比较容易理解。
INPUT链一般是用来控制别人访问你本机的服务的,让它人无法访问你其它端口。
所以,你应该在OUTPUT链路设置 访问外部DPORT 8000的可以放行,不过这样的话比较麻烦,默认设置为DROP的话,还需要放行外部80端口等一些常用端口的访问。
每次访问外部你的用户进程都会启动一个随机的端口,去和外部服务器建立链接,当外部服务器给你的用户进程发来数据包,目标地址都是一个随机地址,你没法把随机地址一个个的加上去,所以需要加上一句。
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
这样的话,iptable会自动去看哪些端口是去和外部服务器建立链接的,并且放行。
通过以下命令,就能看到进程启用的哪个端口去访问外部端口,你可以多启动几次QQ去查看是否是一个随机端口。
$ netstat -anp | grep qq
tcp 0 0 0.0.0.0:33060 0.0.0.0:* LISTEN 5843/qq
tcp 0 0 127.0.0.1:33060 127.0.0.1:45857 ESTABLISHED 5843/qq
tcp 0 0 127.0.0.1:45857 127.0.0.1:33060 ESTABLISHED 5843/qq
udp 0 0 192.168.2.127:6563 58.60.14.44:8000 ESTABLISHED 5843/qq |
|