經過查看dmesg日誌信息,當存在大量以下 的信息,服務器開始響應緩慢並丟失正常的計數數據。這是典型的SYN Flood攻擊(或開放半鏈接攻擊)。服務器
[91767.569140] TCP: drop open request from 192.168.50.35/65039 [91767.569145] TCP: drop open request from 192.168.50.35/65040 [91767.569461] TCP: drop open request from 192.168.50.35/65041 [91767.569465] TCP: drop open request from 192.168.50.35/65042 [91767.570107] TCP: drop open request from 192.168.50.35/65043 [91767.589008] TCP: drop open request from 192.168.50.35/65053 [91768.045813] TCP: drop open request from 192.168.50.35/65196
TCP洪水攻擊(SYN Flood)dmesg log [260916.826952] TCP: request_sock_TCP: Possible SYN flooding on port 80. Sending cookies. Check SNMP counters.
簡單解決辦法以下:cookie
一、縮短SYN Timeout時間,因爲SYN Flood攻擊的效果取決於服務器上保持的SYN半鏈接數,這個值等於SYN攻擊的頻度 x SYN
Timeout,因此經過縮短從接收到SYN報文到肯定這個報文無效並丟棄改鏈接的時間,例如設置爲20秒如下(太低的SYN
Timeout設置可能會影響客戶的正常訪問),能夠成倍的下降服務器的負荷。負載均衡
二、設置SYN Cookie,就是給每個請求鏈接的IP地址分配一個Cookie,若是短期內連續受到某個IP的重複SYN報文,就認定是tcp
受到了攻擊,之後從這個IP地址來的包會被丟棄。但有一些參數須要協調配置,纔會取到做用,不然會致使另外的問題。spa
建議統一使用下面這些參數:(部分參數根據實際網口修改,本例使用eth0)日誌
sysctl -w net.ipv4.conf.eth0.accept_source_route=0 sysctl -w net.ipv4.conf.lo.accept_source_route=0 sysctl -w net.ipv4.conf.default.accept_source_route=0 sysctl -w net.ipv4.conf.all.accept_source_route=0 sysctl -w net.ipv4.tcp_syncookies=1 sysctl -w net.ipv4.conf.eth0.secure_redirects=1 sysctl -w net.ipv4.conf.lo.secure_redirects=1 sysctl -w net.ipv4.conf.default.secure_redirects=1 sysctl -w net.ipv4.conf.all.secure_redirects=1 sysctl -w net.ipv4.conf.eth0.accept_redirects=0 sysctl -w net.ipv4.conf.lo.accept_redirects=0 sysctl -w net.ipv4.conf.default.accept_redirects=0 sysctl -w net.ipv4.conf.all.accept_redirects=0 sysctl -w net.ipv4.conf.eth0.send_redirects=0 sysctl -w net.ipv4.conf.lo.send_redirects=0 sysctl -w net.ipv4.conf.default.send_redirects=0 sysctl -w net.ipv4.conf.all.send_redirects=0 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1 sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w net.ipv4.tcp_tw_recycle=1 sysctl -w net.ipv4.tcp_fin_timeout=20 #sysctl -w net.ipv4.tcp_fin_timeout=30 sysctl -w net.ipv4.tcp_keepalive_time=1800 sysctl -w net.ipv4.tcp_syn_retries1=1 sysctl -w net.ipv4.tcp_synack_retries=1 sysctl -w net.core.wmem_max=8388608 sysctl -w net.core.rmem_max=8388608 sysctl -w net.ipv4.tcp_rmem="4096 873814 8738140" sysctl -w net.ipv4.tcp_wmem="4096 873814 8738140" sysctl -w net.ipv4.tcp_max_syn_backlog=4096 ifconfig eth0 txqueuelen 1000
但上述的方法只能對付比較原始的SYN Flood攻擊,縮短SYN
Timeout時間僅在對方攻擊頻度不高的狀況下生效,SYN
Cookie更依賴於對方使用真實的IP地址,若是攻擊者以數萬/秒的速度發送SYN報文,同時利用SOCK_RAW隨機改寫IP報文中的源地址,以上的方法可能用處不大。要防護大規模,高密度的SYN攻擊,一個有效的辦法使用F5/Alteon等負載均衡設備,採用超過3臺服務器的集羣來對抗,即:
VIP(F5/Alteon等)--REAL
IP1,REAL IP2,REAL IP3....
一方面,負載均衡設備的高效鏈接管理能夠應對一些SYN
Flood攻擊,同時多臺服務器的包處理能力大大加強,結合每臺服務器改善的SYN Flood處理能力,徹底能夠應對這種大規模、高密度的SYN Flood攻擊。code