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代碼的人似乎比寫這個文檔的人速度快一些