Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15261170
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: BSD

2008-04-06 18:54:59

是 FreeBSD 内建的指令,我们可以用它来管理进出的网络交通。如果防火墙是扮演着路由器 (gateway 例如上一篇中的 NAT 服务器) 的角色,则进出的封包会被 ipfw 处理二次,而如果防火墙扮演的是桥接器 (bridge) 的角色,则封包只会被处理一次。这个观念关系着我们以下所要介绍的语法,有的语法并不适用于桥接器。

另外,我们在设定防火墙时有二种模式,一种模式是预设拒绝所有联机,再一条一条加入允许的联机;另一种是预设接受所有联机,加入几条拒绝的规则。如果是非常强调性,应该是使用预设拒绝所有联机,再一条一条加入我们允许的规则。

我们会将 firewall 的设定写在 /etc/rc.firewall 中,每一条设定都是以先入为主 (first match wins) 的方式来呈现,也就是先符合的规则 (rules) 为优先。所有进出的封包都会被这些规则过滤,因此我们会尽量减少规则的数量,以加速处理的速度。

在 中,关于防火墙的设定有下列几条:

# 防火墙
options IPFIREWALL

# 支援 NAT
options IPDIVERT

# 下面这一行是预设允许所有封包通过,如果没有这一行,
# 就必须在 /etc/rc.firewall 中设定封包的规则。
# 这条规则内定编号是 65535,也就是所有规则的最后一条
# 如果没有加这一条规则,内定就是拒绝所有封包,
# 只允许规则中允许的封包通过。
options IPFIREWALL_DEFAULT_TO_ACCEPT

# 这一行是让你可以在 ipfw 中设定要记录哪些封包,
# 如果没有这一行,就算设定了要留下记录也不会有作用。
options IPFIREWALL_VERBOSE

# 这一行是限制每一条规则所要记录的封包数量,
# 因为同样的规则可能有许多记录,加上这一条可以使
# 同样的记录重复数减少,以避免记录文件爆增。
options IPFIREWALL_VERBOSE_LIMIT=10

# 下面这一行是用来支援封包转向,
# 当你要使用 fwd 动作时必须要有这一项设定。
options IPFIREWALL_FORWARD

# 如果要使用 pipe 来限制频宽,必须加入下列选项以支持 dummynet。
options DUMMYNET


ipfw 也支持状态维持 (keep-state) 的功能,就是可以让符合设定的规则以动态的方式来分配增加规则 (地址或连接端口) 来让封包通过。也就是说防火墙可以记住一个外流的封包所使用的地址及连接端口,并在接下来的几分钟内允许外界响应。这种动态分配的规则有时间的限制,一段时间内会检查联机状态,并清除记录。

所有的规则都有计数器记录封包的数量、位数、记录的数量及时间等。而这些记录可以用 ipfw 指令来显示或清除。

在说明 ipfw 规则的语法之前,我们先来看这个指令的用法。ipfw 可以使用参数:

指令 说明
ipfw add [rule] 新增一条规则。规则 (rule) 的语法请参考下一节的说明。
ipfw delete [number] 删除一条编号为 number 的规则。
ipfw -f flush 清除所有的规则。
ipfw zero 将计数统计归零。
ipfw list 列出现在所有规则,可以配合下列参数使用。
-a 使用 list 时,可以列出封包统计的数目。
-f 不要提出确认的询问。
-q 当新增 (add)、归零(zero)、或清除 (flush) 时,不要列出任何回应。当使用远程登入,以 script (如 sh /etc/rc.firewall) 来修改防火墙规则时,内定会列出你修改的规则。但是当下了 flush 之后,会立即关掉所有联机,这时候响应的讯息无法传达终端机,而规则也将不被继续执行。此时唯一的方法就是回到该计算机前重新执行了。在修改防火墙规则时,最好在计算机前修改,以免因为一个小错误而使网络联机中断。
-t 当使用 list 时,列出最后一个符合的时间。
-N 在输出时尝试解析 IP 地址及服务的名称。
-s [field] 当列出规则时,依哪一个计数器 (封包的数量、位数、记录的数量及时间) 来排序。

12.3.1 ipfw 规则

我们在过滤封包时,可以依据下列的几个封包所包含的信息来处理该封包:

接收或传送的接口,可以使用接口名称或地址。
方向,流入或流出。
来源或目的地的 IP 地址,也可以加上子网掩码。
通讯协议,TCP,UDP,ICMP 等。
TCP flags。
IP fragment flag。
IP options。
ICMP 的类型。
和封包相关的 socket User/group ID。
使用 IP 地址或 TCP/UDP 的端口号来做为规则可能蛮危险的,因为这二种都有可能被以假的信息所蒙骗 (spoof)。但是这二种却也是最常被使用的方法。
阅读(827) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~