歡迎您光臨本站 註冊首頁

分類防範對Linux的DoS攻擊

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

由於拒絕服務攻擊工具的泛濫,及所針對的協議層的缺陷短時無法改變的事實,拒絕服務攻擊也就成為流傳廣泛、極難防範的一種攻擊方式。雖然到目前為止,沒有一個絕對的方法可以制止這類攻擊;但對於不同的攻擊方式,還是有一些解決方法的。本文以Redhat Linux 9.0為例,介紹如何分類防範DoS。

  Linux伺服器的兩種守護進程

  1.stand-alone模式

  stand-alone方式是Unix傳統的C/S模式的訪問模式。伺服器監聽(Listen)在一個特點的埠上等待客戶端的聯機。如果客戶端產生一個連接請求,守護進程就創建(Fork)一個子伺服器響應這個連接,而主伺服器繼續監聽,以保持多個子伺服器池等待下一個客戶端請求。Stand-alone模式的工作原理如圖1所示。

  工作在stand-alone模式下的網路服務有route、gated。大家比較熟悉的Web伺服器是Apache和郵件伺服器Sendmail。在Apache這種負載很大的伺服器上,預先創子伺服器可以提高客戶的服務速度。

  在Linux系統中通過stand-alone工作模式啟動的服務由/etc/rc.d/下面對應的運行級別當中的符號鏈接啟動。

  2.xinetd模式

  從守護進程的概念可以看出,對於系統所要通過的每一種服務都必須運行一個監聽某個埠連接所發生的守護進程,這通常意味著資源浪費。為了解決這個問題,Linux引進了“網路守護進程服務程序”的概念。

  Redhat Linux 9.0使用的網路守護進程是xinetd(eXtended InterNET daemon)。和stand-alone模式相比,xinetd模式也稱Internet Super-Server(超級伺服器)。xinetd能夠同時監聽多個指定的埠,在接受用戶請求時能根據用戶請求埠的不同,啟動不同的網路服務進程來處理這些用戶請求。我們可以把xinetd看成一個管理啟動服務的管理伺服器,它決定把一個客戶請求交給哪個程序處理,然後啟動相應的守護進程。xinetd模式的工作原理如圖2所示。

  和stand-alone工作模式相比,系統不想要每一個網路服務進程都監聽其服務埠,運行單個xinetd就可以同時監聽所有服務埠,這樣就降低了系統開銷,保護了系統資源。但是對於訪問量大、經常出現併發訪問時,xinetd想要頻繁啟動對應的網路服務進程,反而會導致系統性能下降。

  察看系統為Linux服務提供哪種模式方法,在Linux命令行下使用pstree命令,可以看到兩種不同方式啟動的網路服務。一般來說系統一些負載高的服務,如Sendmail、Apache服務是單獨啟動的,而其他服務類型都可以使用xinetd超級伺服器管理,系統默認使用xinetd的服務可以分為如下幾類:

  標準互聯網服務:telnet、ftp

  信息服務:finger、netstat、systat

  RPC服務:rquotad、rstatd、rusersd、sprayd、walld

  BSD服務:comsat、exec、login、ntalk、shell、talk

  內部服務:chargen、daytime、echo、servers、services time

  安全服務:irc

  其他服務:name、tftp、uucp

  小提示:從原理上Apache、sendmail也可以使用xinetd模式啟動,但是您需要硬體檔次非常高的伺服器。

針對xinetd模式的DoS防範

  xinetd提供類似於inetd+tcp_wrapper的功能,但是更加強大和安全,能有效防止DoS:

  1.限制同時運行的進程數

  通過設置instances選項設定同時運行的併發進程數。例如:

  instances=20

  說明:當伺服器被請求連接的進程數達到20個時,xinetd將停止接受多出部分的連接請求,直到請求連接數低於設定值為止。

  2.限制一個IP地址的最大連接數

  通過限制一個主機的最大連接數來防止某個主機獨佔某個服務。例如:

  per_source=5

  說明:單個IP地址的連接數是5個。

  3.限制日誌文件大小,防止磁碟空間被填滿

  許多攻擊者知道大多數服務需要寫入日誌。入侵者可以構造大量的錯誤信息發送出來,伺服器記錄這些錯誤,很可能就造成日誌文件非常龐大,甚至會塞滿硬碟。管理員面對大量的日誌,也很難發現入侵者真正的入侵途徑。因此,限制日誌文件大小是防範DoS的一個方法。例如:

  log_type FILE.1 /var/log/myservice.log 8388608 15728640

  說明:這裡設置的日誌文件FILE.1臨界值為8MB,到達此值時syslog文件中會出現警告,到達15兆,系統會停止所有使用這個日誌系統的服務。

  4.限制負載

  xinetd還可以使用限制負載的方法防範DoS。用一個浮點數作為負載係數,當負載達到這個數目時,該服務將暫停處理後續的連接。例如:

  max_load=2.8

  說明:當一項系統負載達到2.8時,所有服務將暫時終止,直到系統負載下降到設定值以下。

  當然,要使用這個選項,編譯時要加入-with-loadavg,xinetd將處理max-load配置選項,從而在系統負載過重時關閉某些服務進程,來實現某些拒絕服務攻擊。

  5.限制所有伺服器數目(連接速率)

  xinetd可以使用cps選項設定連接速率。例如:

  cps=25 60

  說明:第一個參數表示每秒可以處理的連接數,如果超過了這個連接數,進入的連接將被暫時停止處理;第二個參數表示停止處理多少秒後繼續處理先前暫停處理的連接。即伺服器最多啟動25個連接,如果達到這個數目將停止啟動新服務60秒。在此期間不接受任何請求。

  6.限制對硬體資源的利用

  通過rlimit_as和rlimit_cpu兩個選項可以有效限制一種服務對內存、中央處理器的資源佔用。例如:

  rlimit_as=8M

  rlimit_cpu=20

  說明:此設定限制了對伺服器硬體資源的佔用,最多可用內存為8M,CPU每秒處理20個進程。

  總結:xinetd的一個重要功能是它能夠控制從屬服務可以利用的資源量,通過以上設置可以達到這個目的,有助於防止某個xinetd服務大量佔用系統,從而導致“拒絕服務”情況的出現。

