Firewalldを使用して特定のサブネットのみを偽装する方法は?

Firewalldを使用して特定のサブネットのみを偽装する方法は?

私は走っているCentOS 7のopenvpnそしてファイアウォール。公開(デフォルト)領域でクロッキングを有効にしましたが、うまく機能します。しかし、時にはlocalhost / 127.0.0.1でサービスを実行する必要がありますが、偽装すると問題が発生します。サービスは127.0.0.1に正しくバインドされていますが、接続を試みるクライアントコードは、宛先IPアドレス127.0.0.1をサーバーが受信していないIPアドレスeth0にマップするようです(127.0.0.0で構成されています。0).0.1)のみ可能です。

openvpn が動作し続けながら、最も干渉なく localhost のローカルサービスにアクセスできるようにマスカレーディングを特定のサブネットに限定するにはどうすればよいですか?

私の質問を表現する別の方法は次のとおりです。ループバックアドレスのなりすましを防ぐ方法は?

いくつかのアイデアがありますが、どうすればよいかわかりません(または他の作業を中断することなく実行できます)。

  • openvpn迷彩を10.8.0.0/16に制限
  • eth0のIPアドレスを別のゾーンに移動してマスカレーディングを制限します。
  • ループバックインターフェイスを信頼できるゾーンに移動し、eth0のIPアドレスを信頼できるゾーンのソースとして追加してマスカレーディングを許可します。

答え1

解決策が見つかりました。

external
  interfaces: eth0
  masquerade: yes

internal
  interfaces: tun0
  masquerade: no

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

trusted
  interfaces: lo
  masquerade: no

これを達成するためには、loゾーンtrustedtun0インinternalゾーン、およびeth0ゾーンであることを明示的に宣言する必要がありますexternal。この目的のために、以下を使用しました(例:)。

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ゾーンで開かれるので、デフォルト値のままにしました。public緊急事態(たとえば、名前が変更されたインターフェースの更新)に備えて、デフォルトゾーン(デフォルト)にSSHがあることを確認し、eth0そのゾーンに公開するサービスを追加しましたexternal

masqueradeデフォルトでは、この領域ではオンにexternalなり、他の領域ではオフになっています。

この設定は以下に適用されます。ファイアウォールd-0.3.9-14.el7.noarch ループバックインターフェイスのマスカレーディングを除外するために別々の領域に配置する必要がある理由はわかりません。マスカレーディングをオンにするとルールが設定されます。これ-A POST_external_allow ! -i lo -j MASQUERADEは十分ですが、専門家ではありません。しかし、私は発見したこのエラーこれは関連している可能性があり、将来のリリースで問題が解決する可能性があります。

関連情報