第13章 内核网络参数
13.1. 反向路径过滤
缺省情况下,路由器路由一切包,即使某些数据包“明显地”不属于你的网络。一个简单的例子就是私有IP空间溢出到了Internet上。如果你有一个网卡 带有去往195.96.96.0/24的路由,你不会期望从这里收到来自212.64.94.1的数据包。
很多人都希望关掉这个功能,所以内核作者们按照这种要求做了。你可以利用/proc下的一些文件来配置内核是否使用这个功能。这种方法就叫“反向路径过 滤”。基本上说,就是如果一个数据包的回应包不是从它来的网卡发出去,就认为这是一个伪造包,应该丢弃。
下面的片段将在所有的(包括将来的)网卡上启用这个功能:
# for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
> echo 2 > $i
> done
依照上面的例子,如果一个源地址是来自office+isp子网的数据包,却从Linux路由器的eth1口到达,那么它将被丢弃。同理,如果一个来自 office子网的数据包却声明它来自防火墙外面的某个地方,也会被丢弃。
上面说的是完整的反向路径过滤。却省情况是只基于直接与网卡相接的子网地址进行过滤。这是因为完整的反向路径过滤会破坏非对称路由(就是说数据包从一条路 来而从另一条路离开——比如你在网络中使用了动态路由(bgp、ospf、rip)或者比如卫星通讯,数据从卫星下行到路由器,上行数据则经过地面线路传 输。)。
如果你有这些情况,就可以简单地关掉卫星下行数据要进入那块网卡的rp_filter。如果你想看一看丢弃了哪些包,可以通过相同目录下的 log_martians文件通知内核向你的syslog中写日志。
# echo 1 >/proc/sys/net/ipv4/conf//log_martians
求助: is setting the conf/[default,all]/* files enough? - martijn