TCP自從1974年被發(fā)明出來之后,歷經30多年發(fā)展,目前成為最重要的互聯網基礎協(xié)議,但TCP協(xié)議中也存在一些缺陷。
SYN攻擊就是利用TCP協(xié)議的缺陷,來導致系統(tǒng)服務停止正常的響應。
SYN攻擊原理:
TCP在傳遞數據前需要經過三次握手,SYN攻擊的原理就是向服務器發(fā)送SYN數據包,并偽造源IP地址。
服務器在收到SYN數據包時,會將連接加入backlog隊列,并向源IP發(fā)送SYN-ACK數據包,并等待ACK數據包,以完成三次握手建立連接。
由于源IP地址是偽造的不存在主機IP,所以服務器無法收到ACK數據包,并會不斷重發(fā),同時backlog隊列被不斷被攻擊的SYN連接占滿,導致無法處理正常的連接。
SYN攻擊的應對措施
針對SYN攻擊的幾個環(huán)節(jié),提出相應的處理方法:
方式1:減少SYN-ACK數據包的重發(fā)次數(默認是5次):
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_syn_retries=3
方式2:使用SYN Cookie技術:
sysctl -w net.ipv4.tcp_syncookies=1
方式3:增加backlog隊列(默認是1024):
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
方式4:限制SYN并發(fā)數:
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s
SYN攻擊模擬
可以用之前介紹的hping工具來模擬SYN攻擊,參見《Linux常用網絡工具:hping高級主機掃描》;
還有一款synkill也可以用來模擬SYN攻擊。