いいかげん nftables を使い始める
だらだらと iptables を使い続けてきたけど、いい加減 nftables に移行しよう。
用語メモ:
table:
https://wiki.nftables.org/wiki-nftables/index.php/Configuring_tables
family (ip とか inet とか arp とか) に紐付けて作成
inet は ip と ip6 の両方が来るヤツ
chain とか set とかを中に入れる
chain:
https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains
iptables の chain と同様に、 rule を中に入れてくヤツ
フックポイント ("input" とか) に紐付けるか、もしくは他の chain から "jump" で飛ばしてトラフィックを流す
drop は即座に反映されるけど、 accept は次の chain に進む (のでそこで落される可能性がある) らしい?
rule:
条件と、それにマッチしたパケットに対してどんなアクションをするかを定義するやつ
1つのルールに対して、条件もアクションも複数定義可能
設定方法:
nft
コマンドで1行ずつ設定する方法例:
nft add table ip mytable
例:
nft add rule mytable mychain tcp dport 80 accept
スクリプト (設定ファイル) に書いて
nft -f
で読み込ませる方法nft list table ...
とかnft list ruleset
とかの出力で見れるような書式 (設定ファイルっぽい書式) と、コマンドで設定するのと同様に1行ずつ書く書式がある。どちらで書いても、設定の変更は atomic に行われる
よくあるクライアント PC 向けの設定例:
#!/usr/bin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority 0; policy drop; # accept any localhost traffic iif lo accept # accept traffic originated from us ct state established,related accept # accept neighbour discovery otherwize IPv6 connecticity breaks icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept # accept ping icmp type echo-request accept icmpv6 type echo-request accept # ssh tcp dport 22 accept } }
入ってきたパケットに対して:
lo のアクセスは全部許可
自分から出したトラフィックの返答は許可
IPv6 の何かは許可
ping は許可
ssh への接続は許可
iptables からの移行:
https://wiki.nftables.org/wiki-nftables/index.php/Moving_from_iptables_to_nftables
iptables のコマンドラインオプションやら設定 (
iptables-save
の出力) やらを、それに相当する nft のものに変換するツールが提供されてるので、それ使ってルールを変換して乗り換えたらいいよみたいな話。
参考: