Linux核心網路引數的意義及應用(轉)

ba發表於2007-08-16
Linux核心網路引數的意義及應用(轉)[@more@]Linux核心網路引數的意義及應用

太原新聞網 2006-10-18 15:07:16
來源:網易

  摘要:

  本文主要介紹了linux系統位於目錄/proc/sys/net/ipv4/下的部分核心網路引數,同時對透過linux核心網路引數的調整來提高linux系統的安全性和穩定性提出了自己的見解。從而為系統管理員進一步增強網路的安全性和系統的穩定性提供了參考。

  在linux中,我們可以根據不同的需求來調整/proc/sys/net/ipv4/目錄下的核心網路引數,透過合理的配置這裡核心網路引數,從而達到提高網路的安全性和系統的穩定性的目的。因為這方面的文獻比較少,所以我們不可能進行全面的介紹。現在已經有linux組織正在從事這方面的文件的寫作,相信在不久的將來,我們就會看到比較完整的文件。下面我們就來看一看一些比較常用的核心網路引數。

  注意:

  1. 引數值帶有速度(rate)的引數不能在loopback介面上工作。

  2.因為核心是以HZ為單位的內部時鐘來定義速度的,通常速度為100HZ,所以設定一個引數值為100就表示允許1個包/秒,假如為20則允許5個包/秒。

  3.所有核心網路引數配置檔案位於/proc/sys/net/ipv4/目錄下。

  一、 icmp相關核心配置引數

  概述:通常我們使用icmp包來探測目的主機上的其它協議(如tcp和udp)是否可用。比如包含“destination unreachable”資訊的icmp包就是最常見的icmp包。

  1.icmp_destunreach_rate:設定內容為“Destination Unreachable”icmp包的響應速率。設定值應為整數。

  應用例項:

  假設有A、B兩部主機,首先我們在主機A上執行以下ipchains語句:ipchains -A input -p icmp -j REJECT。這裡的REJECT和DENY不同,DENY會丟掉符合條件的包如同沒有接收到該包一樣,而REJECT會在丟掉該包的同時給請求主機發回一個“Destination Unreachable”的icmp。

  然後在主機B上ping主機A,這時候我們會發現“Destination Unreachable”icmp包的響應速度是很及時的。接著我們在主機A上執行:

  echo "1000" > /proc/sys/net/ipv4/icmp_destunreach_rate

  也即每10秒鐘響應一個“Destination Unreachable”的icmp包。這時候再從主機B上ping主機A就會發現“Destination Unreachable”icmp包的響應速度已經明顯變慢,我很好奇的測試了一下,發現剛好是每10秒響應一次。

  2.icmp_echo_ignore_broadcasts:設定是否響應icmp echo請求廣播,設定值應為布林 值,0表示響應icmp echo請求廣播,1表示忽略。注意:windows系統是不響應icmp echo請求廣播的。

  應用例項:

  在我的RedHat6.x和RedHat7上該值預設為0,這樣當有個用ping我的伺服器所在的網段的網路地址時,所有的linux伺服器就會響應,從而也能讓讓該使用者得到我的伺服器的ip地址,可以執行:

  echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

  來關閉該功能。從而防止icmp風暴,防止網路阻塞。

  3.icmp_echoreply_rate:設定系統響應icmp echo請求的icmp包的響應速度,設定值為整數。

  應用例項:

  假設有A、B兩部主機,首先我們在主機B上ping主機A,可以看到響應很正常,然後在主機A上執行:

  echo "1000" > /proc/sys/net/ipv4/icmp_echoreply_rate

  也即每10秒鐘響應一個icmp echo請求包。然後再ping主機A就可以看到響應速度已經變成10秒一次。最好合理的調整該引數的值來防止icmp風暴。

  4.icmp_echo_ignore_all:設定系統是否忽略所有的icmp echo請求,如果設定了一個非0值,系統將忽略所有的icmp echo請求。其實這是icmp_echoreply_rate的一種極端情況。引數值為布林值,1表示忽略,0表示響應。

  5. icmp_paramprob_rate:當系統接收到資料包的損壞的ip或tcp頭時,就會向源發出一個包含有該錯誤資訊的icmp包。這個引數就是用來設定向源傳送這種icmp包的速度。當然,在通常情況下ip或tcp頭出錯是很少見的。引數值為整數。

  6.icmp_timeexceed_rate:資料包在網路上傳輸時,其生存時間(time to live)欄位會不斷減少,當生存時間為0時,正在處理該資料包的路由器就會丟棄該資料包,同時給源主機傳送一個“time to live exceeded”的icmp包。該引數就是用來設定這種icmp包的傳送的速度。當然,這通常用於充當路由器的linux主機。


 二、ip相關核心配置引數

  linux核心網路引數中關於ip的配置引數通常是用來定義或調整ip包的一些特定的引數,除此之外還定義了系統的一些網路特性。

  1.ip_default_ttl:設定從本機發出的ip包的生存時間,引數值為整數,範圍為0~128,預設值為64。在windows系統中,ip包的生存時間通常為128。如果你的系統經常得到“Time to live exceeded”的icmp回應,可以適當增大該引數的值,但是也不能過大,因為如果你的路由的環路的話,就會增加系統報錯的時間。

  2.ip_dynaddr:該引數通常用於使用撥號連線的情況,可以使系統動能夠立即改變ip包的源地址為該ip地址,同時中斷原有的tcp對話而用新地址重新發出一個syn請求包,開始新的tcp對話。在使用ip欺騙時,該引數可以立即改變偽裝地址為新的ip地址。該引數的引數值可以是:

  1:啟用該功能

  2:使用冗餘模式啟用該功能

  0:禁止該功能

  應用例項:

  在使用ipchains配置ip欺騙帶動區域網共享一個ppp連線上網時,有時會出現剛開時連線一個站點連不通,再次重新整理又可以連線的情況,這時候就可以設定該引數的值為1,從而立即改變偽裝地址為新的ip地址,就可以解決這類問題。命令為:

  echo "1" > /proc/sys/net/ipv4/ip_dynaddr

  3.ip_forward:可以透過該引數來啟用包轉發功能,從而使系統充當路由器。引數值為1時啟用ip轉發,為0時禁止ip轉發。注意,我們可以在單網路卡或雙網路卡的主機上實現ip轉發。

  應用例項:

  假設我們使用一部裝有雙網路卡的linux主機充當防火牆,這時候我們就必須執行以下命令來開啟ip轉發功能:  

  echo "1" > /proc/sys/net/ipv4/ip_forward

  4. ip_local_port_range:設定當本地系統向外發起tcp或udp連線請求時使用的埠範圍。設定值為兩個整數,預設為“1024 4999”。

  應用例項:

  echo "1450 6000" > /proc/sys/net/ipv4/ip_local_port_range



 三、 tcp相關核心配置引數

  透過tcp配置引數可以控制tcp會話過程中的各個方面。

  a) tcp_fin_timeout:在一個tcp會話過程中,在會話結束時,A首先向B傳送一個fin包,在獲得B的ack確認包後,A就進入FIN WAIT2狀態等待B的fin包然後給B發ack確認包。這個引數就是用來設定A進入FIN WAIT2狀態等待對方fin包的超時時間。如果時間到了仍未收到對方的fin包就主動釋放該會話。引數值為整數,單位為秒,預設為180秒。

  b) tcp_syn_retires:設定開始建立一個tcp會話時,重試傳送syn連線請求包的次數。

  引數值為小於255的整數,預設值為10。假如你的連線速度很快,可以考慮降低該值來提高系統響應時間,即便對連線速度很慢的使用者,預設值的設定也足夠大了。

  3.tcp_window_scaling:設定tcp/ip會話的滑動視窗大小是否可變。引數值為布林值,為1時表示可變,為0時表示不可變。Tcp/ip通常使用的視窗最大可達到65535 位元組,對於高速網路,該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動視窗大小增大數個數量級,從而提高資料傳輸的能力。

  四、 有關防止ip欺騙攻擊的核心網路引數

  假設有如下的情景:

  1.1.1.1 2.2.2.2

  在預設狀態下,路由器根據包的目的地址進行轉發,所以路由器預設是對來自任何地方

  的包進行轉發的。如上圖所示,假如路由器的2.2.2.2介面(也即廣域網介面)接收到一個包,該包的源地址為1.1.1.100(也即為Intranet地址),雖然這是不可能或者說是不合理的,但是由於路由器的特性,路由器還是會將這個不合法的包轉發到Intranet。從而讓駭客有了可乘之機,為其進行ip欺騙攻擊開啟了方便之門。

  幸好,我們可以透過Linux的核心系統引數“反向路徑過濾”來防止這種情況,該引數位於/proc/sys/net/ipv4/conf/下的各個子目錄中的rp_filter檔案。引數值為整數,可能的值有:

  2 - 進行全面的反向路徑過濾,推薦在邊緣路由器上使用。但是要注意,在複雜的網路環境中,如果使用了靜態路由或rip、ospf路由協議時,不推薦使用該值。

  1 - 是該引數的預設值,它只對直接連線的網路進行反向路徑過濾。

  0 - 不進行反向路徑過濾。

  應用例項:

  建立如下的指令碼,檔名為rp.sh

  #/bin/bash for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 2 > $i done

  然後更改檔案許可權chmod 755 rp.sh,最後執行 ./rp.sh。

  五、 針對每一網路介面的核心網路引數

  透過針對每一網路介面的核心網路引數,你可以為諸如eth0、eth1等具體的網路介面指定響應的核心網路引數。注意:/proc/sys/net/ipv4/conf/all/下的引數將應用於所有的網路介面。

  1. accept_redirects:該引數位於/proc/sys/net/ipv4/conf/DEV/accept_redirects(DEV表示具體的網路介面),如果你的主機所在的網段中有兩個路由器,你將其中一個設定成了預設閘道器,但是該閘道器在收到你的ip包時發現該ip包必須經過另外一個路由器,這時這個路由器就會給你發一個所謂的“重定向”icmp包,告訴將ip包轉發到另外一個路由器。引數值為布林值,1表示接收這類重定向icmp 資訊,0表示忽略。在充當路由器的linux主機上預設值為0,在一般的linux主機上預設值為1。建議將其改為0,或者使用“安全重定向”(見下文)以消除安全性隱患。

  2. log_martians:將包含非法地址資訊的ip包記錄到核心日誌。引數值為布林值。

  應用例項:

  上面我們講過rp_filter反向路徑過濾引數,同時我們可以執行下面的語句

  echo “1” > /proc/sys/net/ipv4/conf/all/log_martians

  然後就可以將進行ip假冒的ip包記錄到/var/log/messages。

  3. forwarding:啟用特定網路介面的ip轉發功能。引數值為布林值,1表示進行記錄。

  應用例項:  

  echo "1" > /proc/sys/net/ipv4/conf/eth0/forwarding

  4. accept_source_route:是否接受含有源路由資訊的ip包。引數值為布林值,1表?nbsp; Linux核心網路引數的意義及應用

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961999/,如需轉載,請註明出處,否則將追究法律責任。

相關文章