久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2025年度未來銀行科技服務商TOP100
全世界各行各業(yè)聯合起來,internet一定要實現!

SYN 攻擊原理以及防范技術

2004-02-24 eNet&Ciweek

  在TCP實現中,當收到客戶端的SYN請求時,服務器需要回復SYN+ACK包給客戶端,客戶端也要發(fā)送確認包給服務器。通常,服務器的初始序列號由服務器按照一定的規(guī)律計算得到或采用隨機數,但在SYN cookies中,服務器的初始序列號是通過對客戶端IP地址、客戶端端囗、服務器IP地址和服務器端囗以及其他一些安全數值等要素進行hash運算,加密得到的,稱之為cookie。當服務器遭受SYN攻擊使得backlog隊列滿時,服務器并不拒絕新的SYN請求,而是回復cookie(回復包的SYN序列號)給客戶端, 如果收到客戶端的ACK包,服務器將客戶端的ACK序列號減去1得到cookie比較值,并將上述要素進行一次hash運算,看看是否等于此cookie。如果相等,直接完成三次握手(注意:此時并不用查看此連接是否屬于backlog隊列)。

  在RedHat linux中,啟用SYN cookies是通過在啟動環(huán)境中設置以下命令來完成:

  # echo 1 > /proc/sys/net/ipv4/tcp_syncookies

  ■ 增加最大半連接數

  大量的SYN請求導致未連接隊列被塞滿,使正常的TCP連接無法順利完成三次握手,通過增大未連接隊列空間可以緩解這種壓力。當然backlog隊列需要占用大量的內存資源,不能被無限的擴大。

  WIN2000:除了上面介紹的TcpMaxHalfOpen, TcpMaxHalfOpenRetried參數外,WIN2000操作系統(tǒng)可以通過設置動態(tài)backlog(dynamic backlog)來增大系統(tǒng)所能容納的最大半連接數,配置動態(tài)backlog由AFD.SYS驅動完成,AFD.SYS是一種內核級的驅動,用于支持基于window socket的應用程序,比如ftp、telnet等。AFD.SYS在注冊表的位置:
HKLM\System\CurrentControlSet\Services\AFD\ParametersEnableDynamicBacklog值為1時,表示啟用動態(tài)backlog,可以修改最大半連接數?!?

MinimumDynamicBacklog表示半連接隊列為單個TCP端囗分配的最小空閑連接數,當該TCP端囗在backlog隊列的空閑連接小于此臨界值時,系統(tǒng)為此端囗自動啟用擴展的空閑連接(DynamicBacklogGrowthDelta),Microsoft推薦該值為20。


  MaximumDynamicBacklog是當前活動的半連接和空閑連接的和,當此和超過某個臨界值時,系統(tǒng)拒絕SYN包,Microsoft推薦MaximumDynamicBacklog值不得超過2000。

  DynamicBacklogGrowthDelta值是指擴展的空閑連接數,此連接數并不計算在MaximumDynamicBacklog內,當半連接隊列為某個TCP端囗分配的空閑連接小于MinimumDynamicBacklog時,系統(tǒng)自動分配DynamicBacklogGrowthDelta所定義的空閑連接空間,以使該TCP端囗能處理更多的半連接。Microsoft推薦該值為10。

  LINUX:Linux用變量tcp_max_syn_backlog定義backlog隊列容納的最大半連接數。在Redhat 7.3中,該變量的值默認為256,這個值是遠遠不夠的,一次強度不大的SYN攻擊就能使半連接隊列占滿。我們可以通過以下命令修改此變量的值:

  # sysctl -w net.ipv4.tcp_max_syn_backlog="2048"

  Sun Solaris Sun Solaris用變量tcp_conn_req_max_q0來定義最大半連接數,在Sun Solaris 8中,該值默認為1024,可以通過add命令改變這個值:

  # ndd -set /dev/tcp tcp_conn_req_max_q0 2048

  HP-UX:HP-UX用變量tcp_syn_rcvd_max來定義最大半連接數,在HP-UX 11.00中,該值默認為500,可以通過ndd命令改變默認值:

 ?。dd -set /dev/tcp tcp_syn_rcvd_max 2048

  ■縮短超時時間

  上文提到,通過增大backlog隊列能防范SYN攻擊;另外減少超時時間也使系統(tǒng)能處理更多的SYN請求。我們知道,timeout超時時間,也即半連接存活時間,是系統(tǒng)所有重傳次數等待的超時時間總和,這個值越大,半連接數占用backlog隊列的時間就越長,系統(tǒng)能處理的SYN請求就越少。為縮短超時時間,可以通過縮短重傳超時時間(一般是第一次重傳超時時間)和減少重傳次數來實現。

  Win2000第一次重傳之前等待時間默認為3秒,為改變此默認值,可以通過修改網絡接囗在注冊表里的TcpInitialRtt注冊值來完成。重傳次數由TcpMaxConnectResponseRetransmissions 來定義,注冊表的位置是:HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters registry key。

  當然我們也可以把重傳次數設置為0次,這樣服務器如果在3秒內還未收到ack確認包就自動從backlog隊列中刪除該連接條目。

  LINUX:Redhat使用變量tcp_synack_retries定義重傳次數,其默認值是5次,總超時時間需要3分鐘。

  Sun Solaris Solaris 默認的重傳次數是3次,總超時時間為3分鐘,可以通過ndd命令修改這些默認值。


相關頻道: eNews

您對本文或本站有任何意見,請在下方提交,謝謝!

投稿信箱:tougao@enet16.com