在 Red Hat/CentOS Linux 中禁止某个 IP 范围访问互联网

在 Red Hat/CentOS Linux 中禁止某个 IP 范围访问互联网

我有一个 VPN,我的服务器经常将数据发送到通过 VPN 路由的私有 IP 地址。当 OpenVPN 建立或终止时,它会启用/禁用路由。

我想将该私有 IP 范围从主 Internet 接口 (eth0) 路由出去。有没有一种简单的方法可以做到这一点,而不会干扰来自 VPN 软件的路由命令?

Iptables 不会这样做。我试过了

iptables -A OUTPUT -i eth0 -p tcp -d 192.168.0.0/16 -j REJECT

但是在输出链中指定接口时 iptables 不起作用。

有人知道是否有办法仅在特定接口(eth0)上添加虚拟路由,而不会干扰可能使用该路由的其他接口?

附言:我知道 192.168.0.0/16 不是 INTERNET 可路由的,但出于安全原因,希望确保在另一个本地服务器或网络设备开始在私有子网上监听的罕见情况下不会有数据泄露。

答案1

您的 iptables 规则中的接口规范是落后的。

您指定:

iptables -A OUTPUT -i eth0 -p tcp -d 192.168.0.0/16 -j REJECT

使用-i匹配流量进入指定接口上的系统。

相反,你想匹配流量离开命名接口上的系统,这是通过完成的-o

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.0.0/16 -j REJECT

(您可能不想-p tcp进入那里,否则非 TCP 流量可能会通过。)

答案2

除了 Michael 的回答之外,我认为应该阻止FORWARD链中的流量,因为OUTPUT链仅适用于本地生成的数据包和从防火墙发出的数据包。据我所知,它不适用于路由数据包。

答案3

您已经获得了使用 iptables 执行此操作所需的答案。

如果您想通过路由来实现,一个好方法是拥有一条 192.168.0.0/16 的路由,并让您的 VPN 服务器向您发送两条更具体的路由,在您的情况下,这两条路由将是 192.168.0.0/17 和 192.168.128.0/17

/16 路由将被修复并且为空路由:

ip route add blackhole 192.168.0.0/16

您的 vpn 服务器 (或 vpn-up 脚本) 将为您提供其他内容:

ip route add 192.168.0.0/17 via <VPNGW>
ip route add 192.168.128.0/17 via <VPNGW>

这实际上是def1OpenVPN 中的选项所做的,它可以覆盖默认网关而不干扰现有路由。

相关内容