Centos

Firewalld 從 Wireguard 介面轉發相同區域的流量,不允許訪問主機埠

  • February 3, 2021

我在 VPS 上執行基於 RHEL 的 Linux 發行版,它應該是 VPN 網關伺服器。我正在使用 Wireguard 通過此網關將客戶端相互連接。伺服器啟用了 ipv4 轉發,所有客戶端都連接到伺服器上的同一個 Wireguard 介面,並且在同一個子網上(10.0.100.0/24如果這很重要)。最簡單的設置可能如下所示

           Wireguard            Wireguard
[ClientA] <---------> [Server] <---------> [ClientB]
10.0.100.10           10.0.100.1           10.0.100.20

我創建了一個名為 的 Firewalld-zone vpn,在其中將 Wireguard-NIC 添加為介面,並10.0.100.0/24作為 Source 添加到該區域。伺服器本身正在執行除 VPN 網關之外的其他服務(例如 Cockpit)。

我希望 ClientA 可以訪問同一子網上所有其他客戶端的所有埠(例如 ClientB),但限制所有客戶端訪問伺服器上公開的任何服務(例如 Cockpit)。

如果我將target區域的設置為ACCEPT,則 ClientA 可以訪問 ClientB 的每個埠(這很棒),但遺憾的是,伺服器上執行的所有內容也都暴露給客戶端(這是一個禁忌,因為設備並不總是值得信賴)。此時,我如何告訴 firewalld 不要暴露伺服器本身的任何埠?

如果我保留客戶端上target的區域,default則可以相互 ping 通,但不能訪問彼此的埠(並且伺服器上的任何內容都不會暴露,這是我所期望的)。如果採用這種方法,如何允許將流量轉發給客戶端?(類似於--add-port/--add-service轉發的流量?)

有沒有辦法配置 Firewalld,以便它在區域中的客戶端之間轉發流量,但也限制對伺服器上公開的服務的訪問?

我找到了一些解決方案,這要感謝#firewalld IRC 上的一個非常好的人(如果您正在閱讀本文,請感謝@erig)。

在 Firewalld 的 0.9.x 版本中,開發人員引入了“前向過濾”功能,這正是我所尋找的。然而,截至 2020 年 2 月 3 日,遺憾的是,它在任何地方都沒有得到很好的記錄,許多發行版仍在發布 firewalld 0.8.x)。因此,如果您正在閱讀這篇文章,因為您有類似的問題並且已經使用 firewalld > v0.9.x,我建議您深入研究前向過濾。

如果您(像我一樣)在接下來的一段時間內堅持使用 0.8.x(或者只是不夠熱衷於使用前向過濾),另一種解決方案是使用 Rich Rule,拒絕所有 TRAFFIC 到伺服器地址。這不會影響轉發流量,只會影響直接定址主機的流量。

firewall-cmd --zone=vpn --add-rich-rule='rule family=ipv4 source address=10.0.100.0/24 destination address=10.0.100.1/32 reject'

請注意,vpn應用此規則的 zone 需要將其目標設置為ACCEPT,以便仍將流量轉發到網路上的客戶端。

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