目次

FreeBSDのfirewall

概要

FreeBSDの手引書公式ハンドブックのFirewalls(英語)ではFirewallについて書かれておりその中でもFirewall PackagesでなぜFirewallソフトが3つも入ってるのかについて説明しています。

The reason that FreeBSD has multiple built in firewall packages is that different people have different requirements and preferences. No single firewall package is the best.

オレオレ訳すると「異なる人々が異なる要件と選択をした、結果FreeBSDには複数のファイアーウォールパッケージが組み込まれている。1つのファイアーウォールパッケージがベストではない」ですが、この1つのFirewallがベストではないという選択は、非常に面白い選択となり、結果として3つのFirewallが共存することなっています。
このため、それぞれ機能性の違いや得意分野また、すべて並行使用する場合はFall型にパケットが流れてきて設定に失敗するとパケットが途中で止められてしまう可能性もあります。
しかしながら、MultiHomingで説明しているようにipfwの得意なところをうまく使い、それぞれを使いこなせば非常に便利なことに驚かされるでしょう。
このような状態は、Linuxでは現在最新の3.0系でもいまだ実現しておらずipchainsからiptablesへ置き換わっただけのようにそれぞれを並行使用するほどすばらしい状態ではありません。
iptablesのみを触ったことがある人からすれば、初めはpfやipfの構文が複雑に感じるかもしれません。しかし、pfやipfを使えばiptablesはpfに比べ非力だと実感できると思います。
特に構文の表現や機能性はそれぞれすばらしいものがあり、TCP,UDP,ICMPプロトコル以外のプロトコルをコントロールできたりするなどiptablesにはない機能がたくさんあります。
個人的にはipfやpfが公式にLinux上で実装されるのを期待していますがそういった状況には残念なことに現在のことろないようです。

ただ今後FreeBSD開発チームはpf、ipf、ipfwの3つのfirewall体制をみなおし、構文解釈する機能と、実際のカーネルとしての機能を切り分けてそれぞれ共存していく道を模索するなど9.0系で新たな試みがとられるかもしれません。
特にpfは開発元のOpenBSD版が最新版は4.9ですが、現在FreeBSD9.0Rがベースとしているのは4.51)まででありこれは構文など4.5以後のバージョンで変化があったためらしいですが、今後の動向が気になります。2)

ipfw

ipf

pf

1)
FreeBSD8.xRは4.1相当らしいです。ネタ元:The OpenBSD Packet Filter (PF) and ALTQより