web-dev-qa-db-ja.com

特定のサブネットのみをfirewalldでマスカレードするにはどうすればよいですか?

CentOS 7のopenvpn with firewalld を実行しています。パブリック(デフォルト)ゾーンでマスカレードを有効にしましたが、正常に機能します。ただし、ローカルホスト/ 127.0.0.1でサービスを実行する必要がある場合があり、マスカレードがそれを台無しにしています。サービスは127.0.0.1に適切にバインドされますが、それに接続しようとするクライアントコードは、宛先IPアドレス127.0.0.1を、サーバーがリッスンしていないeth0のIPアドレスにマッピングしているようです(127.0用に構成されています)。 .0.1のみ)。

マスカレードを特定のサブネットのみに制限して、openvpnが引き続き機能するようにするにはどうすればよいですか?

私の質問を言い表す別の方法:ループバックアドレスのマスカレードを防ぐにはどうすればよいですか?

私が持っていたいくつかのアイデアは、どうすればいいのかわからない(または何かを壊さずにやる):

  • Openvpnのマスカレードを10.8.0.0/16に制限する
  • Eth0のIPアドレスを別のゾーンに移動して、マスカレードを制限します
  • ループバックインターフェイスをトラステッドゾーンに移動し、eth0のIPアドレスをトラステッドゾーンのソースとして追加することにより、マスカレードを許容します。
2
Christopher

私は解決策を見つけました:

external
  interfaces: eth0
  masquerade: yes

internal
  interfaces: tun0
  masquerade: no

public (default)
  interfaces:      # not used
  masquerade: no

trusted
  interfaces: lo
  masquerade: no

これが機能するためには、lotrustedゾーンにあり、tun0internalゾーンにあり、eth0externalゾーンにあることを明示的に宣言する必要がありました。それを行うために、私は(例えば)を使用しました:

firewall-cmd --permanent --zone=external --add-interface=eth0
firewall-cmd --permanent --zone=internal --add-interface=tun0
firewall-cmd --permanent --zone=trusted  --add-interface=lo
firewall-cmd --reload

eth0の場合、再起動後も機能し続けるには、ZONE="external"/etc/sysconfig/network-scripts/ifcfg-eth0に追加する必要もありました。これは他のインターフェースでは必要ありませんでした。

trustedゾーンとinternalゾーンで開いている実際のサービス/ポートは、デフォルトのままにしました。緊急時(更新によってeth0インターフェイスの名前が変更された場合など)に備えて、デフォルトゾーン(public)にssh(デフォルト)が設定されていることを確認し、公開するサービスをexternalゾーンに追加しました。

masqueradeは、デフォルトでexternalゾーンではすでにオンになっており、その他のゾーンではオフになっています。

この設定はfirewalld-0.3.9-14.el7.noarchで機能します除外するためにそれらを別々のゾーンに配置する必要がある理由がわかりませんマスカレードからのループバックインターフェイス(マスカレードをオンにすると、ルールが設定されます:-A POST_external_allow ! -i lo -j MASQUERADE、これで十分に見えますが、私は専門家ではありません)。ただし、 このバグ が関連している可能性があり、この問題は将来のバージョンで修正される可能性があることがわかりました。

4
Christopher