Programming Life
相信不能相信的,完成不能完成的。矛盾,就象征进步。
posts - 151,comments - 7,trackbacks - 0

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 阅读(999) 评论(0)  编辑 收藏 引用 网摘 所属分类: LinuxApache

只有注册用户登录后才能发表评论。
网站导航: