免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2901 | 回复: 5
打印 上一主题 下一主题

[OpenBSD] 怎么设置openbsd成为网关? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-06 17:27 |只看该作者 |倒序浏览
怎么设置openbsd成为网关?

论坛徽章:
0
2 [报告]
发表于 2008-08-06 17:34 |只看该作者
摘的别人的文章,也许有帮助哈

原有的网络情况是:用ADSL Modem的内部功能实现 pppoe和nat,这样内部员工就可以通过ADSL Modem作为网关访问互联网。
但是,随着员工数量的增多,同时造成访问互联网拥挤,有时甚至耽误正常的工作需要。
为了解决这个情况,决定对内部员工访问互联网加以限制。
我用一台淘汰的电脑(PIII 500  64M内存),装了一个OpenBSD 3.6系统,利用自身的PF进行管理。
两块网卡,一块连接Modem 另一快连接内部网络
主要想实现:
1。对内部员工上网限制,只有允许的IP才可以上网。
2。对上网的员工进行分组,分成2组。1组只能浏览网页,另一组没有限制。
3。对不同组进行带宽分配
到现在为止只实现了第一个目的,如果谁能提供帮助请于我联系:QQ:845243    MSN:SlackwareLinux@hotmail.com
以下是我的配置文件


#       $OpenBSD: pf.conf,v 1.28 2004/04/29 21:03:09 frantzen Exp $
#
# See pf.conf(5) and /usr/share/pf for syntax and examples.
# Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1
# in /etc/sysctl.conf if packets are to be forwarded between interfaces.

ext_if="rl1"
int_if="rl0"
lan_net="192.3.88.0/24"
Admin="192.3.88.15"
server="{53 80}"

# --- Define Table
table <leader> persist file "/etc/leader_user"
table <software> persist file "/etc/software_user"
table <message> persist file "/etc/message.block"
table <other> persist file "/etc/other.block"

# --- Option
set block-policy drop
set loginterface $ext_if
scrub in all

# --- Queue
altq on $ext_if cbq bandwidth 2Mb queue {other, Admin}
queue other bandwidth 1Mb cbq(default)
queue Admin bandwidth 1Mb priority 3 cbq(borrow)

# --- NAT
#nat on $ext_if from !($ext_if) -> ($ext_if:0)
nat on $ext_if from $Admin  -> ($ext_if:0)
nat on $ext_if from <software> -> ($ext_if:0)
nat on $ext_if from <leader> -> ($ext_if:0)

# --- Redirection
rdr on $ext_if proto tcp from any to $ext_if port 22 -> 192.3.88.3 port 22
rdr on $int_if proto tcp from $Admin to $int_if port 8888  -> 192.168.42.1 port 8888
rdr on $int_if proto tcp from $Admin to any port 21  -> 127.0.0.1 port 8021

# --- Block All
block in  on $ext_if from $lan_net to any
block out on $ext_if from any to $lan_net
#block on $ext_if all

pass quick on lo0 all
pass out on $ext_if inet proto { tcp udp } from any to any port domain keep state

# ---- Manager SSH
block  in  on $int_if  proto tcp  from $lan_net to $int_if port 22
pass   in  on $int_if  proto tcp  from $Admin   to $int_if port 22 keep state

# --- Pass Administrator
pass out on  $ext_if from $Admin to any keep state queue Admin

# --- Pass Table<leader>
pass out on  $ext_if proto tcp from <leader> to any port 80 keep state queue other
block out on $ext_if from <leader> to <message>
block out on $ext_if from <leader> to <other>
block in  on $int_if from <leader> to <message>
block in  on $int_if from <leader> to <other>

# --- Pass Table<software>
pass out on  $ext_if from <software> to any keep state queue Admin





/sys/freebsd/2008-01-27/418182.html

论坛徽章:
0
3 [报告]
发表于 2008-08-06 17:35 |只看该作者
一、功能:1、状态检测包过滤(packet filtering)。2、地址转换(NAT)。3、负载均衡(load alancing)。4、保护敏感信息。5、服务质量保证(QoS). (我在这里只是简单的说明一些功能,具体的应用,我将在以后的具体实例中说明)

二、在OPENBSD2.9以前,默认的GENERIC内核里面已经包还了ipfilter,这个要看你的内核配置文件里面是不是有OPTIONS IPFILTER 和
OPTIONS IPFILTER_LOG选项,至于ipfilter的使用,在这里就不再详细说明,有兴趣的朋友可以参考FREEBSD的ipfilter的使用方法。在3.0以后,因为某些这里不再说明的原因,内核中去除了对ipfilter的支持,使用pf来代替他。如果你要使用pf,应该确保你的内核配置文件里面有如下选项:pseudo-device pf 1 和 pseudo-device pflog 1。在我们现在的版本OPENBSD3.5里面,默认是已经配置了pf的选项。

三、如果要在开机的情况下就启动pf的功能,那么需要修改你的rc.conf文件,包含以下几个内容:
pf=YES,pf_rules=/etc/pf.conf,pflogd_flags= 。
如果你的系统已经启动,而在这个时候,你要开启pf的功能,可以使用#pfctl -e命令来开启,以及#pfctl -d来关闭。并且可以使用#pfctl -e -f /etc/pf.conf来直接开启pf功能并且启动过滤,地址翻译等规则文件。
两外,你需要更改你的sysctl变量:sysctl -w net.inet.ip.forwarding=1 。

