LoginSignup
0
0

トライしたかったnftablesの基本(その1)

Posted at

nftablesにトライ(フィルタリング)

iptables、ebtablesの最低限を理解したので、それを機能的に包含するnftables(後継らしい)の超基本にトライしたときのメモ。お題は”Filter”(フィルタリング)。

参考サイト

検索すれば多数見つかる。

  1. nftables で基本的なフィルタリングを設定してみた
  2. iptables後継のnftables基本操作
  3. nftables
  4. Linuxにおける新たなパケットフィルタリングツール「nftables」入門

最初は何が何だがよくわからずであったが、何度かトライして、ある程度は理解できたと思える。例が多い、細かい説明がある、、などより、的を絞った基本がベター。(それが本稿の意図でもある。)

ネットワークトポロジー

検証環境は下記。
image.png
nftablesを動作させるRouterの両側に異なるネットワークが存在する。なお、VirtualBox上のVMで動作を確認した。

設定

nftコマンドを駆使する。詳細は上述の参考サイトにて。

テーブル

まずは、”reject_filter”という名称のテーブルを作成する。

$ sudo nft create table inet reject_filter

”inet”は、ipv4/ipv6を指す。

チェーン

次に、”reject_filter”テーブル内に、”forward_1”という名称のチェーンを作成。

$ sudo nft create chain inet reject_filter forward_1 {type filter hook forward priority 0 \;}

ここでは、typeとして”filter”(フィルター)、hookとして”forward”(転送)チェーンを作成する。ここまでで、作成されたものを表示すると、

$ sudo nft -a list ruleset
table inet reject_filter { # handle 1
        chain forward_1 { # handle 1
                type filter hook forward priority filter; policy accept;
        }
}

となる。チェーンの基本policyは”accept”(許可)となるようだ。また、handle番号(”1”)は状況により変化する。

ルールの追加

特定の送信元からの特定のプロトコルを”reject”(拒否)する例である。

$ sudo nft add rule inet reject_filter forward_1 ip saddr 192.168.10.30 ip protocol icmp reject
$ sudo nft -a list ruleset
table inet reject_filter { # handle 1
        chain forward_1 { # handle 1
                type filter hook forward priority filter; policy accept;
                ip saddr 192.168.10.30 ip protocol icmp reject # handle 3
        }
}

”ip saddr 192.168.10.30”、”ip protocol icmp”とを同一行に記載することにより、AND条件となる。

評価順(複数行記載)

$ sudo nft create table inet reject_filter
$ sudo nft create chain inet reject_filter forward_1 {type filter hook forward priority 0 \;}
$ sudo nft add rule inet reject_filter forward_1 tcp dport 1234 reject
$ sudo nft add rule inet reject_filter forward_1 ip saddr 192.168.10.10 accept
$ sudo nft -a list ruleset
table inet reject_filter { # handle 1
        chain forward_1 { # handle 1
                type filter hook forward priority filter; policy accept;
                tcp dport 1234 reject # handle 3
                ip saddr 192.168.10.10 accept # handle 4
        }
}

”handle 3”にマッチした場合、”handle 4”は評価されない。

ルールの削除

上記の状況で、”handle 3”を削除してみる。

$ sudo nft delete rule inet reject_filter forward_1 handle 3
$ sudo nft -a list ruleset
table inet reject_filter { # handle 1
        chain forward_1 { # handle 1
                type filter hook forward priority filter; policy accept;
                ip saddr 192.168.10.10 accept # handle 4
        }
}

”handle 3”が削除され、”handle 4”が残っている。

おわりに

ネットワークパケットは省略。その2では、”NAT”にトライ(予定)。

0
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
0
0