内核有很多可以在不同环境下调整的参数。通常,预设的缺省值可以满足99%的环境要求,we don't call this the ">Advanced HOWTO for the fun of it!
有个很有趣的地方:/proc/sys/net,你应该看看。这里一开始并没有把所有的内容归档,但我们正在尽力如此。
有时候你需要看看Linux的内核源代码、读读Documentation/filesystems/proc.txt。绝大多数特性那里都有解释。
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/<interfacename>/log_martians
2. 深层设置
有很多参数可以修改。我们希望能够全列出来。在Documentation/ip-sysctl.txt中也有部分记载。
这些设置中的部分缺省值取决于你在内核配置时是否选择了“Configure as router and not host”。
Oskar Andreasson也有一个网页比我们讨论得更详细的网页:http://ipsysctl-tutorial.frozentux.net/