nftablesでブリッジにフィルタ設定
前回はVMごとにネットワークフィルタを設定したが、共通のフィルタはホスト環境で設定した方が間違いがない。
そこで、ホスト環境のネットワークインタフェースに接続したブリッジに対してnftablesでフィルタを設定してみる。
ここでは、ホスト環境のネットワークインタフェースenp1s0
に接続されたブリッジに対してフィルタを設定する。
まずはnftで手動で設定してみる。
bridge filterテーブルとfowardチェインを(なければ)作る。
# nft add table bridge filter # nft add chain bridge filter forward '{type filter hook forward priority filter; policy accept; }'
次にルールを設定する。
ここでは、VMから x.y.z.0/24 への通信を禁止してみる。
# nft add rule bridge filter ct state established,related accept # nft add rule bridge filter oif "enp1s0" ip daddr x.y.z.0/24 counter drop
VM内部からx.y.z.0/24にpingを打っても返ってこない。 なお、先に x.y.z.0/24 のどこかにpingを打って返ってくることを確認してある。
nftでも確認する。
# nft list ruleset bridge table bridge filter { chain forward { type filter hook forward priority filter; policy accept; ct state established,related accept oif "enp1s0" ip daddr x.y.z.0/24 counter packets 3 bytes 252 drop } }
確かにdropルールに引っ掛かっている。
手動で設定したフィルタを永続化する。
# cat <<EOF >> /etc/nftables.conf table bridge filter { chain forward { type filter hook forward priority filter; policy accept; ct state established,related accept oif "enp1s0" ip daddr x.y.z.0/24 counter drop } }
なお/etc/nftables.conf
はDebian系の場合。
設定を反映する。
# systemctl restart nftables # nft list ruleset bridge table bridge filter { chain forward { type filter hook forward priority filter; policy accept; ct state established,related accept oif "enp1s0" ip daddr x.y.z.0/24 counter packets 0 bytes 0 drop } }
nftablesを使ってホストブリッジにフィルタを設定できた!