ゲートウェイとして機能する2つのNICを備えたCentOS7ボックスがあります。 1つはNICはインターネットに接続され、もう1つはNICはLANに接続されています。
最初のNICはfirewalldの「外部」ゾーンに属しており、マスカレードがオンになっており、SSHとWebを管理する内部ネットワーク内のボックスにポート22、80、および443を転送するように設定されていますサーバー。インターネットから、ボックスがアドレス「1.2.3.4」に「example.com」として表示され、LAN内の名前が「gateway.lan」でアドレスが「192.168.1.1」であるとします。
重要な注意点がありますが、すべてが機能します。ボックスのインターネット名(ssh example.com)を使用してSSH経由でLAN内からも接続できるようにしたいので(SSHボックスの名前は「server.lan」でアドレスは192.168.1.10)、唯一のこれを機能させる方法は、firewalldの「内部」ゾーンに「1.2.3.4」のポート22へのすべてのアクセスをSSHボックスのポート22に転送するルールを設定しているようです。
internal (active)
target: default
icmp-block-inversion: no
interfaces: XXXXXX
sources:
services: dns
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" destination address="1.2.3.4" forward-port port="22" protocol="tcp" to-port="22" to-addr="192.168.1.10"
「内部」ゾーンのマスカレードがオンになっていない限り、ルールだけでは機能しません。残念ながら、これにより、ルートパスワードをブルートフォースしようとするボックスを攻撃する外部IPが、「server.lan」のログに「192.168.1.1」(「gateway.lan」アドレス)から送信されたものとして表示されることも明らかです。これにより、「server.lan」ボックスでFail2Banを使用して、毎日試行される何千ものアクセスを妨げることができなくなります。
私は何が間違っているのですか? 「内部」ゾーンでマスカレードを有効にすることは概念的に間違っていると思いますが、firewalldルールを機能させる他の方法を見つけることができませんでした。マスカレードを続けることに何の不安もありませんが、ゲートウェイの背後にいるときにFail2Banをどのように機能させることができるか知りたいです...
私が期待しているようにこのような構成を機能させる他の方法へのアドバイスはありますか?
ああ、やった!そして、それは比較的簡単でした(まあ、あなたが方法を知ったら)...
「内部」ゾーンでのマスカレードはグローバルに有効化されるのではなく、パブリックIPにルーティングされるLANから発信されたパケットに限定されると正しく推測していました。
これは、ゾーン全体に対して-add-masqueradeで無差別に有効にするのではなく、次の形式で特定のリッチルール内でmasqueradeを使用することを意味します。
firewall-cmd --zone=internal --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 destination address=192.168.1.10 masquerade'
しばらくの間、ルールの内部IP「192.168.1.10」ではなくパブリックIP「1.2.3.4」を「宛先アドレス」として使用することを主張したという事実にだまされました。 「内部」ゾーンを通過すると、「1.2.3.4」のポート22をターゲットとするパケットは、リッチルールによってSSHボックスのLANアドレスにすでに変換されていることがわかりませんでした。さらに、この構文ではポートを指定できません。
「内部」ゾーンの最終ステータスは次のとおりです。
internal (active)
target: default
icmp-block-inversion: no
interfaces: XXXXXX
sources:
services: dns
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" destination address="1.2.3.4" forward-port port="22" protocol="tcp" to-port="22" to-addr="192.168.1.10"
rule family="ipv4" source address="192.168.1.0/24" destination address="192.168.1.10" masquerade
これ:
乾杯!