如何通過網關保留外部 IP 以繼續使用 Fail2Ban
我有一個帶有 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 可以執行其工作。
乾杯!