iptables - 如何限制仅对网络上的本地设备进行访问?

iptables - 如何限制仅对网络上的本地设备进行访问?

我在 Debian 12 主机上运行 WireGuard VPN 服务器,没有任何问题,监听特定的 UDP 端口,一切运行正常。我可以在 5G 等网络上通过手机 WireGuard 客户端进行连接,一切运行正常。

但是我想暂时允许某人访问该服务器,但限制他们只能访问我本地网络上的设备 192.168.0.x - 一旦他们连接到 VPN,就无法访​​问公共互联网,因此他们无法访问一般网站等。只需根据需要访问 192.168.0.x 上的设备

我只是一个家庭新手用户,尝试了以下一组命令:

iptables -I OUTPUT -d 192.168.0.0/16 -j ACCEPT; iptables -P OUTPUT DROP
iptables -A INPUT -p udp -m udp --dport ##### -j ACCEPT
iptables -A INPUT -p udp -m udp --sport ##### -j ACCEPT

其中 ##### 是与外界通信的正确监听端口。在主机上,通常似乎可以按预期工作 - 我可以与所有 192.168.0.0 设备通信,并且无法与该范围之外的任何设备通信 - 唯一的问题是,我也无法再通过 5G 连接到 ######,这是我之前工作的 VPN 监听端口。

任何帮助都将不胜感激,谢谢!

编辑:

另一个用户告诉我尝试 FORWARD,所以我尝试了这个但仍然没有变化,当从外部世界尝试时守护进程没有响应

iptables -I OUTPUT -d 192.168.0.0/16 -j ACCEPT; iptables -P OUTPUT DROP
iptables -A FORWARD -p udp -m udp --sport ##### -j ACCEPT
iptables -A FORWARD -p udp -m udp --dport ##### -j ACCEPT

答案1

  1. 您没有允许OUTPUT来自该源端口的服务器;而是允许 INPUT(这不会匹配任何内容)。您需要一个输出规则,允许数据包--sport #####从服务器返回到您的 WireGuard 客户端。

  2. 来自 VPN 客户端的数据包通过服务器不是 OUTPUT – 它们是FORWARD。您的“VPN 到 LAN”访问规则应位于 FORWARD 链中。

    (因此,你实际上并不需要过滤输出 - 你可以将 OUTPUT 链留在 ACCEPT 策略上而不需要任何规则。)

  3. 您还需要允许数据包从 LAN 返回 VPN 的规则。通常,FORWARD 中会有一个包罗万象的“已建立”规则,即-m state --state ESTABLISHED,RELATED使用 conntrack 自动允许属于现有连接的回复数据包。

相关内容