如何禁止通过接口转发数据包到私有networking地址

在我的服务器上,我有一个到eth0接口的默认路由。 它有公共的互联网地址,面向ISPnetworking。 我已经启用了数据包转发function,并且很less有私有的10.xxx地址的本地接口/网桥。 而且,所有打到ISPnetworking的包都被伪装了。 问题是:如果我理解正确,任何数据包到不存在的192.168.xx地址将通过公共服务器接口(上行链路)转发到我的ISP。 这是不希望的。

我该如何configurationlinux来防止通过公网接口转发任何带有私网地址的数据包? 我想只是添加一个单一的iptables规则是不够的,因为有多个标准的专用networking空间(10.xxx,192.16.xx,172.16.xx和其他人,还有ipv6地址)。 有没有任何iptables插件/系统的政策来完成? 我希望有一些系统策略将接口标记为面向Internet的上行链路。

推理:我的ISP不喜欢任何具有专用networking范围目的地的软件包。 我正在使用通过VPN访问我的工作的DNS服务器。 所以当VPN发生故障时,我的ISP会收到对私人networking地址的DNS请求,并locking整个互联网连接。 他们说这是为了安全(只是在某些病毒覆盖我的系统DNS到一个自定义的情况下)。

任何不匹配系统路由规则的数据包将被定向到默认路由(如果有的话)。 默认情况下,如果您在给定networking上分配了IP,则会自动添加路由规则,将该stream量转发到指定的接口。 如果你的服务器不在这些你想阻塞的networking上,那么最好检查一下产生这个stream量的东西,以便彻底摆脱它,否则你仍然会在本地networking设备上困扰你。

IANA私人networkingIP范围定义相当明确,只有4个,甚至可以在这个维基百科文章中看到。 build议您在允许实际使用的范围之后,将防火墙出站阻止规则添加到这些networking范围,作为目的地。

示例iptables命令:

 iptables -A FORWARD -d 10.0.0.0/8 -j REJECT iptables -A FORWARD -d 172.16.0.0/12 -j REJECT iptables -A FORWARD -d 192.168.0.0/16 -j REJECT ip6tables -A FORWARD -d fd00::/8 -j REJECT 

注意:stream向这些范围的stream量将丢弃在ISP上,因为它们将无处转发。 但是,如果您泄漏这些软件包,则可能会对您的stream量施加限制。 此外,如果您担心在ISP级别进行stream量检查或泄漏,那么这绝不是您需要做的唯一保护自己的事情。

你有一个公开编号的接口eth0 ,这是你的默认路由,你不希望任何通信从任何私人编号的接口转发出去。 尝试

 iptables -A FORWARD -o eth0 -j REJECT 

FORWARD链中把规则放在正确的位置是作为一个练习。 你也应该能够从那里推广到ipv6。

编辑 :你可以用echo 0 > /proc/sys/net/ipv4/ip_forwardclosures所有的v4转发,所有的v6转发都使用echo 0 > /proc/sys/net/ipv6/conf/all/forwarding 。 但是你没有说你想要所有的转发,只是通过公共networking接口转发“ 从或到私人networking地址 ”。 我不知道任何/proc结构,只禁用转发RFC1918stream量,我会很惊讶,如果有一个。