Centos

如何通過網關保留外部 IP 以繼續使用 Fail2Ban

  • April 11, 2019

我有一個帶有 2 個 NIC 作為網關的 CentOS 7 機器;一個 NIC 連接到 Internet,而另一個 NIC 連接到我們的 LAN。

第一個 NIC 屬於 firewalld 的“外部”區域,它偽裝並設置為將埠 22、80 和 443 轉發到內部網路中管理 SSH 和 Web 伺服器的那些盒子;假設從網際網路上,該框在地址“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 敲擊該框,試圖暴力破解 root 密碼,在“server.lan”的日誌中顯示為來自“192.168.1.1”(“gateway.lan”地址),這使得不可能在“server.lan”框上使用 Fail2Ban 來阻止每天嘗試訪問的數千次。

我究竟做錯了什麼?我認為在“內部”區域啟用偽裝在概念上是錯誤的,但我找不到其他方法使 firewalld 規則起作用。我毫不猶豫地保持偽裝,但我想知道如何使 Fail2Ban 在網關後面工作……

對任何其他方式使這樣的配置像我期望的那樣工作有什麼建議嗎?

啊,我們做到了!而且它相對容易(好吧,一旦你知道如何)……

我們正確地推測“內部”區域的偽裝不是全域啟用的,而是僅限於來自 LAN 的數據包,這些數據包被路由到公共 IP。

這意味著不要使用*–add-masquerade為整個區域不加選擇地啟用它,而是使用masquerade* INSIDE 特定的豐富規則,形式如下:

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“1.2.3.4”作為“目標地址”而不是內部IP“192.168.1.10”;我們沒有明白,一旦通過“內部”區域,針對“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

哪一個:

  • 正確地將 SSH 訪問從 Internet 重新路由到 SSH 框 - 當然,這還需要在“外部”區域中將埠 22 轉發到“內部”區域的同一埠;
  • 讓 LAN 機器使用其公共名稱或 LAN 名稱無差別地 SSH 進入該框;
  • 不會掩蓋從網際網路到盒子的惡意 SSH 嘗試的地址,以便 Fail2Ban 可以執行其工作。

乾杯!

引用自:https://serverfault.com/questions/960067