web-dev-qa-db-ja.com

Firewall-cmdを使用してiptablesに永続的なPREROUTINGルールを追加する

RHEL 7でfirewall-cmdを使用して、iptables(NAT)のPREROUTINGチェーンに新しいルールを追加しようとしています。

$ firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8161

次に、$ iptables -t nat -Lを介してiptablesをチェックします。

...
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
PREROUTING_direct  all  --  anywhere             anywhere
PREROUTING_ZONES_SOURCE  all  --  anywhere             anywhere
PREROUTING_ZONES  all  --  anywhere             anywhere
...
Chain PREROUTING_direct (1 references)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8161
...

ただし、同等のiptablesコマンドを次のように実行すると、次のようになります。

...
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
PREROUTING_direct  all  --  anywhere             anywhere
PREROUTING_ZONES_SOURCE  all  --  anywhere             anywhere
PREROUTING_ZONES  all  --  anywhere             anywhere
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8161
...
Chain PREROUTING_direct (1 references)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8161

Chain PREROUTINGでこの追加のルールを取得します。これにより、ファイアウォールが無効になっている場合でも事前ルーティングが機能します(つまり、ファイアウォールデーモンを無効にしてiptablesコマンドを実行します)。

したがって、私の質問は2つあります。

  • 上記のiptablesコマンドとまったく同じfirewall-cmdコマンドはありますか?
  • このルールはfirewall-cmdを介して永続的に追加され、ファイアウォールデーモンが無効になった後もそこにとどまることができますか?
1
xeroqu

firewall-cmd--directオプションとともに使用しています。これは、iptablesコマンドを受け入れることを意味します。したがって、iptables -t natで同じオプションを使用して、1つの例外を除いて同じ効果を得ることができます。この方法でfirewall-cmdを使用すると、NATルールがPREROUTING_directチェーンに追加され、iptablesを直接使用してPREROUTINGチェーンにルールが追加されます。

iptables -t nat -Lの出力で、ルールを2回追加しました。各チェーンに1回です。

問題の2番目の部分については、firewalldサービスは停止時にすべての定義されたチェーンを削除します。そのため、PREROUTING_directに追加されたルールは使用できなくなります。短い答えはいいえです。

3
Khaled

チェーンのPREROUTINGでこの追加のルールを取得すると、ファイアウォールが無効になっている場合でも、事前ルーティングが機能するようになります。

ですから、それが本当かどうかは完全にはわかりません。

Firewalldを停止したときにPREROUTINGが機能しなくなった場合(そしてなぜそうするのかわかりません)、firewalldがポリシー全体を削除しているためだと思います(例:iptables -F/iptables -X)。その場合、同じルールの別のバージョンを手動で追加したという事実はほとんど違いがありません。 iptables -Fでも削除されます。

(最初の)コマンドは、firewalldを停止しない限り、必要に応じて永続的な事前ルーティングルールを提供する必要があります。私はそれで十分だと思う傾向がありますが、私はあなたのニーズについて何かを見逃している可能性があります。

明確にするために:PREROUTING_DIRECTチェーンとPREROUTINGチェーンの事前ルーティングルールの間に実用的な違いはありません。どちらのアプローチも同じように機能し、同じ効果があり、ファイアウォールポリシーに他の変更がない場合は、必要なことを実行する必要があります。

唯一の違いは、firewalldが基本的に舞台裏で小さな管理を行っており、actualルールを、システム定義のもの。

tl; dr:firewalldを実行し続け、そのコマンドを使用してルールを作成および管理します。 Firewall-cmdコマンドと 'raw' iptablesコマンドの視覚効果はわずかに異なりますが、ネットワークトラフィックには同じ効果があります。

0