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

我有一个VPN,我的服务器频繁地发送数据到私人IP地址,通过VPN路由。 当OpenVPNbuild立或死亡,它启用/禁用路由。

我想通过主要的Internet接口(eth0)将这个私有IP地址范围设置为空路由。 有没有一种简单的方法来做到这一点,而不会干扰来自VPN软件的路由命令?

iptables不会这样做。 我试过了

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

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

任何人都知道是否有一种方法可以将虚拟路由添加到特定的接口(eth0),而不会干扰可能使用该路由的其他接口?

Ps-我知道192.168.0.0/16不是INTERNET可路由的,但是出于安全原因,要确保没有数据在罕见的机会中被其他本地服务器或networking设备开始监听私有子网。

iptables规则中的接口规范是向后的。

你指定了:

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

使用-i匹配在命名接口上进入系统的stream量。

相反,您希望匹配在命名接口上离开系统的stream量,这是使用-o完成的。

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

(你可能不希望-p tcp在那里,否则非TCPstream量可能会通过。)

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

你已经得到了你需要用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> 

这实际上是OpenVPN中的def1选项覆盖默认网关而不def1现有路由。