PF (ファイアウォール)
出典: フリー百科事典『ウィキペディア(Wikipedia)』
PF(Packet Filter)とはOpenBSDで開発され、そのほかのBSDの子孫でも使うことが出来るステートフルなパケットフィルターである。
目次 |
[編集] 概要
PF(Packet Filter)とは、Daniel HartmeierによってOpenBSD用に開発されたパケットフィルターである。 これはDarren Reedが作ったIPFilterにあるライセンス上の問題をOpenBSDで回避するために作成された。 ちなみに、このライセンス上の問題とはDarren Reedが他の人にIPFilterのソースコードを改変することを許さないというものである。 IPFilterが削除されたとき、Theo de Raadt氏は「OpenBSDが使ったり配布したりするソフトウェアはあらゆることに対して自由でなくてはならない。 ...そして、それはどんな目的に対してでも自由であるべきだ...その目的が改変、利用、漏洩、子供の根囲いをする機械やオーストラリアに落とされる核爆弾に対する実装であったとしても。」 このことからもわかるように、OpenBSD開発者チームはこの手の問題に対して無駄な交渉を続けていくよりも、ソフトウェアを置き換えることを選ぶ。
PFは上記のような理由で高速に開発され、他のファイアウォールに無い利点を持つ。 わかりやすい書き方に少し改変したところをのぞき、PFの文法はIPFilterの文法によく似ている。 PFを使ってネットワークアドレス変換(NAT)やQuality of Service(QoS)制御を行うことが出来る。 なお、QoS制御はキューイング機構であるALTQで実装されており、PFの設定で指定することで利用できるようになる。 また、PFではpfsyncやCARPというフェイルオーバーや冗長化のための機構や、authpfというセッション認証の機構、ftp-proxyというファイアウォールで扱いにくいプロトコルであるFTPを扱うための機構を使うことが出来る。 PFはOpenBSDだけでなく、NetBSDやFreeBSD(5.3R以降)、DragonFly BSD(1.2R以降)でも利用することが出来る。 WindowsでもCore forceという名前でOpenBSDの実装を使うことが出来る。
PFのログ出力は他のパケットフィルターと全く違っている。 ログ出力のルールはpf.confにて決めることが出来、pflogという仮想ネットワークインタフェースから得ることが出来る。 ログはtcpdumpのような一般的なユーティリティで調査することが出来る。 なお、OpenBSDはこの目的のためにtcpdumpを拡張している。 また、pflogdというデーモンを使って改変したtcpdump/pcap形式でログを保存することも出来る。
[編集] pf.conf ファイルの記述例
## マクロ # 内向けインタフェース (ローカルネットワークに接続). int_if="xl0" ## Options # blockした通信にデフォルトでRSTを返すかICMPを返すかを設定 set block-policy return # ループバックインタフェースについては完全に無視する set skip on lo0 ## アドレス変換規則 # ローカルネットワークからデフォルトルートとして指定されているインタフェースである # egressインタフェースを通るところでNATを行う。 nat on egress from $int_if:network to any -> (egress) ## フィルタリングルール # すべてのパケットを遮断(block)し、ログに残す block log all # ローカルネットワークからのすべてのパケットを許可する。quickを使うと後で # これにマッチするルールがあったとしても無視される。ローカルの通信をさらに厳しく # 評価するようなルールもあるかもしれない。 pass quick on $int_if all # 外に出て行くすべてのトラフィックを許可する。そして、それらのパケットへの返事が自動的に # 許可されるように、状態を記憶する。そうしないと、外部向けの(egress)インタフェースから # 出て行く通信や入ってくる通信に対して多くのルールをここに記述することになる。 pass out keep state
[編集] 参考文献
[編集] 外部リンク
- OpenBSD's pfctl man page
- The OpenBSD PF guide
- The OpenBSD 3.6 release song with background information on PF's creation
- PF section on Daniel Hartmeier's site
- PF tutorial by Peter N. M. Hansteen