Linuxのfirewalldゾーンの背後にあるロジックと、それらが評価される方法を理解しようとしています。
私の理解では、ゾーンは、許可/拒否ルールを適用できるインターフェイスとIP範囲のリストとして定義されます。これは正しいです?インターフェイスと追加のIP範囲を含むゾーンの場合。このゾーンで許可されているサービスは、トラフィックがその範囲内のIPから別のインターフェイスを介してマシンに到達する場合でも、IP範囲で許可されますか?
ゾーンはどのような順序で評価されますか? 2つの(おそらく矛盾する)ゾーンが一致する着信トラフィックはどうなりますか?たとえば、特定のインターフェイスからマシンへのnfsを許可するゾーン「Z1」や、IPからのすべての着信トラフィックを拒否するゾーン「Z2」などです。 「Z1」で定義されたインターフェースを介して、「Z2」で定義されたIPからマシンに到達するNFSトラフィックはどうなりますか?
ゾーンは、netfilterに基づく抽象化レイヤーにすぎません。 netfilterの言語では、パケットが何らかの「ゾーン」内にあるというfirewalldのエンドユーザーとしてのこの感覚を与えるチェーンのセットをルール化します。ゾーン実行の正確な動作はいつでも確認できます。
iptables -L
ファイアウォールで一致するパケットの順序は次のとおりです。
これは基本的に、パケットの最終的な宛先が直接ルールによって決定されない場合、パケットがいくつかのゾーンに入ることを意味します。最初のfirewalldは、ソースIPに基づいてそれらをルーティングしようとしています。一致するものがない場合、firewalldはそれらが入ったインターフェースに基づいてそれらをルーティングしようとします。これも失敗した場合、それらはデフォルトゾーンに入ります。ソースIPで設定されたゾーンがさらにあり、これらのIP範囲がゾーンと重複している場合、ソースルールが最初に一致するかどうかが最初にチェックされるため、ソースルールが最初に追加されたゾーンが優先されます。
インターフェイスを備えたシステムを作成しましょう。
ファイアウォール設定1:
firewall-cmd --zone=home --add-interface=eth0
firewall-cmd --zone=internal --add-source=192.168.0.0/16
アドレス192.168.0.2からeth0経由で送信されるパケットは、内部ゾーンにルーティングされます。
ファイアウォール設定2:
firewall-cmd --zone=internal --add-source=192.168.0.0/16
firewall-cmd --zone=home --add-source=192.168.0.2/32
192.168.0.2からのパケットは、再び内部ゾーンにルーティングされます。このように機能するのは、firewalldが関連するコマンドを実行するために、ルーティングゾーンのソースルールを1つずつ追加しているためです。