四、下面,我们主要来看pf.conf这个主要配置文件的格式以及解释,这个文件可以分为5个部分:1、宏定义部分。2、各个选项。3、scrub。4、地址转换。5、过滤规则。就如同下面的格式划分:
###################################################################################
# macro definitions
###################################################################################
# options: "set"
###################################################################################
# scrub rules: "scrub"
###################################################################################
# NAT rules: "rdr", "nat", "binat"
###################################################################################
# filtering rules: "antispoof", "block", "pass"
###################################################################################
1、对于宏定义部分,大家顾名思义就可以知道,就是定义几个有意义的变量,比如你的服务器ip ,你的内网的各个ip地址段,你的各个网卡所处的位置等。下面举出几个例子:
ser_ip = "192.168.0.1" ##定义了服务器的ip地址
ext_if = "dc0" ##定义了外网卡设备
…………等等。
然后,在下面的各个规则文件就可以直接引用,而不用每次都需要输入一堆的文字。这里就不多说了。需要注意的是,你要引用这里定义的宏,那么需要在变量前面加上“$”符号来表示。
2、下面看一下各个有用的选项,主要包含以下几个关键词:limit , loginterface , optimization , timeout。
在这里有一个技巧,如果你只是更改了options部分的设置,你可以使用#pfctl -f /etc/pf.conf -O仅仅调入options部分的设置,其

他的部分不刷新。这样就不会造成网络的中断。
limit有两个可以设置的量:frags和states后面跟数值。设置一些内存缓冲的规定。1、frags的含义是:可以保存数据包碎片的个数,数据包碎片会保存在内存中,直到最终超出范围或者重组应用scrub规则。2、states是状态表可以保存的最到的条目数量。这个和下面的规则里面包含的keep state有关。
下面举一个例子:
set limit frags 30000 ##可以保存30000个数据包碎片。
set limit states 25000 ##可以保存的状态表的条目数量为25000条。
另外的一种格式为:set limit ( frags 3000, states 25000)
可以使用:#pfctl -s memory命令来查看limits的设置。在3.3以前的版本,修改了limits的设置,你需要重新引导机器才能使其起总用,现在使我们高兴的是3.5版本不需要重新引导就可以修改。
loginterface的含义是统计一个网卡经过的数据包的各项数据,比如进入的,发出的,通过的,阻断的等等信息。格式例子为:
set loginterface $ext_if ##这里引用了上面的宏定义,统计外网卡的数据包各项数据。
可以使用:#pfctl -s info命令来查看统计信息。
optimization是一个优化选项,主要是对连接的超时情况,主要有以下几种(options):
default: 是一个默认的优化选项。
normal: 同上
high-latency: 长连接选项,设置超时时间较长。一般使用在银行系统或者其他卫星系统连接。
satellite: 同上。
aggressive: 定义了比较实时的连接,如果不活跃,就断开。
conservative: 和上面的意思一样,就跟我们拨号上网不活动就断开的意思一样。这个是对一个tcp连接来说的。
optimization options
timeout更加仔细的定义了一些协议的超时情况,不过仅仅对于下面的filter rules中含有keep state的规则起作用。主要的变量有以

下几个(options):tcp.first ,tcp.opening ,tcp.established ,tcp.closing ,tcp.finwait ,tcp.closed ,udp.first ,udp.single

,udp.multiple ,icmp.first ,icmp.error ,other.first ,other.single ,other.multiple ,frag ,interval。
格式如下:set timeout options time
3、然后介绍scrub规则,这个规则的作用是过滤一些不规则的数据包,这些数据包可能会引起系统的不正常或者是其他程序的错误,

主要还是抵御攻击,一般我们会在所有的interface上面都做上数据包的scrub规则,一般如下:
scrub in all 或者仅仅在你的外网卡做过滤:scrub in on $ext_if all
两外,scrub规则还有更改修复部分数据包的功能,这个暂时我还没有用到,以后再说这一部分。
4、NAT rules,应该知道NAT是干什么用的,我们可以使用命令:#pfctl -f /etc/pf.conf -N 来仅仅调入NAT部分的规则信息,使用

:#pfctl -s nat 来查看NAT的状态,使用:#pfctl -F nat 来刷新规则。下面就具体看一下他的规则格式以及解释,实际应用,我们将再以后

