[CentOS8]nftablesインストール、設定

概要

パケットフィルタリングツールとして、今まで「iptables」を使用していましたが、CentOS8からは標準が「nftables」に変わりましたね。
CentOS8でもiptablesはインストールすれば使用できますが、せっかく標準がnftablesになったので、そちらを使用してみようと思います。
iptablesとnftablesの違い、どちらがどのように長けているかを触ることで把握して、どちらが良いか見定めて、今後どうするかを決めていきたいと思います。

インストール

CentOS8で標準で入っているとは思うのですが、入っていない方は以下のコマンドでインストールを行いましょう。

dnf install -y nftables

インストールはこれだけです。では設定を行っていきましょう。

設定方法

nftablesを用いて、パケットフィルタリングの設定を行うには「nft」コマンドを用いて行います。

nft オプション 処理の対象 パラメータ

といった感じです。

テーブル追加

テーブルの追加を行うのであれば

nft add table xx yyyy

のようになります。
ここで、xxにはアドレスファミリー、yyyyにはテーブル名が入ります。 アドレスファミリーとは、
iptablesにおける「iptables」や「ip6tables」、「arptables」と同様の物でこれを指定することでIPv4やIPv6の指定ができます。
アドレスファミリーとiptablesの対応は以下になります。
「ip」→「iptables」
「ip6」→「ip6tables」
「inet」→「iptablesとip6tablesの両方」
「arp」→「arptables」
「bridge」→「ebtables」
「netdev」
これはnftablesで新たに出てきました。どうやらDDOS対策などに有効な物みたいですね。
詳しくは下記のURLを参照していただけると各々の説明が記載されています。
https://wiki.nftables.org/wiki-nftables/index.php/Nftables_families
実際に使用するコマンドの形は以下の形になります。

nft add table ip test

これでtestというテーブルが作成されます。

チェイン追加

テーブルの追加が完了したら、次にチェインを設定していきます。

nft add chain ip test zzzz { type hook priority \; }

先ほど作成したテーブル「test」に、「zzzz」というチェイン名を付けて、type、hook、priorityを指定していきます。
typeには「filter」「nat」「route」が設定でき、それぞれで利用可能なアドレスファミリーとhookが決まっています。
「filter」では全て利用可能。
「nat」「route」ではアドレスファミリーは「ip、ip6」のみ
「nat」でのhookは「prerouting、input、output、postrouting」が利用可能で、「route」は「output」のみとなります。
「priority」は、そのチェインの優先度を設定します。値は小さければ優先度が高く、負の値も設定することが可能です。

ルール追加

これを踏まえた上でルールを作成していくのですが、実際にコマンドを見ないとわからない事の方が多いので、実際のルール設定をしていこうと思います。

22番ポートからのアクセス拒否(drop)設定

nft add rule ip test zzzz tcp dport 22 drop

このような感じでルールを設定していきます。
また、ルールの削除の方法もご紹介します。
まず、ルールのハンドルを確認する必要があるので、下記のコマンドでハンドルを確認します。

nft --handle --numeric list chain test zzzz

すると、下記のようにルールの横に# handle 2などが記載されています。

table ip test {
     chain zzzz { # handle 1
         type filter hook inpu priority 0; policy accept;
         tcp dport 22 drop # handle 2
         }
}


この、# handle 2が先ほど設定したルールのハンドルの番号です。
このルールを削除する場合、以下のコマンドを実行します。

nft delete rule test zzzz handle 2

上記でルールの削除ができたと思いますので、確認してみましょう。
下記のコマンドで、定義済みのルールを確認することができます。

nft list ruleset

このほかに、チェイン内のルールを全て削除したい場合には以下のコマンドで全て削除できます。

nft flush chain test zzzz

総括

iptablesと違って、優先度を決定出来たり、なかなか細かいところまで手が届きそうです。ただ、まだ全くと言っていいほど慣れていない為、まだまだ使いこなすには程遠いですし、勉強をしていくことも必須かな、とは思います。
ぜひとも、iptablesを使用していた方はnftablesを使用してみて、比較をしてみてはいかがでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です