在Linux的發行版本中,都存在一個/proc/目錄,有的也稱它為Proc文件系統。在這個目錄中,包括了一些特殊的文件,不僅能用來反映內核的現行狀態和查看硬件信息,而且,有些文件還允許用戶來修改其中的內容,以調節內核的現行工作狀態,例如/proc/sys/子目錄下的文件。
與/proc/目錄中其它目錄不相同的是,/proc/sys/目錄下的文件不僅能提供系統的有關信息,而且還允許用戶立即停止或開啟內核的某些特性及功能。在/proc/sys/目錄中的/proc/sys/net/子目錄更是與網絡息息相關,我們可以通過設置此目錄下的某些文件來開啟與網絡應用相關的特殊功能,同時,也可以通過設置這個目錄下的某些文件來保護我們的網絡安全。因此,作為一名Linux下的網絡管理員,就很有必要詳細了解/proc/sys/net/目錄下文件的各種功能和設置方法,讓它能更好地為我們工作。
一、/proc/sys/net/目錄說明。
/proc/sys/net/目錄主要包括了許多網絡相關的主題,例如:appletalk/,ethernet/,ipv4/,ipx/,及ipv6/。通過改變這些目錄中的文件,網絡管理員能夠在系統運行時調整相關網絡參數。雖然在Linux中還有很多有關網絡的配置方法,但熟悉此目錄中的相關內容對網絡應用是有很大的幫助的。
在/proc/sys/net/目錄下有兩個目錄,與現在的IPV4網絡的運行息息相關,調整這兩個目錄下的某些文件的參數,能為我們的網絡應用帶到意想不到的效果,這兩個目錄就是/proc/sys/net/core/目錄和/proc/sys/net/ipv4/目錄,下面筆者將會對這兩個目錄中的重要文件分別作一個詳細的說明。
1、/proc/sys/net/core/目錄。
此目錄中包括許多設置用來控制Linux內核與網絡層的交互,即當網絡有什麼動作時,內核做出什麼樣的相應反應。
在其中有以下的一些重要文件:
(1)、message_burst:設置每十秒寫入多少次請求警告;此設置可以用來防止DOS攻擊,缺省設置為50;
(2)、message_cost:設置每一個警告的度量值,缺省為5,當用來防止DOS攻擊時設置為0;
(3)、netdev_max_backlog:設置當個別接口接收包的速度快於內核處理速度時允許的最大的包序列,缺省為300;
(4)、optmem_max:設置每個socket的最大補助緩存大小;
(5)、rmem_default:設置接收socket的缺省緩存大小(字節);
(6)、rmem_max:設置接收socket的最大緩存大小(字節);
(7)、wmem_default:設置發送的socket缺省緩存大小(字節);
(8)、wmem_max:設置發送的socket最大緩存大小(字節)。
2、/proc/sys/net/ipv4/目錄。
此目錄中的內容用來添加網絡設置,在其中的許多設置,可以用來阻止對系統的攻擊,或用來設置系統的路由功能。
其中有以下的這些重要的文件:
(1)、icmp_destunreach_rate、icmp_echoreply_rate、icmp_paramprob_rate、icmp_timeexeed_rate:設置發送和回應的最大icmp包的速率,最好不要為0;
(2)、icmp_echo_ignore_all和icmp_echo_ignore_broadcasts:設置內核不應答icmp echo包,或指定的廣播,值為0是允許回應,值為1是禁止;
(3)、ip_default_ttl:設置IP包的缺省生存時間(TTL),增加它的值能減少系統開銷;
(4)、ip_forward:設置接口是否可以轉發包,缺省為0,設置為1時允許網絡進行包轉發;
(5)、ip_local_port_range:當本地需要端口時指定TCP或UDP端口范圍。第一數為低端口,第二個數為高端口;
(6)、tcp_syn_retries:提供限制在建立連接時重新發送回應的SYN包的次數;
(7)、tcp_retries1:設置回應連入重送的次數,缺省為3;
(8)、tcp_retries2:設置允許重送的TCP包的次數,缺省為15。
二、/proc/sys/net/目錄下文件的設置方法。
在了解了/proc/sys/net/core/目錄和/proc/sys/net/ipv4/目錄中一些重要文件的意義和作用後,下面說說如何設置這兩個目錄中的這些重要文件來為我們工作的。
讀者應該了解,在Linux系統中,要改變某種服務或設備的工作狀態和功能,主要是通過使用命令方式和直接修改它的配置文件方式來達到目的,對於這兩個目錄下的文件,我們也可以通過這兩種方式來修改這些文件內容中的值,使它們按照我們的意圖工作。
在進行設置之前,應當注意的是,當你確定要修改某個文件的當前值時,一定要保證輸入的命令格式和值的內容都是正確的,因為任何的錯誤設置都會引起內核的不穩定,如果你不小心造成了這種問題,你就不得不重新引導系統了。在下面的說明中,筆者會將注意的地方特別說明出來的。
首先來看看如何使用命令方式來修改這兩個目錄下文件的。我們可以通過echo和sysctl這兩個命令來修改這兩個目錄中的文件,下面筆者將這兩個命令的使用方法分別列出來。
1、sysctl命令是為設置這兩個目錄中的文件而定制的,它被默認安裝在/sbin/目錄中, 我們可以通過使用此命令來顯示和設置/proc/sys/net/目錄下的文件內容。例如:/sbin/sysctl -a命令用來顯示此目錄下的所有文件配置內容;/sbin/sysctl -w命令用來修改此目錄下指定文件中的變量值,如:/sbin/sysctl -w net.ipv4.ip_forward="1"用來設置允許IP包轉發。其它的參數,讀者可以通過輸入/sbin/sysctl –h命令來得到,在這裡就不再具體全部列出了。要注意的是,這個命令的使用需要管理員權限的,如果用戶不是以管理員身份登錄的,在使用此命令前用SU命令得得管理權限後再操作。
2、/proc/sys/net/目錄下的文件內容也可以通過用echo命令來修改。例如:echo 1 > /proc/sys/net/ipv4/ip_forward用來設置允許IP包轉發;echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all用來設置不回應ICMP ECHO包。在使用echo命令時,還應特別注意此命令的輸入格式,即在echo命令和值之間,以及值與在於符號(>)之間,在於符號與要修改的文件路徑之間都必需有一個空格。而且,在這兩個目錄中的有些文件有不上一個的值,所以,如果你想一次性傳遞多個值,那麼,每一個值之間也應保證用空格隔開。同時也要注意的是,用此方法修改/proc/sys/net/目錄下文件中的內容在系統重新啟動後,所設置的內容會全部變為默認值,因此,如果要想設置的值永久有效,可以直接把這個命令加入到/ect/rc.d/rc.local文件中,在這裡,這個文件的路徑是指Red Hat Linux發行版本中的,其它發行版本讀者根據具體情況來定。如果命令項太多,也可以把這些命令項編寫成一個腳本後,加上可執行權限,再放到這個文件中,這樣當系統啟動時,就會按/etc/rc.d/rc.local中的設置自動執行。如果你不想修改/etc/rc.d/rc.local文件,那麼筆者推薦你使用/sbin/sysctl命令。
使用命令方式設置/proc/sys/net/目錄下的文件固然方便易行,但有一部分讀者更喜歡直接修改它們的配置文件的方式,因為這種方式更加直觀,但它比較適合對系統了解比較深的用戶。
與其它服務或設備不同的是,Linux系統只為/proc/sys/net/目錄提供了一個配置文件,那就是/ect/sysctl.conf,用戶可以通過直接編輯/ect/sysctl.conf配置文件,來修改增加相應/proc/sys/net/目錄下文件內容中的變量的值,這樣當系統啟動時就會讀取此文件中的配置內容來設置相應的項。用vi來編輯此文件是非常簡單的,此文件中內容格式也非常清晰易讀,如其中有如下條目:net.ipv4.ip_forward=0,把值修改為1後就打開IP包轉發。其實,用/sbin/sysctl命令修改和直接編輯 /etc/sysctl.conf文件內容具有相同的效果,因此,為了安全,推薦用戶優先使用/sbin/sysctl命令方式。
到這裡,想必讀者已經對/proc/sys/net/目錄下的/proc/sys/net/core/和/proc/sys/net/ipv4/這兩個目錄,已經有了一定了解了。可是,這只是筆者為了突出/proc/目錄與IPV4網絡的作用而特別選出來說明,其實,在/proc/目錄下,還有許多的文件,雖然不能被用戶如上述的兩個目錄那樣可以被設置,但是,可以通過這些文件來了解系統詳細情況和現行的運行狀態,讀者可以從網絡上找到這個目錄的詳細說明。