nftables は、Linux でよく使われるパケットフィルタリングとファイアウォールルール管理の仕組みです。端末の通信制御、トラフィック統計、ポートマッチ、簡単な帯域制限だけを行うなら、最初からルール体系全体を覚える必要はありません。まずは次の 3 つを押さえれば十分です。
table:ルールを入れるコンテナ。chain:ルールが評価される場所。通常は特定の hook に接続します。rule:実際のマッチ条件とアクション。
以下では、まずテスト環境で試しやすい最小構成の流れを整理します。
基本構成
先にいくつか変数を用意します。以降のコマンドで再利用します。
|
|
IPv4 と IPv6 の両方を扱える inet table を作成します。
|
|
次に、forward 段階に接続する chain を作成します。
|
|
ここで、type filter はフィルタリング用のルールであることを示し、hook forward は転送されるパケットを処理することを示します。
よく使うマッチ方法
送信元 IP でマッチします。通常はアップロード方向の制御として考えられます。
|
|
宛先 IP でマッチします。通常はダウンロード方向の制御として考えられます。
|
|
MAC アドレスでマッチする場合、ether saddr で上り方向を制御できます。
|
|
ブリッジ、転送、アドレス変換を経由するネットワークでは、下りパケットを宛先 MAC で安定してフィルタできない場合があります。端末の通信制御を行うときは、まず ether saddr または IP ベースのルールから検証するのが安全です。
ポートでマッチする場合、TCP と UDP をまとめて対象にできます。
|
|
ポート範囲をマッチしたい場合は、比較式を使えます。
|
|
単一端末の通信量を集計する
特定 IP の上りと下りの通信量を集計したいだけなら、counter return を使えます。マッチしたらカウンターを記録して戻るため、後続に他の統計ルールがある場合でも余計なマッチ処理を減らせます。
|
|
統計結果を確認します。
|
|
各ルールの handle を確認したい場合は、-a を付けます。
|
|
handle は重要です。nftables で単一ルールを削除するときは、通常この値で対象を指定します。
簡単な帯域制限
帯域制限には limit rate over を使えます。たとえば、MAC アドレスごとに指定速度を超えた通信を制限します。
|
|
ここでの mbytes、kbytes は、日常的な M、K の単位として理解できます。手動で 8 倍換算する必要はありません。実際に使うときは、まず緩めの値でテストし、マッチ方向と効果を確認してから調整するのが安全です。
ルールの削除と整理
まず handle 付きでルールを表示します。
|
|
次に handle を指定してルールを削除します。
|
|
chain を空にします。
|
|
chain を削除します。
|
|
table 全体を削除します。
|
|
日常的なデバッグでは、自分で作成した table だけを整理するのがおすすめです。システムや他のサービスが自動生成した table を直接変更しないほうが、ルールを書き間違えた場合でも戻しやすくなります。
使い方のポイント
nftables を使うときは、まず独立した table と chain を自分で作成すると扱いやすくなります。利点は次の 2 つです。
- システム既存のルールと混ざりにくい。
- デバッグ、flush、削除を安全に行いやすい。
ルールを書いたあとは、必ず nft list chain で実際のマッチ状況を確認します。特に MAC、インターフェイス、ポート、帯域制限のルールは、デバイス、ブリッジ構成、システムバージョンによって挙動が変わることがあります。複雑なルールを一度に書くより、まず小さい範囲で試すほうが安全です。