iptables不能做跨网段防火墙 ? 版主和牛人进来!其实我也是牛人,但我确实解决不了

wanyinpin
iptables不能做跨网段防火墙 ? 版主和牛人进来!其实我也是牛人,但我确实解决不了

网络拓扑结构如下附件图片:

1,当防火墙直接与10.10.0.0网段相连时,(不通过思科路由器时)工作得很好,很顺利

2,当防火墙连接思科路由器时(如图片所示的拓扑),防火墙里面的规则根本不起作用,原先做的IP地址规则和端口规则都不起作用,它好像会一直往下匹配,直到遇到全部DROP规则,或是全部ACCEPT规则,如果没有遇到,就一直匹配到默认规则.     这是什么原因?

附上我的规则, 其中的“-m set  --set XXX-ip scr " 这是用了ipset模块定义了的地址集




# Generated by iptables-save v1.4.0 on Sat Jun  7 17:32:28 2008
*nat
:PREROUTING ACCEPT [837:78490]
:POSTROUTING ACCEPT [32:2166]
:OUTPUT ACCEPT [20:1422]
-A POSTROUTING -s 10.10.0.0/16 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.10.0/24  -o ppp0 -j MASQUERADE
COMMIT
# Completed on Sat Jun  7 17:32:28 2008
# Generated by iptables-save v1.4.0 on Sat Jun  7 17:32:28 2008
*mangle
:PREROUTING ACCEPT [2291:165195]
:INPUT ACCEPT [582:54266]
:FORWARD ACCEPT [1389:73410]
:OUTPUT ACCEPT [358:33764]
:POSTROUTING ACCEPT [541:43096]
COMMIT
# Completed on Sat Jun  7 17:32:28 2008
# Generated by iptables-save v1.4.0 on Sat Jun  7 17:32:28 2008
*filter
:INPUT DROP [133:15583]
:FORWARD DROP [0:0]            
:OUTPUT ACCEPT [358:33764]
:A-search-http - [0:0]
:IC-vendor-http - [0:0]
:allow-http - [0:0]
:bank-http - [0:0]
:china-mobile-http - [0:0]
:city-http - [0:0]
:customers-http - [0:0]
:deny-qq - [0:0]
:eng-http - [0:0]
:gov-http - [0:0]
:job-http - [0:0]
:trade-http - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -d 224.0.0.251/32 -p udp -m state --state NEW -m udp --dport 5353 -j ACCEPT
-A INPUT -p ah -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 2049 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m udp --dport 177 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 6000:6010 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 3128 -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A FORWARD -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A FORWARD -s 10.10.0.0/16 -p tcp -m multiport --dports 25,110,53,143 -j ACCEPT
-A FORWARD -s 192.168.10.0/24 -j ACCEPT
-A FORWARD -s 10.10.0.0/16 -j A-search-http
-A FORWARD -m set --set allow-all src -j ACCEPT
-A FORWARD -m set --set allow-ip src -j deny-qq
-A FORWARD -m set --set part-ip src -j allow-http
-A FORWARD -m set --set gov-ip src -j gov-http
-A FORWARD -m set --set IC-vendor src -j IC-vendor-http
-A FORWARD -m set --set china-mobile src -j china-mobile-http
-A FORWARD -m set --set eng-ip src -j eng-http
-A FORWARD -m set --set customers-ip src -j customers-http
-A FORWARD -m set --set trade-ip src -j trade-http
-A FORWARD -m set --set bank-ip src -j bank-http
-A FORWARD -m set --set city-ip src -j city-http
-A FORWARD -m set --set job-ip src -j job-http
                                                                                #上面的规则形同虚设,点解啊!!

-A FORWARD -j ACCEPT                                            #只有这个规则和默认规则起作用,如果这里是DROP,则没人能上网,
-A OUTPUT -p tcp -m tcp --dport 6000:6010 -j ACCEPT
-A A-search-http -d 121.14.89.14/32 -j ACCEPT
-A A-search-http -d 121.14.88.14/32 -j ACCEPT
-A A-search-http -d 64.233.189.99/32 -j ACCEPT
-A A-search-http -d 64.233.189.104/32 -j ACCEPT
-A A-search-http -d 203.208.37.99/32 -j ACCEPT
-A A-search-http -d 203.208.37.104/32 -j ACCEPT
-A A-search-http -d 220.181.37.202/32 -j ACCEPT
-A A-search-http -d 220.181.37.152/32 -j ACCEPT
-A A-search-http -d 220.181.38.78/32 -j ACCEPT
-A A-search-http -d 64.233.189.104/32 -j ACCEPT
-A A-search-http -d 64.233.189.99/32 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m udp --dport 177 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 6000:6010 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 3128 -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A FORWARD -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A FORWARD -s 10.10.0.0/16 -p tcp -m multiport --dports 25,110,53,143 -j ACCEPT
-A FORWARD -s 192.168.10.0/24 -j ACCEPT
-A FORWARD -s 10.10.0.0/16 -j A-search-http
-A FORWARD -m set --set allow-all src -j ACCEPT
-A FORWARD -m set --set allow-ip src -j deny-qq
-A FORWARD -m set --set part-ip src -j allow-http
-A FORWARD -m set --set gov-ip src -j gov-http
-A FORWARD -m set --set IC-vendor src -j IC-vendor-http
-A FORWARD -m set --set china-mobile src -j china-mobile-http
-A FORWARD -m set --set eng-ip src -j eng-http
-A FORWARD -m set --set customers-ip src -j customers-http
-A FORWARD -m set --set trade-ip src -j trade-http
-A FORWARD -m set --set bank-ip src -j bank-http
-A FORWARD -m set --set city-ip src -j city-http
-A FORWARD -m set --set job-ip src -j job-http
-A FORWARD -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 6000:6010 -j ACCEPT
-A A-search-http -d 121.14.89.14/32 -j ACCEPT
-A A-search-http -d 121.14.88.14/32 -j ACCEPT
-A A-search-http -d 64.233.189.99/32 -j ACCEPT
-A A-search-http -d 64.233.189.104/32 -j ACCEPT
-A A-search-http -d 203.208.37.99/32 -j ACCEPT
-A A-search-http -d 203.208.37.104/32 -j ACCEPT
-A A-search-http -d 220.181.37.202/32 -j ACCEPT
-A A-search-http -d 220.181.37.152/32 -j ACCEPT
-A A-search-http -d 220.181.38.78/32 -j ACCEPT
-A A-search-http -d 64.233.189.104/32 -j ACCEPT
-A A-search-http -d 64.233.189.99/32 -j ACCEPT

