NPF (ファイアウォール)

NPF(NetBSD Packet Filter)は、ステートフルなパケットフィルタであり、BSDライセンスの下で利用可能です。ファイアウォールの核となる要素として機能し、iptables、ipfw、IPFilter、nftables、PFといった他のパケットフィルタリングシステムと同等の役割を果たします。NetBSDオペレーティングシステムで開発が進められてきました。

歴史



NPFは、主にMindaugas Rasiukeviciusによって開発されました。NetBSD 6.0のリリース(2012年)で初めて導入され、その高度な機能と性能が注目されました。

機能



NPFは、マルチプロセッサ(SMP)環境での高いパフォーマンスと容易な拡張性を重視して設計されています。主な機能として、ネットワークアドレス変換(NAT)、ステートフルインスペクション、IPセットのためのツリーおよびハッシュテーブル、カスタムフィルタのためのバイトコード(BPFやn-code)のサポートが挙げられます。

また、カスタムモジュールをサポートするための拡張フレームワークを備えており、パケットロギング、トラフィックの正規化、ランダムブロッキングなどの機能は、NPFの拡張機能として提供されます。

npf.confの設定例



以下に`npf.conf`ファイルの具体的な設定例を示します。


特定のインターフェースにIPv4アドレスを割り当てる


$ext_if = inet4(wm0)
$int_if = inet4(wm1)

IPセットを格納するための効率的なテーブル


table <1> type hash file "/etc/npf_blacklist"
table <2> type tree dynamic

サービス名を格納した変数


$services_tcp = { http, https, smtp, domain, 9022 }
$services_udp = { domain, ntp }
$localnet = { 10.1.1.0/24 }

様々なNAT形式をサポート


map $ext_if dynamic 10.1.1.0/24 -> $ext_if
map $ext_if dynamic 10.1.1.2 port 22 <- $ext_if port 9022

NPFは様々な拡張機能を持ち、カスタムプロシージャを通じてサポートされる


procedure "log" {
log: npflog0
}

#

NPFではグルーピングが必須。デフォルトグループは必ず必要


#

group "external" on $ext_if {
# 外向きのトラフィックは全てステートフルに許可
pass stateful out final all

block in final from <1>
pass stateful in final family inet proto tcp to $ext_if port ssh apply "log"
pass stateful in final proto tcp to $ext_if port $services_tcp
pass stateful in final proto udp to $ext_if port $services_udp

# パッシブFTPとtracerouteを許可
pass stateful in final proto tcp to $ext_if port 49151-65535
pass stateful in final proto udp to $ext_if port 33434-33600
}

group "internal" on $int_if {
# IETF RFC 2827を用いて入力トラフィックをフィルタリング
block in all
pass in final from $localnet
pass in final from <2>
pass out final all
}

group default {
pass final on lo0 all
block all
}


この設定例では、外部インターフェース `$ext_if` と内部インターフェース `$int_if` を定義し、IPセット、サービス、ローカルネットワークの変数を設定しています。また、NATの設定や、パケットロギングのためのカスタムプロシージャの定義も含まれています。さらに、異なるネットワークセグメントに対するフィルタリングルールを設定するために、`external`、`internal`、`default` という3つのグループが定義されています。

詳細



NPFの強力な機能の一つに、柔軟なルール設定があります。例えば、特定のIPアドレスやネットワークからのトラフィックをブロックしたり、特定のポートへのアクセスを許可したりすることが可能です。また、ステートフルインスペクションにより、接続の状態を追跡し、不正なアクセスを効果的に防ぐことができます。さらに、拡張フレームワークを使用することで、独自の機能を追加することも可能です。

NPFは、その高性能と柔軟性から、NetBSD環境だけでなく、他のオペレーティングシステムへの移植も試みられています。このため、今後さらに幅広い環境での利用が期待されています。

まとめ



NPFは、高性能で拡張性の高いパケットフィルタであり、ネットワークセキュリティの重要な要素です。その柔軟な設定と拡張性により、様々なネットワーク環境に対応できるため、多くのシステム管理者にとって貴重なツールとなっています。

参考資料



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。