在我的服务器上,我有一条到 interface 的默认路由eth0
。它具有公共互联网地址并面向 ISP 网络。我启用了数据包转发,并且很少有具有私有10.x.x.x
地址的本地接口/网桥。此外,所有传出到 ISP 网络的包都被伪装了。问题:如果我理解正确,任何到不存在192.168.x.x
地址的数据包都将通过公共服务器接口(上行链路)转发到我的 ISP。这是不希望的。
如何配置 linux 以防止通过公共网络接口转发任何具有私有网络地址目标的数据包?我想仅仅添加一个 iptables 规则是不够的,因为有多个标准的专用网络空间(10.xxx、192.16.xx、172.16.xx 可能还有其他。除了 ipv6 地址)。是否有任何 iptables 插件/系统策略来实现这一点?我希望一些系统策略将接口标记为面向互联网的上行链路。
推理:我的 ISP 不喜欢任何带有专用网络范围目标的软件包。我正在使用通过 VPN 访问我的工作的 DNS 服务器。因此,当 VPN 出现故障时,我的 ISP 会收到对专用网络地址的 DNS 请求并锁定整个互联网连接。他们说这样做是为了安全(仅适用于某些病毒将我的系统 DNS 覆盖为自定义 DNS 的情况)。
您有一个公开编号的接口
eth0
,这是您的默认路由,并且您不希望从任何私有编号的接口转发任何流量到公共接口。尝试将规则放在
FORWARD
链条中的正确位置作为练习。您也应该能够从那里推广到 ipv6。编辑:您可以关闭所有 v4 转发
echo 0 > /proc/sys/net/ipv4/ip_forward
和所有 v6 转发echo 0 > /proc/sys/net/ipv6/conf/all/forwarding
。但是您并没有说要关闭所有转发,只是“通过公共网络接口从专用网络地址转发或向专用网络地址转发”。我不知道有任何/proc
结构可以仅禁用 RFC1918 流量的转发,如果有的话我会感到惊讶。任何与系统上的路由规则不匹配的数据包都将被定向到默认路由(如果有)。默认情况下,如果您在给定网络上分配了 IP,则会自动添加路由规则,将该流量转发到分配的接口。如果您的服务器不在您想要阻止的这些网络上,那么最好检查产生该流量的任何内容以完全摆脱它,否则您仍然会在本地网络设备上打扰您。
IANA 专用网络 IP 范围定义得非常好,只有 4 个,甚至可以在这篇维基百科文章中看到。我建议您在允许您实际使用的范围之后,将防火墙出站阻止规则添加到这些网络范围,作为目的地。
iptables 命令示例:
注意:发往这些范围的流量在 ISP 上会被丢弃,因为它们将无处可转发。但是,如果您泄漏这些软件包,有些可能会对您的流量施加限制。此外,如果您担心 ISP 级别的流量检查或泄漏,这远非您需要做的唯一事情来保护自己。