nftablesにトライ(フィルタリング)
iptables、ebtablesの最低限を理解したので、それを機能的に包含するnftables(後継らしい)の超基本にトライしたときのメモ。お題は”Filter”(フィルタリング)。
参考サイト
検索すれば多数見つかる。
- nftables で基本的なフィルタリングを設定してみた
- iptables後継のnftables基本操作
- nftables
- Linuxにおける新たなパケットフィルタリングツール「nftables」入門
最初は何が何だがよくわからずであったが、何度かトライして、ある程度は理解できたと思える。例が多い、細かい説明がある、、などより、的を絞った基本がベター。(それが本稿の意図でもある。)
ネットワークトポロジー
検証環境は下記。
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”にトライ(予定)。