说到:
nat on (if_name) proto (proto_name) from (ip_addreee) to any -> (ip_address)
binat on (if_name) proto tcp from (ip_address) to any -> (ip_address)
rdr on (if_name) proto (proto_name) from any to (ip_addreee) port 80 -> (ip_address) port 8080
我们以一个例子来说明:
###################################################################################
# macro definitions
ext_if = "dc0"
ext_ad = "202.202.202.202/32"
ext_ad_1 = "202.202.202.203/32"
dmz_ad="10.10.0.1/32"
ont_ip="10.10.0.2/32"
prv_ads = "{ 192.168.0.0/24, 172.16.0.0/24 }"
nat_p = "{tcp, udp, icmp}"
###################################################################################
# NAT rules: "rdr", "nat", "binat"
nat on $ext_if proto $nat_p from $prv_ads to any -> $ext_ad
#就是当内网ip发起对外的请求时(所有的协议)转换内网的地址为外网卡的地址,
binat on $ext_if proto tcp from $ext_ad_1 to any -> $one_ip
#将外网口的一个ip地址与DMZ区域的一个ip地址互相对应。
rdr on $ext_if proto tcp from any to $ext_ad port 80 -> $dmz_ad port 8080
#将所有的向外网口的http请求转换到DMZ区域的$dmz_ad机器的8080端口。
###################################################################################
5、ipfilter rules,过滤规则,其实也就是一个访问规则列表,上面的NAT规则可以说是一个通讯规则列表。具体的格式可以参照下面

的列表具体的应用,我们将在以后提到。
###################################################################################
过滤动作
pass, 允许
block, 阻塞
选项
log,记录日志
quick,快速匹配规则列表
方向
in, 进来的
out, 出去的
协议
proto, 包括:
tcp, TCP 协议
udp, UDP 协议
icmp, ICMP 协议
[number], 指定其他的IP协议号
[空], 所有协议
源地址
from [addr], 指定一个IPv4地址
from [subnet/mask],指定一个网络
源端口(仅限TCP/UDP协议)
port [表达式] [端口号]
表达式包括:
=
>=
>
<=
<
>< 端口范围
目标地址
to [addr], 指定一个IPv4地址
to [subnet/mask],指定一个网络
目标端口(仅限TCP/UDP协议)
port [表达式] [端口号]
表达式包括:
=
>=
>
<=
<
>< 端口范围
ICMP类型和代码
icmp-type [type]
icmp-code [code]
TCP连接建立
keep state, 建立状态列表,阻塞只有SYN标志位而没有ACK标志位的TCP包,放在规则末尾表示
只允许连接建立后的TCP包通过。
###################################################################################

openbsd pf配置
#2852 - 03/15/05 01:37 AM Edit Reply Quote



公司利用一台openbsd 3.6 作为网关上网 要求:
1。通过地址限制谁可以上互联网
2。能够上网的人员分为2组
3。leader组只能浏览网页
4。software不受限制
5。带宽分配 leader组 1M software组 1M ,software组优先占用带宽
这是我的配置文件, 好像有问题 ,leader组总是能上qq,请各位大侠帮忙!!
# $OpenBSD: pf.conf,v 1.28 2004/04/29 21:03:09 frantzen Exp $
#
# See pf.conf(5) and /usr/share/pf for syntax and examples.
# Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1
# in /etc/sysctl.conf if packets are to be forwarded between interfaces.

ext_if="rl1"
int_if="rl0"
lan_net="192.3.88.3/24"
Admin="192.3.88.15"
server="{53 80}"

# --- Define Table
table persist file "/etc/leader_user"
table persist file "/etc/software_user"

# --- Option
set block-policy drop
set loginterface $ext_if
scrub in all

# --- Queue
altq on $ext_if cbq bandwidth 2Mb queue {other, Admin}
queue other bandwidth 1Mb cbq(default)
queue Admin bandwidth 1Mb priority 3 cbq(borrow)

# --- NAT
#nat on $ext_if from !($ext_if) -> ($ext_if:0)
nat on $ext_if from $Admin -> ($ext_if:0)
nat on $ext_if from -> ($ext_if:0)
nat on $ext_if from -> ($ext_if:0)

# --- Redirection
rdr on $ext_if proto tcp from any to $ext_if port 22 -> 192.3.88.3 port 22
rdr on $int_if proto tcp from $Admin to $int_if port 8888 -> 192.168.42.1 port 8888
rdr on $int_if proto tcp from $Admin to any port 21 -> 127.0.0.1 port 8021

# --- Block All
block in on $ext_if from $lan_net to any
block out on $ext_if from any to $lan_net
#block on $ext_if all

pass quick on lo0 all
pass out on $ext_if inet proto { tcp udp } from any to any port domain keep state

# ---- Manager SSH
block in on $int_if proto tcp from $lan_net to $int_if port 22
pass in on $int_if proto tcp from $Admin to $int_if port 22 keep state

# --- Pass Administrator
pass out on $ext_if from $Admin to any keep state queue Admin

# --- Pass Table
pass out on $ext_if proto tcp from to any port 80 keep state queue other

# --- Pass Table
pass out on $ext_if from to any keep state queue Admin

论坛徽章:
0
4 [报告]
发表于 2008-08-06 18:17 |只看该作者
我有固定ip  该怎么设置???

论坛徽章:
0
5 [报告]
发表于 2008-08-06 18:31 |只看该作者
nat就先打开nat 不是nat就直接设置两个网卡的公网ip 然后设置转发和pf规则

论坛徽章:
0
6 [报告]
发表于 2008-08-06 19:20 |只看该作者
还没freebsd简单,一条语句搞定。openbsd里有没有这样的语句?????
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP