![UFW 伪装和外部流量仅在特定接口上](https://linux22.com/image/205406/UFW%20%E4%BC%AA%E8%A3%85%E5%92%8C%E5%A4%96%E9%83%A8%E6%B5%81%E9%87%8F%E4%BB%85%E5%9C%A8%E7%89%B9%E5%AE%9A%E6%8E%A5%E5%8F%A3%E4%B8%8A.png)
我有一个 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 网络分离?另外,有没有更好的方法来进行伪装?
提前致谢!
答案1
在您的问题描述和您设置的 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
另外,你需要添加第二条MASQUERADE
规则/etc/ufw/before.rules
(如果你想伪装#4):
*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 中的任何主机(不确定你是否想要那?)
- 仅当您希望允许 eth0 网络中的主机访问时才需要 (3)发起与您的 wg200 网络的新连接;如果 eth0 网络中的主机始终位于 wg200 网络连接的接收端(这很可能是因为您从 wg200 伪装到 eth0),那么您不需要此规则
to any from any
(4) 上不需要- (5) 不需要