<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • TCP洪水攻擊SYN Flood的診斷和處理

    時間:2024-05-26 07:29:48 TCP/IP 我要投稿
    • 相關推薦

    TCP洪水攻擊SYN Flood的診斷和處理

      SYN Flood是當前最流行的DoS(拒絕服務攻擊)與DDoS(分布式拒絕服務攻擊)的方式之一,這是一種利用TCP協議缺陷,發送大量偽造的TCP連接請求,常用假冒的IP或IP號段發來海量的請求連接的第一個握手包(SYN包),被攻擊服務器回應第二個握手包(SYN+ACK包),因為對方是假冒IP,對方永遠收不到包且不會回應第三個握手包。導致被攻擊服務器保持大量SYN_RECV狀態的“半連接”,并且會重試默認5次回應第二個握手包,塞滿TCP等待連接隊列,資源耗盡(CPU滿負荷或內存不足),讓正常的業務請求連接不進來。關于TCP洪水攻擊SYN Flood詳細的原理,網上有很多介紹,應對辦法也很多,但大部分沒什么效果,這里介紹我們是如何診斷和應對的。

    TCP洪水攻擊SYN Flood的診斷和處理

      診斷

      我們看到業務曲線大跌時,檢查機器和DNS,發現只是對外的web機響應慢、CPU負載高、ssh登陸慢甚至有些機器登陸不上,檢查系統syslog:

      # tail -f /var/log/messages

      Apr 18 11:21:56 web5 kernel: possible SYN flooding on port 80. Sending cookies.

      檢查連接數增多,并且SYN_RECV 連接特別多:

      # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

      TIME_WAIT 16855

      CLOSE_WAIT 21

      SYN_SENT 99

      FIN_WAIT1 229

      FIN_WAIT2 113

      ESTABLISHED 8358

      SYN_RECV 48965

      CLOSING 3

      LAST_ACK 313

      根據經驗,正常時檢查連接數如下:

      # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

      TIME_WAIT 42349

      CLOSE_WAIT 1

      SYN_SENT 4

      FIN_WAIT1 298

      FIN_WAIT2 33

      ESTABLISHED 12775

      SYN_RECV 259

      CLOSING 6

      LAST_ACK 432

      以上就是TCP洪水攻擊的兩大特征。執行netstat -na>指定文件,保留罪證。

      應急處理

      根據netstat查看到的對方IP特征:

      # netstat -na |grep SYN_RECV|more

      利用iptables臨時封掉最大嫌疑攻擊的IP或IP號段,例如對方假冒173.*.*.*號段來攻擊,短期禁用173.*.*.*這個大號段(要確認小心不要封掉自己的本地IP了!)

      # iptables -A INPUT -s  173.0.0.0/8  -p tcp  –dport 80 -j DROP

      再分析剛才保留的罪證,分析業務,用iptables解封正常173.*.*.*號段內正常的ip和子網段。這樣應急處理很容易誤傷,甚至可能因為封錯了導致ssh登陸不了服務器,并不是理想方式。

      使用F5擋攻擊

      應急處理畢竟太被動,因為本機房的F5比較空閑,運維利用F5來擋攻擊,采用方式:讓客戶端先和F5三次握手,連接建立之后F5才轉發到后端業務服務器。后來被攻擊時F5上看到的現象:

      ?

      1、連接數比平時多了500萬,攻擊停止后恢復。

      2、修改F5上我們業務的VS模式后,F5的CPU消耗比平時多7%,攻擊停止后恢復。

      3、用F5擋效果明顯,后來因攻擊無效后,用戶很少來攻擊了,畢竟攻擊也是有成本的。

      調整系統參數擋攻擊

      沒有F5這種高級且昂貴的設備怎么辦?我測試過以下參數組合能明顯減小影響,準備以后不用F5抗攻擊。

      第一個參數tcp_synack_retries = 0是關鍵,表示回應第二個握手包(SYN+ACK包)給客戶端IP后,如果收不到第三次握手包(ACK包)后,不進行重試,加快回收“半連接”,不要耗光資源。

      不修改這個參數,模擬攻擊,10秒后被攻擊的80端口即無法服務,機器難以ssh登錄; 用命令netstat -na |grep SYN_RECV檢測“半連接”hold住180秒;

      修改這個參數為0,再模擬攻擊,持續10分鐘后被攻擊的80端口都可以服務,響應稍慢些而已,只是ssh有時也登錄不上;檢測“半連接”只hold住3秒即釋放掉。

      修改這個參數為0的副作用:網絡狀況很差時,如果對方沒收到第二個握手包,可能連接服務器失敗,但對于一般網站,用戶刷新一次頁面即可。這些可以在高峰期或網絡狀況不好時tcpdump抓包驗證下。

      根據以前的抓包經驗,這種情況很少,但為了保險起見,可以只在被tcp洪水攻擊時臨時啟用這個參數。

      tcp_synack_retries默認為5,表示重發5次,每次等待30~40秒,即“半連接”默認hold住大約180秒。詳細解釋:

      The tcp_synack_retries setting tells the kernel how many times to retransmit the SYN,ACK reply to

      an SYN request. In other words, this tells the system how many times to try to establish a passive

      TCP connection that was started by another host.

      This variable takes an integer value, but should under no circumstances be larger than 255 for the

      same reasons as for the tcp_syn_retries variable. Each retransmission will take aproximately 30-40

      seconds. The default value of the tcp_synack_retries variable is 5, and hence the default timeout

      of passive TCP connections is aproximately 180 seconds.

      之所以可以把tcp_synack_retries改為0,因為客戶端還有tcp_syn_retries參數,默認是5,即使服務器端沒有重發SYN+ACK包,客戶端也會重發SYN握手包。詳細解釋:

      The tcp_syn_retries variable tells the kernel how many times to try to retransmit the initial SYN

      packet for an active TCP connection attempt.

      This variable takes an integer value, but should not be set higher than 255 since each

      retransmission will consume huge amounts of time as well as some amounts of bandwidth. Each

      connection retransmission takes aproximately 30-40 seconds. The default setting is 5, which

      would lead to an aproximate of 180 seconds delay before the connection times out.

      第二個參數net.ipv4.tcp_max_syn_backlog = 200000也重要,具體多少數值受限于內存。

      以下配置,第一段參數是最重要的,第二段參數是輔助的,其余參數是其他作用的:

      # vi /etc/sysctl.conf

      使配置生效:

      # sysctl -p

      注意,以下參數面對外網時,不要打開。因為副作用很明顯,具體原因請google,如果已打開請顯式改為0,然后執行sysctl -p關閉。因為經過試驗,大量TIME_WAIT狀態的連接對系統沒太大影響:

      為了處理大量連接,還需改大另一個參數:

      # vi /etc/security/limits.conf

      在底下添加一行表示允許每個用戶都最大可打開409600個文件句柄(包括連接):

      *                –       nofile          409600

      參考資料

      文件句柄不要超過系統限制/usr/include/linux/fs.h,相關鏈接:http://blog.yufeng.info/archives/1380

      #define NR_OPEN (1024*1024)     /* Absolute upper limit on fd num */

    【TCP洪水攻擊SYN Flood的診斷和處理】相關文章:

    服務器遭受攻擊后的處理流程01-14

    數控機床的故障診斷、處理03-21

    網站日志分析診斷和作用03-04

    公衛執業醫師考點:登革熱診斷標準及處理原則08-22

    臨床助理執業醫師考點速記:血胸的診斷與處理04-01

    計算機常見的網絡故障診斷及處理措施03-31

    公衛執業醫師考點:炭疽診斷標準及處理原則—附錄A03-21

    企業危機的預防和處理07-06

    網絡故障診斷過程和排除03-05

    主站蜘蛛池模板: 亚洲国产精品久久久天堂| 国产精品久久久久影院色| 国产精品无码A∨精品影院 | 无码人妻丰满熟妇精品区| 国产天天综合永久精品日| 动漫精品专区一区二区三区不卡| 在线亚洲精品福利网址导航| 久久91精品综合国产首页| 99久久人人爽亚洲精品美女| 国产精品你懂得| 国产精品伦一区二区三级视频 | 国产区精品高清在线观看| 久久夜色精品国产噜噜麻豆| 日韩精品一区二区三区影院 | 国产精品视频一区二区噜噜| 亚洲日韩精品射精日| 欧美亚洲精品中文字幕乱码免费高清| 亚洲综合精品一二三区在线| 国产精品爽黄69天堂a| 人人妻人人澡人人爽人人精品电影| 亚洲AV无码成人精品区狼人影院| 韩国三级中文字幕hd久久精品| 97国产视频精品| 亚洲国产精品免费视频| 久久精品国产精品亚洲精品| 久久精品国产亚洲沈樵| 久久99热国产这有精品| 国产精品素人搭讪在线播放| 精品精品国产自在久久高清| 国产精品日本欧美一区二区| 国产精品电影网| 欧美精品1区2区| 国产2021久久精品| 国产精品国产三级在线专区| 国产精品无码久久四虎| 精品91自产拍在线观看| 久久精品国产72国产精福利| 亚洲精品WWW久久久久久| 日韩精品极品视频在线观看免费| 蜜国产精品jk白丝AV网站| 久久久国产乱子伦精品作者|