Iptables
UFW 偽裝和外部流量僅在特定介面上
我有一個 Ubuntu 系統(192.168.AB),它作為 Wireguard“伺服器”執行,具有 2 個隧道,具有以下網路和 UFW 規則:
網路 10.255.200.0/24
ufw allow XXX/udp && ufw route allow in on wg200 out on any && ufw route allow in on wg200 out on eth0 && ufw route allow in on eth0 out on wg200
網路 10.255.245.0/24
ufw allow YYY/udp && ufw route allow in on wg245 out on wg245 to any from any && ufw route reject in on wg245 out on any to any from any
我已將以下內容添加到 /etc/ufw/before.rules 以允許 10.255.200.0/24 網路中的設備到達主機外部
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.255.200.0/24 -o eth0 -j MASQUERADE COMMIT
這似乎可行,但現在我需要允許主機網路(192.168.A.0/24)中的其他主機能夠訪問 10.255.245.0/24 網路中的系統,而該網路預設情況下無法訪問192.168.A.0/24。
我需要使用哪些 UFW 規則來保持主機網路安全並儘可能保持 WG 網路分離?另外,有沒有更好的偽裝方法?
提前致謝!
在你的問題描述和你設置的 UFW 規則之間,在我看來你想讓你的 WireGuard 伺服器做這 4 件事?:
- 在其 wg200 網路上的任意兩台主機之間轉發連接。
- 偽裝從其 wg200 網路上的任何主機到其 eth0 網路上的任何主機的連接。
- 在其 wg245 網路上的任意兩台主機之間轉發連接。
- 偽裝從其 eth0 網路上的任何主機到其 wg245 網路上的任何主機的連接。
如果這些是您想要允許的唯一 4 件事,那麼這些是您需要的唯一 UFW 路由規則:
ufw route allow in on wg200 out on wg200 ufw route allow in on wg200 out on eth0 ufw route allow in on wg245 out on wg245 ufw route allow in on eth0 out on wg245
另外,您需要向您的(如果您想偽裝#4)添加第二
MASQUERADE
條規則:/etc/ufw/before.rules
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.255.200.0/24 -o eth0 -j MASQUERADE -A POSTROUTING -s 192.168.A.0/24 -o wg245 -j MASQUERADE COMMIT
請注意,UFW 會自動為您設置這兩件事:
- UFW 使用連接跟踪來允許已在一個方向上轉發的連接的目的地回复連接的初始源(因此您只需要為“轉發”方向指定規則,而不是“反向”方向)。
- UFW 會阻止所有轉發的連接,但您明確允許的連接除外(因此您無需拒絕未明確允許的連接)。
所以要對你現有的路線規則挑剔:
(1) ufw route allow in on wg200 out on any (2) ufw route allow in on wg200 out on eth0 (3) ufw route allow in on eth0 out on wg200 (4) ufw route allow in on wg245 out on wg245 to any from any (5) ufw route reject in on wg245 out on any to any from any
- (1) & (2) 是多餘的——如果有 (1) 則不需要 (2)——但 (1) 還允許 wg200 中的任何主機連接到 wg245 中的任何主機(不確定是否需要那?)
- (3) 僅當您希望允許來自 eth0 網路的主機啟動與 wg200 網路的新連接時才需要;如果您的 eth0 網路中的主機始終位於 wg200 網路連接的接收端(這可能是因為您從 wg200 偽裝到 eth0),那麼您不需要此規則
to any from any
在 (4) 上不需要- (5) 不需要