http://www.freebsdchina.org/forum/topic_24641.html
防火墙技术:
PF:OpenBSD数据包过滤
张文通 翻译 唐 亮
本文版权与原文英文版保持完全一致,鉴于译者水平有限,错误之处难免,请读者自己认真鉴别。
------------------------------------------------------------------------------
目录
* 基本配置
+ 开始
+ 列表和宏
+ 表
+ 包过滤
+ 网络地址转换
+ 流量重定向 (端口转发)
+ 规则生成捷径
* 高级配置
+ 运行选项
+ 流量整形 (数据包标准化)
+ 锚定和命名(子)规则集
+ 队列和优先级
+ 地址池和负载均衡
+ 数据包标记
* 附加主题
+ 日志
+ 性能
+ 研究 FTP
+ pf验证: 用Shell 进行网关验证
* 实例规则集
+ 实例: 家庭和小办公室防火墙
------------------------------------------------------------------------------
包过滤 (以下简称 PF) 是OpenBSD 系统上进行TCP/IP流量过滤和网络地址转换的软件系统。 PF 同样也能提供TCP/IP流量的整形和控制,并且提供带宽控制和数据包优先集控制。PF自openbsd 3.0以后作为内核的默认安装配置。以前版本的openbsd发行版使用一个不同的防火墙/NAT软件包,现在已经不再被支持。
PF 最早是由 Daniel Hartmeier 开发的,现在的开发和维护由Daniel 和openbsd小组的其他成员负责。
本文档对openbsd上运行的PF系统做一个简明的简介。本文可被用作是man手册页的补充,而不是它们的替代。本文档涵盖了PF的主要特性。要完整和深入的了解PF能做什么,请阅读pf(4)man手册页。
本FAQ文档是针对使用openbsd 3.5的用户的。由于pf是不断成长和开发中的,3.5版本和当前版本之间存在软件的变化和功能增强。建议读者阅读正在运行系统的man手册页。
------------------------------------------------------------------------------
$OpenBSD: index.html,v 1.16 2004/05/07 01:55:23 nick Exp $
==============================================================================
* 基本配置
PF: 开始
------------------------------------------------------------------------------
目录
* 激活
* 配置
* 控制
------------------------------------------------------------------------------
激活
要激活pf并且使它在启动时调用配置文件,编辑/etc/rc.conf文件,修改配置pf的一行:
pf=YES
重启系统让配置生效。
你也可以通过pfctl程序启动和停止pf
# pfctl -e
# pfctl -d
注意这仅仅是启动和关闭PF,实际它不会载入规则集,规则集要么在系统启动时载入,要么在PF启动后通过命令单独载入。
配置
系统引导到在rc脚本文件运行PF时PF从/etc/pf.conf文件载入配置规则。注意当/etc/pf.conf文件是默认配置文件,在系统调用 rc脚本文件时,它仅仅是作为文本文件由pfctl(8)装入并解释和插入pf(4)的。对于一些应用来说,其他的规则集可以在系统引导后由其他文件载 入。对于一些设计的非常好的unix程序,PF提供了足够的灵活性。
pf.conf 文件有7个部分:
* 宏:用户定义的变量,包括IP地址,接口名称等等
* 表: 一种用来保存IP地址列表的结构
* 选项: 控制PF如何工作的变量
* 整形: 重新处理数据包,进行正常化和碎片整理
* 排队: 提供带宽控制和数据包优先级控制.
* 转换: 控制网络地址转换和数据包重定向.
* 过滤规则: 在数据包通过接口时允许进行选择性的过滤和阻止
除去宏和表,其他的段在配置文件中也应该按照这个顺序出现,尽管对于一些特定的应用并不是所有的段都是必须的。
空行会被忽略,以#开头的行被认为是注释.
控制
引导之后,PF可以通过pfctl(8)程序进行操作,以下是一些例子:
# pfctl -f /etc/pf.conf 载入 pf.conf 文件
# pfctl -nf /etc/pf.conf 解析文件,但不载入
# pfctl -Nf /etc/pf.conf 只载入文件中的NAT规则
# pfctl -Rf /etc/pf.conf 只载入文件中的过滤规则
# pfctl -sn 显示当前的NAT规则
# pfctl -sr 显示当前的过滤规则
# pfctl -ss 显示当前的状态表
# pfctl -si 显示过滤状态和计数
# pfctl -sa 显示任何可显示的
完整的命令列表,参阅pfctl的man手册页。
------------------------------------------------------------------------------
$OpenBSD: config.html,v 1.12 2004/05/07 01:55:23 nick Exp $
==============================================================================
PF: 列表和宏
------------------------------------------------------------------------------
目录
* 列表
* 宏
------------------------------------------------------------------------------
列表
一个列表允许一个规则集中指定多个相似的标准。例如,多个协议,端口号,地址等等。因此,不需要为每一个需要阻止的IP地址编写一个过滤规则,一条规则可以在列表中指定多个IP地址。列表的定义是将要指定的条目放在{ }大括号中。
当pfctl(8)在载入规则集碰到列表时,它产生多个规则,每条规则对于列表中的一个条目。例如:
block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any
展开后:
block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any
多种列表可以在规则中使用,并不仅仅限于过滤规则:
rdr on fxp0 proto tcp from any to any port { 22 80 } -> \\
192.168.0.6
block out on fxp0 proto { tcp udp } from { 192.168.0.1, \\
10.5.32.6 } to any port { ssh telnet }
注意逗号在列表条目之间是可有可无的。
宏
宏是用户定义变量用来指定IP地址,端口号,接口名称等等。宏可以降低PF规则集的复杂度并且使得维护规则集变得容易。
宏名称必须以字母开头,可以包括字母,数字和下划线。宏名称不能包括保留关键字如:
pass, out, 以及 queue.
ext_if = \