NPF (ファイアウォール)

ウィキペディアから無料の百科事典

NPF
リポジトリ ウィキデータを編集
プログラミング
言語
C
対応OS NetBSD
種別 パケットフィルタファイアウォール
ライセンス BSDライセンス
公式サイト www.netbsd.org/~rmind/npf/ ウィキデータを編集
テンプレートを表示

NPFはステートフルなパケットフィルタであり、BSDライセンスライセンスされている。パケットフィルタはファイアウォールの中心的要素である。NPFはiptablesipfwIPFilter英語版nftablesおよびPFと同等なものである。NPFはNetBSDで開発された。

歴史

[編集]

NPFは主にMindaugas Rasiukeviciusによって書かれた。NPFは2012年のNetBSD 6.0リリースで初登場した[1]

機能

[編集]

NPFはSMPシステムにおける高パフォーマンスと容易な拡張性を求めて設計されている。NPFはネットワークアドレス変換 (NAT)、ステートフルインスペクション英語版、IPセット用のツリーおよびハッシュテーブル、カスタムフィルタ用バイトコードBPFやn-code)などの機能をサポートする。NPFはカスタムモジュールをサポートするための拡張フレームワークを搭載している。パケットロギング、トラフィックの正規化、ランダムブロッキングなどの機能はNPF拡張として提供される。

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 } 

脚注

[編集]
  1. ^ http://mail-index.netbsd.org/netbsd-announce/2012/10/17/msg000161.html

外部リンク

[編集]