FreeBSD下搭建高性能企业级网关3.内网网站的发布
为了安全,管理员一般将Web服务器放到内网中。Internet上的计算机要访问pf后面的Web服务器,就需要我们在pf中进行相应设置。
假设内网Web服务器IP地址为192.168.0.10的工作端口为80。我们可以把pf服务器上的80端口影射到内网的Web服务器的80端口上去。
# 对pf服务器外网IP的80端口的访问转发到内部机器192.168.0.10的80端口
rdr on $ext_if proto tcp from any to $ext_addr port 80 ->192.168.0.10 port 80

4.禁止访问高危端口
作为企业网关,肯定是会受到无聊人的扫描以及***的,另外,冲击波等蠕虫病毒也可以通过网关***。如何防范这些***或者扫描成为pf管理员必须考虑的安全问题。
我们可以定义一些高危端口,然后对这些端口的访问进行特别的限制。
# 定义高危端口
Danger_Port="{445 135 139 593 5554 9995 9996}"
# 禁止内部网络和外部网络的机器访问服务器的135、139等高危端口
block quick on $int_if inet proto tcp from any to any port $Danger_Port
block quick on $ext_if inet proto tcp from any to any port $Danger_Port
在这个规则中我们使用了“from any to any”也就表示了,无论是内部网络还是外部网络,都无法访问这些被定义的端口。有的读者也许会问,为什么连内部也禁止掉了呢?这个问题我们需要解释一 下。大家知道,对于一个企业网关来说,最大的威胁也许不是外部网络,而是内部网络,原因很简单----内部网络的带宽绝对比外部网络好。人人都可以高速 (比如100Mb/s)向服务器发送和接收数据包。要是内部有两个人存心捣蛋的话,那么应该能够比得上外部的几十台计算机。
另外,这样也可以避免“冲击波”等病毒和网关发生任何不正常的关系......这对一个有VLAN的网络来说是尤其重要----在冲击波肆虐的时候,网关 和不同VLAN的计算机可以正常地使用网络,而只有中了冲击波的电脑所在VLAN会比较不正常。这样就可以将损失降低到最低点。

5.防范扫描
同样的,网关肯定是经常会受到很多扫描的,而现在最流行,威力最强大扫描工具之一----nmap(已经有UNIX版和windows 版多种版本了)会是网关的一个非常历害的敌人。我们必须要给nmap来点扫描难度......这样做虽然不能绝对让网关防止被扫描,但是至少可以更大程度 地拒绝nmap这些可怕的扫描工具......
# 禁止使用nmap对服务器进行端口扫描
block log quick on $ext_if inet proto tcp from any to any flags FUP/FUP
block quick on $ext_if inet proto tcp from any to any flags SF/SFRA
block   quick on $ext_if inet proto tcp from any to any flags /SFRA
block quick on $ext_if on NMAP

6.防止IP欺骗
IP欺骗也是一个比较可恶的***手段,特别是对于拥有×××的公司也说,防止IP欺骗非常有必要,我们可以通过以下定义和规则来解决掉一部分IP地址欺骗问题。
# 定义IP欺骗
noroute="{127.0.0.1/8,127.16.0.0/12,10.0.0/8,255.255.255.255/32}"
# 防止IP欺骗
antispoof quick for $int_if inet
block quick on $ext_if inet from $noroute to any
block quick on $ext_if inet from any to $noroute
本单位的服务器经常被很多无聊的人采用字典工具进行***。那么遇到了这样的情况之后,我们肯定是需要对这些IP进行封禁处理的。如何去做呢?通过以下的规则就可以很方便地解决这个问题。您所需要做的就是维护这个“Hack_IPs”地址表。
# 定义而已扫描以及***的IP地址
Hack_IPs="{220.166.11.92/32}"
# 不与恶意扫描、***IP发生任何关系
block quick on $ext_if from $Hack_IPs to any
block quick on $ext_if from any to $Hack_IPs

7.更安全的共享上网
到现在为止,过滤规则已经设置得差不多了,但是还记得我们开始设置的那两条危险的规则“pass in all”和“pass out all”吗?为了安全起见,我们必须要禁止掉这两条规则,然后让内网以安全方式访问Internet。
# 企业级安全网关的做法
# 先阻止所有进入网关/从网关出去的数据
block in all
block out all
# 再逐个开放需要的权限
# 允许回路网络进出网关
pass in quick on lo0 all keep state
pass out quick on lo0 all keep state
# 允许网络内部机器ping任何资源
# 不允许互联网机器ping服务器外部网卡
block in on $ext_if inet proto icmp all icmp-type 8 code 0
pass out on $ext_if inet proto icmp all icmp-type 8 code 0 keep state
pass in quick on $ext_if inet proto icmp all icmp-type 8 code 0
# 允许所有的UDP连接通过网关出去
# keep state
pass out on $ext_if proto udp all keep state
# 允许外部的DNS请求进入本网关,本网关提供DNS服务
pass in on $ext_if proto udp from any to any port=domain keep state
# 允许所有的TCP连接通过本网关出去
# modulate state
pass out on $ext_if proto tcp all modu-late state
# 允许外部访问前边定义的"tcp_services"
# 端口服务并keep state
pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services flags S/SA keep state
# 允许标记的TCP封包通地字根表网关外出
pass out on $ext_if proto tcp all modulate state flags S/SA
# 允许互联网计算机连接本网关的22端口提供给管理员ssh2管理权限
pass in on $ext_if proto tcp from any to $ext_if port 22 keep state
pass in on $int_if proto tcp from any to $int_if port 22 keep state
# 允许内部网络机器访问本网关的内部IP地址的8080端口(Squid代理端口)
pass in on $int_if inet proto tcp from any to $routerip port 8080 keep state
pf链中,每个数据包自上至下接受规则过滤。最后的匹配规则是“一家之主”----他说了算!不过quick关键字可以取消进一步往下处理。如果你希望阻止掉某个访问,就不要这样写:
block in on fxp0 proto tcp from any to any port ssh
pass in all
因为最后一行会允许所有的流量通过。应该修改成:
block in quick on fxp0 proto tcp from any to any port ssh
pass in all
到这里pf的常用规则应该都介绍完了。通过这些规则的组合,你一定能够写出适合自己企业使用的pf配置文件。
转自:http://blog.chinaunix.net/u1/55161/showart_1075657.html