Packet Filter (PF) について
Packet Filter、通称PFは、
OpenBSDのためにDaniel Hartmeierによって設計された、ステートフルなパケットフィルタリングシステムです。この技術はもともとDarren Reedが開発したIPFilterの
ライセンス問題を回避する手段として生まれました。Darren Reedの
ライセンス下では、他の開発者がソースコードを変更することが許可されていませんでした。これにより、PFは急速に開発された運命を持っています。
OpenBSDチームの
テオ・デ・ラートも、プロジェクトの目的に沿った自由なソフトウェアの必要性を語っており、特に
ライセンス上の制約に悩むよりも新たなソリューションを作り上げることの重要性を強調しています。
現在、PFは
OpenBSD以外にも、
NetBSD、FreeBSD、
DragonFly BSDでも使用可能であり、さらに
AppleのmacOS(10.6 Snow Leopard以降)やiOS、iPadOSにも組み込まれています。また、Windows環境でも「Core force」という名称で利用することができます。
PFの特徴
PFは他の
ファイアウォールにはないいくつかの独自の機能を備えています。特に、
ネットワークアドレス変換(NAT)や
Quality of Service(QoS)制御が可能で、QoS制御はALTQ(Alt Queuing)を利用して実現されています。この機能を使用することで、ネットワークにおけるトラフィックの優先順位を設定し、より効率的なデータの流れを確保することができます。
さらに、PFはpfsyncやCARPといった冗長化・
フェイルオーバー機能、authpfによるセッション認証機能、ftp-proxyを利用してFTPなどの複雑なプロトコルに対応する機能も持っています。
PFの設定ファイルであるpf.confの文法は、IPFilterの文法に類似していますが、より理解しやすい形に改良されています。設定内容は柔軟に変更することができ、ログ出力のルールも同様にpf.confで定義できます。
ログ出力と管理
PFのログは、他のパケットフィルタと異なる形式で出力されます。ログはpflogという
仮想ネットワークインターフェイスを通じて取得することができ、一般的なユーティリティであるtcpdump等を用いて解析することが可能です。
OpenBSDではtcpdumpが拡張され、より詳細なログ調査を行える環境が整えられています。さらに、pflogdというデーモンを用いることで、改変されたtcpdump/pcap形式でのログ保存も行えます。
設定ファイル例
以下に簡単なpf.confの設定例を示します。
```pf
マクロ
int_if="xl0" # 内向けインタフェース
Options
set block-policy return # RSTかICMPを返す設定
set skip on lo0 # ループバックインタフェースを無視
アドレス変換規則
nat on egress from $int_if:network to any -> (egress)
フィルタリングルール
block log all # すべてのパケットを遮断し、ログに残す
pass quick on $int_if all # ローカルネットワークからのすべてのパケットを許可
pass out keep state # 外向きのすべてのトラフィックを許可
```
このようにPFは、シンプルかつ強力なパケットフィルタリングを提供し、さまざまな環境で利用できる柔軟性を持っています。