歡迎您光臨本站 註冊首頁

黑客技術:分類防範對Linux的DoS攻擊

←手機掃碼閱讀     火星人 @ 2014-03-29 , 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模式的工作原理。

  和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選項設定同時運行的併發進程數。例如:
CODE:
instances=20

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

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

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

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

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

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

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

4.限制負載

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

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

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

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

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

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

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

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

rlimit_cpu=20

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

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

針對stand-alone的DoS防範

[火星人 ] 黑客技術:分類防範對Linux的DoS攻擊已經有639次圍觀

http://coctec.com/docs/linux/show-post-204060.html