1)SYN cookie
在linux下以root權限執行:
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
這個方法打開了syncookie功能,但實際效果幾乎感覺不到。
2)增大backlog
通過增加backlog的數值,可以一定程度減緩大量SYN請求導致TCP連接阻塞的狀況,一般這個數值系統默認是1024,實驗增加到1280~2048:
echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog
這樣在強度不是很高的攻擊下,系統響應能力提高了一點。
3)縮短retries次數
Linux系統默認的tcp_synack_retries是5次,將這個數值減少可以提高系統響應能力,實驗改為2次:
echo "2" > /proc/sys/net/ipv4/tcp_synack_retries
修改後,SYN_RECV的數量有了少量減少,系統響應也快了一些。
4)限制SYN頻率
上述的幾個方法實際效果並不理想,尤其是DDOS攻擊基本無效,目前比較有效的是對SYN的頻率和次數進行限制,這樣最大限度的控制了單個IP地址發動攻擊的能力。
例如將SYN請求的次數限制在30次每分鐘,系統默認是5次/秒,顯然太高,同時將burst從默認的5個降低到2個。
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m \
limit --limit 30/m --limit-burst 2 -j ACCEPT
注意: 該命令在shell下輸入,’\'符號表示續行。
進行此操作後,對正常的用戶而言無任何感覺上的差異,而並發的SYN請求量下降了不少,服務響應基本正常了。
5)封鎖IP/IP段
對於某些單獨IP的DOS攻擊,封ip簡單有效,方法也非常容易:
/sbin/iptables -A INPUT -s a.b.c.d -j REJECT
為了大規模快速的封IP地址/段,以下提供小腳本:
#!/bin/sh
IPSRC=`cat ip.txt`
for i in $IPSRC;do
/sbin/iptables -A INPUT -s $i -j REJECT
done
在ip.txt裡保存如下格式的ip地址段:
211.95.208.0/24
219.78.190.0/24
4.7.220.0/24
68.163.195.0/24
211.162.165.0/24
......
結束語
雖然採取了種種手段,但是攻擊依然沒停止過,上述的方法只是減弱了攻擊的影響,但卻不能徹底解決問題。除了利用IPTables外,還可在應用軟件層做一定的連接頻率,連接數等限制,例如Apache有一個mod_limitipconn模塊就可以實現類似功能。
Module Limit connection
文章出處
http://tecblog.no-ip.org/?p=350
posted on 2009-08-04 21:33
Prog 阅读(1020)
评论(0) 编辑 收藏 引用 网摘 所属分类:
Linux 、
Apache