通過查看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.
簡單解決辦法如下:
1、縮短SYN Timeout時間,由於SYN Flood攻擊的效果取決於服務器上保持的SYN半連接數,這個值等於SYN攻擊的頻度 x SYN
Timeout,所以通過縮短從接收到SYN報文到確定這個報文無效並丟棄改連接的時間,例如設置為20秒以下(過低的SYN
Timeout設置可能會影響客戶的正常訪問),可以成倍的降低服務器的負荷。
2、設置SYN Cookie,就是給每一個請求連接的IP地址分配一個Cookie,如果短時間內連續受到某個IP的重復SYN報文,就認定是
受到了攻擊,以后從這個IP地址來的包會被丟棄。但有一些參數需要協調配置,才會取到作用,否則會導致另外的問題。
建議統一使用下面這些參數:(部分參數根據實際網口修改,本例使用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攻擊。
