我有一台在路由网络中运行 OpenVPN 作为客户端的服务器。我尝试使用 Firewalld 将规则应用于通过 OpenVPN 隧道接口传入的数据包,但它们没有按我预期的方式工作。
例如,假设有一个 10.100.0.0/24 网络和两个客户端,客户端 1 的 IP 为 10.100.0.2,客户端 2 的 IP 为 10.100.0.3,客户端 1 正尝试通过 VPN SSH 进入客户端 2。默认情况下,客户端 1 能够成功 SSH 进入客户端 2。但是,当我尝试将客户端 2 的隧道接口 (tun1) 添加到 drop 区域时:
sudo firewall-cmd --zone=drop --add-interface=tun1
尽管我将隧道接口添加到了 drop zone,但 client1 仍然能够通过 ssh 连接到 client2。此外,上述命令返回以下消息:“接口受 NetworkManager 控制”。
我不知道为什么丢弃区域规则不会影响来自客户端 1 的数据包。这可能与 NetworkManager 控制隧道接口有关吗?此外,即使规则确实适用,我也不知道规则/区域分配是否会在防火墙重新加载或系统重新启动后继续存在,因为该接口不适用于物理设备。我尝试使用标志更改区域,--permanent
但似乎无法正确将接口保存到区域(防火墙重新加载后firewall-cmd --zone=drop --list-all
未显示接口)。tun1
答案1
阻止 NetworkManager 管理您的某个接口的一种方法是创建一个文件/etc/udev/rules.d/00-custom.rules
并添加以下内容:
# Interfaces that shouldn't be managed by NetworkManager
ACTION=="add", SUBSYSTEM=="net", KERNEL=="tun1", ENV{NM_UNMANAGED}="1"
除非您确实想使用firewalld,否则没有必要这样做。
如果您想在特定区域移动由 NetworkManager 管理的接口,您可以使用该工具进行操作nm-connection-editor
:右键单击接口 -> 编辑 -> 常规面板。