|
|
Linux強大的iptables,有一個名為ipt_recent的module,能阻擋DDoS攻擊。
' p+ R* O+ D. [. j1 ~例如,你可以新增一個chain: iptables -N WEB_SRV_DOS 或是 ":WEB_SRV_DOS - [0:0]", c4 b% @3 @0 J0 a& s! v1 T
然後,再用以下的指令,把60秒內hit port 80/443超過10次的IP阻擋並記錄下來:# m5 t5 T0 v& o" w3 n
- iptables -A INPUT -p tcp -m multiport –dports 80,443 -j WEB_SRV_DOS
- iptables -A WEB_SRV_DOS -p tcp --syn -m multiport --dports 80,443 -m recent --rcheck --second 60 --hitcount 10 -j LOG --log-prefix "[Possible DOS Attack]"
- iptables -A WEB_SRV_DOS -p tcp --syn -m multiport --dports 80,443 -m recent --rcheck --second 60 --hitcount 10 -j REJECT
- iptables -A WEB_SRV_DOS -p tcp --syn -m multiport --dports 80,443 -m recent --set
- iptables -A WEB_SRV_DOS -p tcp -m multiport --dports 80,443 -j ACCEPT
複製代碼 $ {/ \/ Y, o4 o9 x9 c/ s
如果你看dmesg遇到下列這類錯誤:
0 I( E: C# h/ rhitcount (200) is larger than packets to be remembered (20) - r9 e. }0 {: f) T% e( |4 {$ R$ V
表示你設定要計算的次數大於ipt_recent所設定的上限,可透過調整ipt_recent module的ip_pkt_list_tot參數來解決。
/ h3 [+ ~6 H& F9 V* O6 p
" U# B$ }! D% ?- F測試一下吧:
; J' K4 s4 F/ M先對測試site發出大量的 http request (可以寫程式來跑,或用所謂的工人智慧 – 用browser開多個TAB,不斷的reload網頁。)3 l L% B. A7 V4 }
可以發現在/var/log/message中出現下列訊息:
4 o' {% x" y' I6 EMay 17 07:12:00 localhost kernel: [Possible DOS Attack]IN=eth0 OUT= MAC=XX:XX:XX:XX:43:77:00:1f:YY:YY:YY:YY SRC=192.168.0.105 DST=192.168.0.102 LEN=64 TOS=0x00 PREC=0x00 TTL=64 ID=45026 DF PROTO=TCP SPT=59437 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0# i$ q7 D7 T2 g. `6 f
此時再以browser打開測試網頁,則會出現Connection refused,無法連上(因為我設定的rule是REJECT)。. [, j: k4 f. O1 n
OK,iptables的ipt_recent module發揮作用了。, n2 i2 d3 j* v& c: O
' l8 B- n4 i6 Z7 G結論:- b& u/ w5 r6 G* K( Q7 M/ B
(1) iptables在網路層即阻擋掉攻擊封包,對server的loading影響較小
G0 E# H. H+ n! ^3 c(2) iptables設定上較有彈性,可用來防護80,443以外的port5 W8 ~ K9 S4 \
(3) iptables可設定於獨立的主機,擺在server的前方進行保護,可以完全不讓攻擊封包進入server。) t1 F- L6 K+ N
如果你是用MS Windows + IIS,別傷心,你可以參考AQTRONIX WebKnight這套免費的web application firewall,裡面即有防護DDoS攻擊的功能。
8 T n/ P8 @$ Z8 J. ^- ^0 T, j% x* e: H7 F7 r1 B
p+ \! F+ X! _* ~, m參考原文: http://blog.eztable.com/2011/05/17/how-to-prevent-ddos/3 ~+ a* i, }0 I7 G1 Q. j5 a
; }6 Q: a) ?7 \/ ?( o================================================
2 s" Z( n; W! p. D3 l4 L! {1 i. H偵測可疑IP 的指令:
& [, r8 W |+ p% p' R$ ~) qsed 's/ .*//' access.log | sort | uniq -c | sort -n
) E& t5 \8 ^: o" N8 {; gperl -ne 'print "$1*\n" if m#^((\d+\.){3})#' access.log | sort | uniq -c | sort -n
; J4 J ~# D5 m- r |
|
|