linux防禦攻擊

一、服務器可能遭受的攻擊

1、SYN/ACK Flood攻擊(半連接攻擊)
主要是通過向受害主機發送大量僞造源IP和源端口的SYN或ACK包,導致主機的未連接隊列被長時間佔用並且資源耗盡,而正常的SYN請求被丟棄。由於源都是僞造的故追蹤起來比較困難。缺點是實施起來有一定難度,需要高帶寬的殭屍主機支持。
 
2、tcp全連接攻擊
通過許多殭屍主機不斷地與受害服務器建立大量TCP連接,客戶端僅僅“連接”到服務器,然後再也不發送任何數據,直到服務器超時後處理或者耗盡服務器的處理進程。
缺點是需要很多殭屍主機,並且由於殭屍主機的IP是暴露的,因此此種DDOS攻擊方式容易被追蹤。
 
3、CC攻擊
攻擊者控制某些主機不停地發大量正常數據包給對方服務器,造成服務器資源耗盡,一直到宕機崩潰。由於這種攻擊方式是正常的請求,暴露了正常的源IP地址,禁止這些ip就可以了。
 
4、慢速攻擊
1)http服務器中,攻擊者與服務器建立連接,只提交部分數據,導致服務器持續等待,通過控制殭屍主機或通過多線程進程來不斷增加這樣的連接,就會使服務器的資源被耗盡,導致服務器宕機或不再接受新的請求。
2)tcp服務器中,攻擊者與服務器建立連接並請求數據,採用調整tcp協議中的滑動窗口的大小,來對服務器單詞發送的數據大小進行控制,當tcp的window size過小或爲0時,迫使服務器等待並不斷髮送報文探測客戶端窗口大小,因此,這樣的連接不斷增加會使服務器無法訪問。

 

 

二、防禦方法

1、設置內核聯網功能
net.ipv4.tcp_max_syn_backlog=102400 //設置監聽隊列
net.ipv4.tcp_syncookies=1 //設置syn cookies
net.ipv4.tcp_synack_retries=3 //設置syn ack重傳次數
net.ipv4.tcp_syn_retries=3 //設置syn 重傳次數
net.ipv4.tcp_keepalive_time=1800 //設置無數據發送的存活時間
net.ipv4.tcp_keepalive_probes=5 //tcp發送keepalive探測該鏈接已經斷開的次數
net.ipv4.tcp_keepalive_intvl=15 //設置探測消息發送的頻率(秒爲單位)
net.ipv4.tcp_retries1=3 //設置tcp連接請求放棄前重傳次數
net.ipv4.tcp_retries2=5 //設置tcp連接丟棄前重傳次數
net.ipv4.tcp_abort_on_overflow=1 //設置進程溢出時,中斷連接

設置方法如:sysctl -w net.ipv4.tcp_syncookies=1

查看方法:sysctl -a | grep tcp

 

2、設置iptables初始防禦功能
//允許外網每個IP最多50個tcp連接,超過的丟棄
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP 
//每個ip每秒只能連接10次,超過的拒接
iptables -A INPUT -p tcp -m state --state NEW -m recent --name SSHPOOL --set
iptables -A INPUT -p tcp -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 1 --hitcount 10 -j DROP
//抵禦DDOS ,允許外網最多5000個初始連接,然後服務器每秒新增5000個(根據服務器性能設置,在不影響正常處理的情況下)
iptables -A INPUT -p tcp --syn -m limit --limit 5000/s --limit-burst 5000 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
//限制icmp連接
iptables -A INPUT -p icmp -m limit --limit 100/s --limit-burst 100 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
 

3、主動查看,根據ip限制

1)檢查每個ip到服務器的連接數,並排序
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

2)檢查每個ip的ESTABLISHED或SYN_RECEIVED的連接數,並排序
netstat -ntu | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
netstat -ntu | grep SYN_RECEIVED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

3)檢查對口80的每個ip的連接數,並排序
netstat -plan | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

檢查到的所有連接數量異常的ip地址,可以使用一下方式屏蔽
將對方ip加入iptables進行防禦($IPADDR填入實際ip)
Iptables -I INPUT -s $IPADDR -j DROP
(刪除該條規則可用–D替換-I : Iptables -D INPUT -s $IPADDR -j DROP)

 

發佈了48 篇原創文章 · 獲贊 12 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章