你可以用两种方法配置PF,它们是你喜欢的文字编辑器和pfctl命令行管理工具。一般日常管理你需要在/etc/pfctl.conf里编辑你的规则,然后使用pfctl重新载入你的新规则。 pfctl程序还可以实现一些目的,它有很多的选项,我们将在后面的章节讨论这些选项。
你可能很想知道是否可以通过web接口实现对PF的管理工作, 但是它们并不属于基本系统的组件。PF的开发人员并非对这些选择存有敌意, 只不过他们尚未见过可以合理地配置PF的pf.conf以及pfctl命令行的一个可用图形化接口程序。
使用 SUDO!
当我需要使用某些超级用户的权限时,我倾向于使用sudo。 它是OpenBSD基本系统的一部分,而在其它的操作系统上你也可以通过port或package系统获得它。 如果你还没有使用sudo时, 不要忘了你是用root身份登陆的,以免伤害到系统。
在OpenBSD上最简单的PF设定
如果你想在系统启动时启用PF, 你需要告诉rc系统启动这个服务。在OpenBSD里, 你只要编辑 /etc/rc.conf.local 这个文件并加上下面这行就可以了(很简单吧):
代码: 全选
pf=YES #启用PF
代码: 全选
pf_rules=/etc/pf.conf # 指定你的规则文件
在正常安装的OpenBSD里都有一个 /etc/pf.conf 文件,
在FreeBSD, NetBSD, 或其它可运行PF的系统上,也包含了一些有用的建议设定, 但是它们全被注释掉了。
事实上,要启用PF你无需重新启动你的计算机, 你只需简单地使用pfctl。而且没有人愿意无缘无故地重新启动自己的机器,键入下列命令可以启用PF:
代码: 全选
$ sudo pfctl -e
------------------------------------------------------
注释:
------------------------------------------------------你可以将PF的配置文件设置为其它文件而非默认的 /etc/pf.conf 文件,尽管这样做并不难,但是如果使用默认的配置文件,具有便于系统自动维护的优势, 例如每晚将你的配置备份到 /var/backup。
PFCTL命令行
为了方便, 我们在命令行上使用pfctl来处理一些操作。要启用PF并导入规则,这样:代码: 全选
sudo pfctl -ef /etc/pf.conf
也许有必要再说一遍,如果你重新启动计算机, OpenBSD上的rc脚本将启用一个默认的规则集,这个规则集将在所有网络接口被激活前启用。
一些PF早期版本的ports启动时并不加载默认的规则集,这也在其它项目的邮件列表上引起过一些争议, 但是在本书出版时它们在启动时已经加载了合适的默认规则集。
在FreeBSD上设置最简单的设定
高质量的代码可以运行在很多平台上, FreeBSD用户也会告诉你任何好的代码迟早会进入FreeBSD, 从FreeBSD 5.2.1以及后期的4.x系列开始, PF以及一些相关工具陆续出现在FreeBSD里。
看起来在FreeBSD的 /etc/rc.conf 里PF的设置要复杂一些, 但也是一些简单的命令。 在FreeBSD 4.x 和 5.x 以及更新的PF版本里这个文件的设置略有不同。请参考FreeBSD的 Handbook, 特别是有关PF的章节 http://www.freebsd.org/doc/
en_US.ISO8859-1/books/handbook/firewalls-pf.html , 这样你可以了解在你的环境中需要进行哪些设置。 在FreeBSD 7.0中的PF版本与OpenBSD 4.1里的版本, 通过查看文件 /etc/defaults/rc.conf , 你将知道默认的PF相关变量如下:
代码: 全选
pf_enable="NO" # 设置为 YES 表示启用pf
pf_rules="/etc/pf.conf" # 指定PF的规则定义文件
pf_program="/sbin/pfctl" # 给出pfctl程序的位置
pf_flags="" # pfctl的额外参数
pflog_enable="NO" # 设置为YES将启用PF的日志记录
pflog_logfile="/var/log/pflog" # 设置日志文件的位置
pflog_program="/sbin/pflogd" # 日志记录程序的位置
pflog_flags="" # pflogd的额外参数
pfsync_enable="NO" # 将 pf 状态输出给其它主机以便同步
pfsync_syncdev="" # pfsync的工作接口
pfsync_ifconfig="" # 提供给ifconfig(8)的pfsync额外选项
代码: 全选
pf_enable="YES" # 启用 PF (如果需要加载模块)
pflog_enable="YES" # 启动 pflogd(8)
在FreeBSD里, PF被默认编译为一个内核可引导模块。
也就是说你可以在
代码: 全选
$ sudo pfctl -e
代码: 全选
$ sudo kldload pf
pfctl -e命令会产生下面的输出:
代码: 全选
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled
假设你已经在/etc/rc.conf里加上了相关的设定, 那么你也可以使用PF的rc脚本来运行它:
代码: 全选
$ sudo /etc/rc.d/pf start
代码: 全选
$ sudo /etc/rc.d/pf stop
在NetBSD里的最简单设置
在NetBSD 2.0和更新的版本中, 你可以通过packages (security/pflkm)将PF安装为一个可引导内核模块,或者编辑进一个静态内核配置文件。从NetBSD 3.0开始, PF已经成为基本的系统组建。
如果你想在内核配置里启用PF (这里是指不是每次通过调用内核模块), 将下面这几行加入你的内核配置文件:
代码: 全选
pseudo-device pf # PF packet filter
pseudo-device pflog # PF log interface
代码: 全选
lkm="YES" # do load kernel modules
pf=YES
pflogd=YES
如果你已经安装了这个模块, 要调用它,先启用PF:
代码: 全选
$ sudo pfctl -e
代码: 全选
$ sudo modload /usr/lkm/pf.o
你也可以通过运行rc脚本:
代码: 全选
$ sudo /etc/rc.d/pf start
代码: 全选
$ sudo /etc/rc.d/pflogd start
要在启动时自动加载这个模块, 将下行加入/etc/lkm.conf:
代码: 全选
/usr/lkm/pf.o - - - - AFTERMOUNT
如果此时一切正常, 你就可以编写你的第一个PF规则集了。:)