kelvenchi 发表于 2013-01-11 14:39

配置了IPFW,內網用戶可以訪問內部web服務器,但是不能瀏覽外部網站。真心求教

本帖最后由 kelvenchi 于 2013-01-11 14:40 编辑

內網的IP網段為 172.16.1.0/24 這台ipfw防火牆的地址 172.16.1.6為什麼內網用戶不能訪問外網呢?
IPFW 規則如下:#!/bin/sh

good_tcpo="21,22,25,37,43,53,80,443,110,119,143,443,993,995,5431"

ipfw -f flush

ipfw add 002 allow all from any to any via em1# exclude LAN traffic
ipfw add 003 allow all from any to any via lo0# exclude loopback traffic

ipfw add 100 divert natd ip from any to any in via em0

ipfw add 101 check-state

# Authorized outbound packets
ipfw add 120 skipto 500 udp from any to 202.103.44.150 53 out via em0 keep-state
ipfw add 125 skipto 500 tcp from any to any $good_tcpo out via em0 setup keep-state
ipfw add 126 skipto 500 udp from any to any 8000 out via em0 keep-state
ipfw add 130 skipto 500 icmp from any to any out via em0 keep-state


# Deny all inbound traffic from non-routable reserved address spaces
ipfw add 300 deny all from 192.168.0.0/16to any in via em0
#ipfw add 301 deny all from 172.16.1.0/24   to any in via em0
ipfw add 302 deny all from 10.0.0.0/8      to any in via em0
ipfw add 303 deny all from 127.0.0.0/8   to any in via em0
ipfw add 304 deny all from 0.0.0.0/8       to any in via em0
ipfw add 305 deny all from 169.254.0.0/16to any in via em0
ipfw add 306 deny all from 192.0.2.0/24    to any in via em0
ipfw add 307 deny all from 204.152.64.0/23 to any in via em0
ipfw add 308 deny all from 224.0.0.0/3   to any in via em0

# Authorized inbound packets
ipfw add 410 allow tcp from any to me 8001 in via em0 setup limit src-addr 2
ipfw add 420 allow tcp from any to me 8002 in via em0 setup limit src-addr 2
ipfw add 430 allow tcp from any to me 5431 in via em0 setup limit src-addr 2
ipfw add 440 allow tcp from any to me 21   in via em0 keep-state
ipfw add 450 allow tcp from me 20,21 to any out via em0 keep-state

# Deny the other ips or nets
ipfw add 470 deny log ip from any to any

# This is skipto location for outbound stateful rules
ipfw add 500 divert natd ip from any to any out via em0
ipfw add 510 allow ip from any to any

######################## end of rules##################

lsstarboy 发表于 2013-01-11 16:21

你先精减规则看看,把101-470之间的规则去掉,尽量减少干扰因素。
再把keep-state放到500规则试试。

lsstarboy 发表于 2013-01-11 16:27

另外:开gateway了没有?
net.inet.ip.forwarding=1

kelvenchi 发表于 2013-01-12 12:07

謝謝版主,問題解決了。問題是這樣的,我允許了從我定義的端口向外發出的包,但是沒有允許從外部網站返回的包。所以這樣導致了內網用戶不能上網的。

又有個新問題了:我從外網訪問內網的服務器,不能訪問。但是從內網訪問內網的服務器(直接用IP訪問)就可以。版主在幫我看看好麼?

kelvenchi 发表于 2013-01-12 13:18

問題已解決。

spluto 发表于 2013-01-20 19:21

楼主写个简单的思路啊,我现在遇到了相同的问题:'(

lsstarboy 发表于 2013-01-20 21:07

用ipfw建议:
1、要记住数据都是双向的,不仅要考虑出,还要考虑入。做nat,需要考虑两个网卡共4个方向上的数据走向。
2、ipfw有两种nat,现种是natd,一种是nat,如果考虑做端口映射,并且局域网机器数不多的话,可以考虑用natd,功能更强一些。
3、写规则最好从简单再到复杂,最起初就是简单全部放行,deny后来慢慢加。

kelvenchi 发表于 2013-01-21 20:39

本帖最后由 kelvenchi 于 2013-01-21 20:47 编辑

我的思路其实蛮简单的,就是控制整个172.16.1.0/24这个网络允许内网用户访问外网的部分服务例如,80端口的web服务等等。最开始我允许内网之间的数据顺利通过,允许本机的loopback数据通过。然后对进入防火墙的数据包进行nat地址转换,把公网的IP转换成内网的IP(IFW 中 divert natd 动作之后会继续搜索) 然后检查动态保持表中是否已经存在这个对这个数据包处理的规则。如果没有,数据包会继续往下匹配规则。发出的包写在最前面,并且setup keep-state,并且在发出之前用nat进行地址转换,把内网IP转换成公网IP。中间禁止你不需要的网段。最后写允许进入内网的数据包的规则,也同样keep state。其实思路蛮简单的。

kelvenchi 发表于 2013-01-21 20:42

回复 7# lsstarboy


    感谢板主的细心回答,小弟受教了。
页: [1]
查看完整版本: 配置了IPFW,內網用戶可以訪問內部web服務器,但是不能瀏覽外部網站。真心求教