Arch Linuxを使用していて、bridge-utilsを使用してブリッジをセットアップしました。今、私はそれをファイアウォールで保護したいと思います。このマシンがブリッジの背後にあるマシンと自由に通信できるようにしながら、そのブリッジを通過するいくつかのパケットをドロップしたいと思います。私は通常、iifname lo
を照合することでこのようなケースを処理しますが、残念ながら、パケットとは一致しません。
再び、うまくいけばもっと明確に
master
とslave
の2台のマシンがあります。master
には2枚のイーサネットカードがあります。 1つはネットワークの残りの部分に接続され、もう1つはslave
に接続されていますmaster
がanythingをslave
に送信できるようにしたいslave
のmaster
へのトラフィックをフィルタリングしたいNftablesを使ってやりたいです。あなたはなにか考えはありますか?
lo
インターフェースはイーサネットインターフェースではありません。リンク層アドレスがなく、ブリッジの一部になることはできません。だから方法はありませんiifname lo
は一致します。
ブリッジレイアウトは引き続きIPレイアウトと同様に編成されますが、レイヤー2で機能します(ルーティングではなく)スイッチされたイーサネットフレームがフォワードチェーンに入ります。ホスト用のイーサネットフレームは入力チェーンに入り、ホストからのイーサネットフレームは出力チェーンに入ります。
ネットワークが次のようになっているとしましょう。
LAN <--------> eth0 master eth1 <--------> slave
(bridge0)
eth0
およびeth1
に奴隷化されたbridge0
。
したがって、ホスト上に1つの一意のブリッジがある場合、この「空の」nftルールセットはslave
を分離するのに十分であり、LANおよびmaster
でslave
の無制限のトラフィックを許可します。フォワードチェーンでポリシーを削除します。
#!/usr/sbin/nft -f
flush ruleset
table bridge filter {
chain input {
type filter hook input priority -200; policy accept;
}
chain forward {
type filter hook forward priority -200; policy drop;
}
chain output {
type filter hook input priority 200; policy accept;
}
}
ARPが双方向で機能することを期待するのは確かに正常です(そうでない場合、slave
はIPレベルで多くのことを行うことができません):
nft add rule bridge filter forward ether type arp accept
ここで、LANがslave
へのpingを許可されているが、その逆は許可されていない場合:
nft add rule bridge filter forward oif eth1 ip protocol icmp icmp type echo-request accept
nft add rule bridge filter forward iif eth1 ip protocol icmp icmp type echo-reply accept
今日の時点ではまだconntrackの統合がないため、ブリッジレベルでのnftablesの使用は、iptablesと比較してまだいくらか制限されています(ただし、よりクリーンです)。ですから、私が知る限り、ステートフルファイアウォールは利用できません。
したがって、通常は簡単なタスクの中には、厄介に見えるものもあります。たとえば、次のようになります。(おそらくリモートの)IPからsshを許可する203.0.113.3
。スレーブからLANへの最初の同期が許可されていないことを除いて、双方向のトラフィックを許可します。
nft add rule bridge filter forward oif eth1 ip saddr 203.0.113.3 ip protocol tcp tcp dport 22 accept
nft add rule bridge filter forward iif eth1 ip daddr 203.0.113.3 ip protocol tcp tcp sport 22 tcp flags != syn accept
master
に複数のブリッジがある場合は、ルールやデフォルトポリシーを調整する必要がある場合があります。