NPF (ファイアウォール)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/09/23 15:10 UTC 版)
| リポジトリ |
|
|---|---|
| プログラミング 言語 |
C |
| 対応OS | NetBSD |
| 種別 | パケットフィルタ、ファイアウォール |
| ライセンス | BSDライセンス |
| 公式サイト | www |
NPFはステートフルなパケットフィルタであり、BSDライセンスでライセンスされている。パケットフィルタはファイアウォールの中心的要素である。NPFはiptables、ipfw、IPFilter、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 {
# 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
}
脚注
外部リンク
- NPF (ファイアウォール)のページへのリンク