1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NetBSD Advent Calendar 2022 1日目の記事です。今年もNetBSDの記事を増やして行きましょう!
今日はnpf(7)の紹介をしようと思います。

NPFとは?

NPF(NetBSD Packet Filter)とは、NetBSDで利用可能なレイヤ3パケットフィルタで、高いパフォーマンスとスケーラビリティ、モジュール性にフォーカスして開発が行われています。NPFは2009年にC99でスクラッチから作成されており、ライセンスは2条項BSDとなっています。

基本的に、パケットフィルタはユーザランド側から操作するためのコマンドが提供されますが、NPFではこれに加え、libnpf(3)というNPF操作用のライブラリも提供しています。そのため、DPDK(Data Plane Development Kit)やnetmapと組み合わせて使用されたりもします。

BSD系ってパケットフィルタの実装がいくつかありますよね?

BSD系OSでパケットフィルタを使う際、ちょっと悩ましいのが「どのパケットフィルタを使えば良いの?」という点があるかと思います。
以下のように、FreeBSD,NetBSD,OpenBSDで使用されるパケットフィルタはそれぞれ異なっています。

OS 実装 名称
FreeBSD ipf(5) IP Filter
NetBSD npf(7) NetBSD Packet Filter
OpenBSD pf(4) Packet Filter

ただ、それぞれ相互に移植されていたりするので、基本的には使い慣れているパケットフィルタの実装を利用すれば良いのですが、NetBSDでは他のBSDで実装されたパケットフィルタの取り込み(メンテナンス)に手が回っていないという現状があります。

少し前の記事ですが、2019年の時点でNetBSDではOpenBSD由来のpfサポートが取り除かれています。

そのため、現時点(2022年時点)でパケットフィルタを使用する場合、NetBSDではnpf(7)またはipf(5)のどちらかを選択する形になります。

NPFを使ってみよう!

NPFの操作コマンド

NPFの操作はnpfctl(8)というコマンドを用いて行います。基本的な操作例は以下になります。

# npfctl reload npf.conf  # NPF設定ファイルを読み込む
# npfctl stats            # パケットフィルタの統計情報を表示
#
# npfctl show             # パケットフィルタリングの設定を表示
#
# npfctl start            # パケットフィルタリングを有効化する
# npfctl stop             # パケットフィルタリングを無効化する

また、NetBSD起動時にNPFによるパケットフィルタを有効化する場合は、 /etc/rc.conf に以下を追記します。

npf=YES

NPFの設定ファイル

NPFの設定は /etc/npf.conf に記載します。任意の場所に設定ファイルを用意しておくことも可能で、その場合は npfctl reload で設定を読み込ませます。

簡単なサンプルでNPFの設定例を見てみます。例としてICMP(ping)をブロックする設定例を以下に示します。
この例では、インタフェース wm0 から入ってくるICMPパケットは全てブロックされます。

group "block icmp" {
  block in  on wm0 proto 1 all
  block out on wm0 proto 1 all
}

上記と同等のフィルタルールをipf(5)で記述する場合は以下のようになります。NPFではルールのグルーピングなどでより分かりやすい記述になることが見て取れます。

block in  log quick proto icmp all group 100
block out log quick proto icmp all group 100

まとめ

NetBSDで利用できるパケットフィルタであるNPFについて簡単な概要を紹介してみました。
2日目以降はNPFを実際に使用する際の設定例やipfからNPFに置き換える場合のフィルタルール読み替えなどを紹介できればと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?