針對stand-alone的DoS防範

  Linux下以stand-alone模式運行的伺服器主要是Apache、Sendmail。

  1.Apache伺服器防範DoS措施

  Apache伺服器對拒絕攻擊的防範主要通過軟體Apache DoS Evasive Maneuvers Module來實現。它是一款mod_access的替代軟體,可以對抗DoS攻擊。該軟體可以快速拒絕來自相同地址對同一URL的重複請求,這是通過內部一張各子進程的哈希表查詢來實現的。軟體下載鏈接:http://online.securityfocus.com/data/tools/dospatch.tar.gz,軟體安裝的配置可以查看相關頁面。

  另外,在Apache配置文件中,有一些安全相關的指令可以使用。http://httpd.apache.org/docs/mod/directives.html。使用以下指令可以幫助您減小DoS的威脅:

  LimitRequestBody:數字參數,控制HTTP請求的大小。

  LimitRequestFields:數字參數,控制請求頭的數目。

  KeepAlive:設置連接的生存期。

  KeepAliveTimeout:限制等待請求的時間。

  使用以下指令可以幫助您減少緩衝區溢出的危險:

  LimitRequestFieldSize:限制每個請求頭的大小。

  LimitRequestLine:限制每個請求行的大小。

  此外,Apache伺服器管理員還應該經常去http://www.apache.org/dist/httpd/查看、下載補丁程序,以確保Web伺服器的安全。

  2.Sendmail伺服器防範DoS措施

  由於電子郵件的性質,一個要攻擊郵件伺服器的攻擊者可以輕易地使用郵件來充斥伺服器,從而導致DoS。通過設置/etc/mail/sendmail.mc以下目錄的限度,這類攻擊的有效性就會大受限制。

  confCONNECTION_RATE_THROTTLE:伺服器每秒能夠接受的連接數量。按照默認設置,Sendmail是不限制連接數量。如果連接數量達到限度,以後的連接就會被延遲。推薦值:40。

  confMAX_DAEMON_CHILDREN:伺服器能夠Fork出的子進程的最大數量。按照默認設置,Sendmail不限制子進程的數量。如果限度被設置,達到限度后的連接就會被延遲。推薦根據內存容量設置:128M內存建議值為40。

  confMIN_FREE_BLOCKS:文件系統用來接受標準SMTP(簡單郵件傳輸協議)郵件的隊列中的最少自由塊數,越小越容易被攻擊致命。默認為100塊,推薦值為4000或者更大。

  confMAX_HEADERS_LENGTH:消息頭可接受的最大限度(以位元組為單位)。默認為不限制,推薦值是64。

  confMAX_MESSAGE_SIZE:單個消息可接受大小的最大限度(以位元組為單位)。越大越容易被攻擊致命。默認為不限制,推薦值為5242880。

  另外,不要把郵件假離線目錄/var/spool/mail/放在NFS共享文件卷上。因為NFS對用戶組群ID沒有控制,幾個UID相同的用戶可以收到和閱讀彼此的郵件。

  限制整體資源的佔用

  還可以對系統資源做限制,使得系統增強抗DoS能力。

  編輯/etc/security/limits.conf文件,添加下面幾行:

  * hard core 0

  * hard rss 10000

  * hard nproc 30

  說明:“core 0”表示禁止創建core文件;“nproc 30”把最多進程數限制到30;“rss 10000”表示除了root之外,其他用戶都最多只能用10MB內存。 “*”表示的是所有登錄到系統中的用戶。

  上面這些對登錄到系統中的用戶有效。通過這些限制,就能更好地控制系統中的用戶對進程、core文件和內存的使用情況。最後編輯“/etc/pam.d/login”文件,在文件末尾加入:

  session required /lib/security/pam_limits.so

來源:賽迪網



[火星人 ] 分類防範對Linux的DoS攻擊已經有361次圍觀

http://coctec.com/docs/security/show-post-72645.html