[[i] 本帖最后由 wanyinpin 于 2008-6-12 17:34 编辑 [/i]]

wanyinpin
没人回答?就连个提问的人都没有,真晕

platinum
如果一个 rule 后面没有 target,则仅仅是匹配而已,无论是否匹配到了,下一步的动作是 CONTINUE

wanyinpin
-A FORWARD -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A FORWARD -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A FORWARD -s 10.10.0.0/16 -p tcp -m multiport --dports 25,110,53,143 -j ACCEPT

这规则应该是打开了端口了吧?而且也是ACCEPT了,那它应该不会往下再匹配了吧,但是,用outlook收发邮件却不行,

-A FORWARD -m set --set allow-all src -j ACCEPT  这条是属于不限制上网的IP集,我的IP已经加到了allow-all集里面,它却再往下匹配,遇到了最后的默认DROP,就被丢弃了,按道理,它应该会跳出FORWARD链,到mangale和nat链里面去。  但当我在同网段实验的时候,它可以按照我的规则工作得很好,但接上思科路由器改了网段之后,就出现了这个问题, 以前用ISA2006的时候不会存在这样的问题, 难道是iptables跨网段读不出源地址来吗??

platinum
你只匹配了 NEW 包,其他后续数据包呢?
至于你说的 -A FORWARD -m set --set allow-all src -j ACCEPT 有问题,我认为和 dst 有关,你只允许从 IPs 出去的包,回来的呢?

wanyinpin
[quote]原帖由 [i]platinum[/i] 于 2008-6-12 17:33 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6611730&ptid=1010534][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]
你只匹配了 NEW 包,其他后续数据包呢?
至于你说的 -A FORWARD -m set --set allow-all src -j ACCEPT 有问题,我认为和 dst 有关,你只允许从 IPs 出去的包,回来的呢? [/quote]


INPUT的包我们不讨论,因为INPUT的规则能正常工作,

FORWARD的包不能正常工作

wanyinpin
[quote]原帖由 [i]platinum[/i] 于 2008-6-12 17:33 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6611730&ptid=1010534][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]
你只匹配了 NEW 包,其他后续数据包呢?
至于你说的 -A FORWARD -m set --set allow-all src -j ACCEPT 有问题,我认为和 dst 有关,你只允许从 IPs 出去的包,回来的呢? [/quote]


回来的包?  我没有注意这个细节, 回来的包需要手工来配置来跨过我的思科路由器? 如果内网10.10.0.222访问163网站, 它经过了网关:10.10.0.254(思科路由器),再被思科路由到1923.168.10.1 , 再邮iptables转发,经过ppp0e,再SNAT,之后再发出去,

你说要回来的包,那它怎么跨过我的思科路由器回来?

wanyinpin
[quote]原帖由 [i]platinum[/i] 于 2008-6-12 17:33 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6611730&ptid=1010534][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]
你只匹配了 NEW 包,其他后续数据包呢?
至于你说的 -A FORWARD -m set --set allow-all src -j ACCEPT 有问题,我认为和 dst 有关,你只允许从 IPs 出去的包,回来的呢? [/quote]



回来的包,当我的默认规则是ACCEPT时, 都可以上网, 很正常,没有问题   这应该能说明回来的包没有问题

skylove
先tcpdump 抓报文 看看?

platinum
[quote]原帖由 [i]wanyinpin[/i] 于 2008-6-12 17:37 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6611738&ptid=1010534][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]



INPUT的包我们不讨论,因为INPUT的规则能正常工作,

FORWARD的包不能正常工作 [/quote]
并没有和你讨论 INPUT 链的问题啊

另外,贴一下 iptables-save -c 的结果

还有,加一条 iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 试试
你的 FORWARD 链默认策略是 DROP,而后又有一句 -j ACCEPT,大可不必

[[i] 本帖最后由 platinum 于 2008-6-12 18:45 编辑 [/i]]

donetx
应该是在linux上没回来的路由

ip route add 10.10.0.0/16 via 192.168.10.2 dev ethx

btw:你凭什么判断你基因突变了?你多少染色体跟牛相似?哈哈

[[i] 本帖最后由 donetx 于 2008-6-12 19:39 编辑 [/i]]