Linux 中动态重新配置和调整介绍


Linux有它自己调整内核和连网参数的特殊方式。Linux没有提供一个普通配置文件供读取来设置这些参数,而是把能调整的每个变量的表示都放在虚拟文件系统/proc 下。连网变量都在目录/proc/sys/net/ipv4下:

名字里带有rate和max的变量有许多都可以防止发生DoS(denial of service,拒绝服务)攻击。conf子目录包含的变量都是按接口来设置的。它包含子目录all和default,还有每个接口的一个子目录(包括环回接口)。每个子目录都包含一组相同的文件。

如果您改动了子目录 all 里的什么地方,那么您的改动会施加到所有的接口上。如果您修改了,比如说子目录eth0里的同一个变量,那么只有这个接口才受影响。defaults子目录包含原来带有的默认值。

neigh目录里也为每个接口包含一个子目录。每个子目录的文件为那个特定接口管理ARP表以及发现IPv6邻居。下面列出了若干变量,以gc开头的那些变量(代表garbage collection)决定了ARP表项是怎样超期和被丢弃的。

用cat可以看到一个变量的值,用重定向到适当文件名的echo命令可以设置它的值。例如,命令:

$ cat icmp_echo_ignore_broadcasts 0

显示这个变量的值是0,这意味着不会忽略广播ping。要把它设置为1(从而避免遭受smurf类的拒绝服务攻击),可以在/proc/sys/net下运行:

$ sudo sh -c "echo 1 > icmp_echo_ignore_broadcasts"

在您调整这些变量的时候,您一般是通过您正在调整的网络登录进来的,所以要小心!您可能会把事情搞糟,结果不得不从控制台重新启动才能恢复,如果系统碰巧在是阿拉斯加的Point Barrow,时间又是1月份,那可就麻烦了。在您考虑在一台工作主机上动手之前,先在台式机上试着调整一下这些变量。

若要永久改变这些参数的任何一个(或者更准确地说,在系统每次启动的时候再次重置它们),就要把正确的变量加到/etc/sysctl.conf文件里,在系统引导时sysctl命令会读这个文件。sysctl.conf文件的格式为 variable=value,而不是您在 shell 里手工修改这个变量时要运行的命令 echo value > variable。变量名是相对于/proc/sys 的路径名,如果愿意,您还可以使用圆点(.)来代替斜线(/)。例如,/etc/sysctl.conf文件里有下面两行中的任何一行都会关闭(这台主机的)IP转发功能。

net.ipv4.ip_forward=0 net/ipv4/ip_forward=0

/usr/src/linux/Documentation/proc.txt这个文档是由SUSE的爱好者写的,它是有关用/proc调整内核不错的入门教材22。它告诉您各个变量的真实含义是什么,有时还给出了建议值。文件proc.txt稍微有点儿过时,因为写Linux代码的人似乎比写这个文档的人速度快一些


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3