Skip to main content.
Google custom search

NetBSD Packet Filter 情報

OpenBSD Packet Filter (PF) は、 2004 年 7 月以来 NetBSD に統合されており、リリース版としては NetBSD 3.0 で初めて対応しました。 NetBSD での PF の使い方は、基本的に OpenBSD と同じですが、若干の違いがあります。 このページでは、その違いについて説明するとともに、 PF の NetBSD への移植と統合に関する追加情報を提供します。

情報

リンク


情報

可用性 (トップ)

NetBSD 4.0 には、 OpenBSD 3.7 由来の PF に 3.7 枝由来の修正がおこなわれたものが附属します。

NetBSD 3.0 は PF に公式に対応した最初のリリース版です。 NetBSD 3.0 には、 OpenBSD 3.6 由来の PF に 3.6 枝由来の修正がおこなわれたものが附属します。

カーネルオプション (トップ)

PF を使うためにカーネルのコンパイルは必要ありません。 LKM /usr/lkm/pf.o を使うことができます。 modload(8) を使ってこの LKM をロードします。

# modload /usr/lkm/pf.o

しかし、 PF をカーネル内に組み込んでおきたい場合は、 少なくとも以下のオプションを有効にする必要があります。

options 	PFIL_HOOKS	# pfil(9) packet filter hooks

このオプションは、GENERIC カーネルでデフォルトで有効になっているはずです。 カーネル内で PF を有効にするためには、 以下の擬似デバイスをカーネルコンフィギュレーションに追加しておきます。

pseudo-device	pf		# PF packet filter
pseudo-device	pflog		# PF log interface

PF を使ったパケットのロギングに興味がなければ、 pflog デバイスは外してもよいでしょう。

以上の設定を有効にするため、カーネルを再コンパイルしてインストールする必要があります。

PF を有効化する (トップ)

ブート時に PF を有効化するには、/etc/rc.confpf=YES を設定します。 なお、 PF の設定ファイルが存在しない場合、 ブート手続きは中断します。 (設定もご覧ください)。 PF の手動での起動、停止、再起動、再読み込みには、rc.d スクリプト /etc/rc.d/pf を使えます。

ブート時に pflogd(8) (pf ロギングデーモン) を有効化するには、 /etc/rc.confpflogd=YES を設定します。 pflogd(8) の手動での起動、停止、再起動には、rc.d スクリプト /etc/rc.d/pflogd を使えます。

ブート時に LKM をロードするには、 /etc/rc.conflkm=YES を設定し、以下の行を /etc/lkm.conf に追加する必要があります。

/usr/lkm/pf.o - - - - BEFORENET

/usr がルートパーティションとは別のパーティションにある場合は、 以下の内容を /etc/rc.conf に追加することも必要です。

critical_filesystems_local="${critical_filesystems_local} /usr"

設定 (トップ)

デフォルトの設定ファイルは /etc/pf.conf です。 これは、 /etc/rc.conf で変数 pf_rules を設定して変えることができます。

初期設定ファイルは /etc/defaults/pf.boot.conf です。この設定は、 ネットワーク設定をしている最中にマシンを攻撃から防御するためだけのものです。 このデフォルト設定は、 /etc/pf.boot.conf というファイルを作ることで 上書きすることができますが、ほとんどの場合は必要ないはずです。 このファイルに関するさらなる情報は、 pf.boot.conf(5) をご覧ください。

両設定ファイルの書式は、 pf.conf(5) マニュアルページで説明されています。

ブリッジにおける PF の設定 (トップ)

PF はブリッジングモードに対応していますが、ブリッジ上でのパケットフィルタリングを有効化するには、 カーネルを再コンパイルする必要があります。 以下の行をカーネルコンフィギュレーションに追加します。

options         BRIDGE_IPF	# bridge uses IP/IPv6 pfil hooks too

NetBSD Guide で説明されているとおり、 ブリッジを設定します。 次に、 brconfig(8) コマンドを使ってブリッジ上でパケットフィルタリングを有効化します。

# brconfig bridgeN ipf

"ipf" オプションは PF に対しても適用されます。このオプションは実際には pfil(9) インターフェースを有効にするものだからです。 これで、ブリッジとして設定されたインターフェース上のパケットを PF がフィルターできるようになったはずです。なお、 同じデータが両インターフェースを通過するので、 フィルターする必要があるのは片方のインターフェース上だけです。

ALTQ (トップ)

PF での ALTQ の使用は、NetBSD 4.0 から対応しています。 以下のカーネルオプションが関係します。

options         ALTQ            # Manipulate network interfaces' output queues
options         ALTQ_CBQ        # Class-Based Queueing
options         ALTQ_HFSC       # Hierarchical Fair Service Curve
options         ALTQ_PRIQ       # Priority Queueing
options         ALTQ_RED        # Random Early Detection

なお、pf を組み込んだカーネルをコンパイルする必要があることに注意してください。 PF LKM とカーネル内の ALTQ の組合せは動作しません。

ALTQ の設定については、特別なことは何ら必要ありません。ドキュメンテーションに従ってルールを設定するだけです。 ルールの設定例がいくつか /usr/share/examples/pf にあります。

OpenBSD との差異 (トップ)

NetBSD 用の PF は、OpenBSD のものとくらべ若干の違いがあります。 違いのほとんどは、機能の欠如です。

  • pfsync(4) には対応していません (プロトコル番号の割り当ての問題のため)。 うまくいけば将来のリリースで解決するでしょう。
  • ALTQ には NetBSD 4.0 から対応しています。
  • carp(4) には NetBSD 4.0 から対応しています。
  • 'group' キーワードは何もしません。 NetBSD は GID を uidinfo 構造体に保持しないからです。 おそらく、将来のリリースでは解決するでしょう。
  • ルートラベルにもとづくフィルタリングは機能しません。 NetBSD は 経路用のラベルを持ちません。将来のリリースで対応するかどうかは、 わかりません。
  • 初期設定ファイル pf.boot.conf(5) は NetBSD 特有のファイルです。 OpenBSD は PF の初期設定を /etc/rc から読み込みますが、 このファイルは変更が必要なときの扱いが面倒です。 このため、 NetBSD では PF の初期設定用に新しいファイルを追加しています。
  • spamd は最初は NetBSD に導入されましたが、 3.0 のリリース前に削除されました。 これは PF の一部とはされず、 pkgsrc で利用可能になっています (mail/spamd)。


リンク

雑多なリンク (トップ)

マニュアルページ (トップ)

  • pf(4) - パケットフィルター
  • pflog(4) - パケットフィルターロギングインターフェース
  • pf.boot.conf(5) - パケットフィルターの初期設定
  • pf.conf(5) - パケットフィルターの設定ファイル
  • pf.os(5) - オペレーティングシステムの指紋ファイルの形式
  • authpf(8) - 認証ゲートウェイユーザーシェル
  • ftp-proxy(8) - インターネットファイル転送プロトコルのプロキシーサーバー
  • pfctl(8) - パケットフィルター (PF) およびネットワークアドレス変換 (NAT) デバイスの制御
  • pflogd(8) - パケットフィルターロギングデーモン

Back to ネットワーキングドキュメンテーション