|
Linux強大的iptables,有一個名為ipt_recent的module,能阻擋DDoS攻擊。
# V8 g9 C: p/ S2 v. v例如,你可以新增一個chain: iptables -N WEB_SRV_DOS 或是 ":WEB_SRV_DOS - [0:0]"# J# |- N0 ?3 r9 n* |8 O X
然後,再用以下的指令,把60秒內hit port 80/443超過10次的IP阻擋並記錄下來:. {2 t$ K# S, \% }' L( U3 U% O
- 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
複製代碼
" X9 `" _5 a9 G0 g& {* [4 q如果你看dmesg遇到下列這類錯誤:
6 N; }5 q+ i* _" B) Ghitcount (200) is larger than packets to be remembered (20) ; K% a2 l+ k; ]' T$ E- h3 z
表示你設定要計算的次數大於ipt_recent所設定的上限,可透過調整ipt_recent module的ip_pkt_list_tot參數來解決。
9 r$ t' o( ^( l8 C$ W) K* `5 O# m, _/ F' z
測試一下吧:
0 }2 G$ ~& D' c# t/ ?" g4 t7 i. N先對測試site發出大量的 http request [size=13.376px](可以寫程式來跑,或用所謂的工人智慧 – 用browser開多個TAB,不斷的reload網頁。)! h7 i- k3 o* x; r
可以發現在/var/log/message中出現下列訊息:
% I! X. Z/ H0 _0 IMay 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
$ U; I5 e+ H6 J o0 R此時再以browser打開測試網頁,則會出現Connection refused,無法連上(因為我設定的rule是REJECT)。; [; X7 V6 Y+ t5 S& x
OK,iptables的ipt_recent module發揮作用了。* D' N& m7 l) q7 j: i4 J8 |
8 k) s8 k, M, E+ U D% J2 z- G. `0 h
結論:
' |& h: B% g8 Q9 G6 b% f(1) iptables在網路層即阻擋掉攻擊封包,對server的loading影響較小4 Y- S; ^$ _8 @
(2) iptables設定上較有彈性,可用來防護80,443以外的port
" r+ ~6 l" h, e' _$ ](3) iptables可設定於獨立的主機,擺在server的前方進行保護,可以完全不讓攻擊封包進入server。
% b1 }; P z7 j- [' A5 P" h如果你是用MS Windows + IIS,別傷心,你可以參考AQTRONIX WebKnight這套免費的web application firewall,裡面即有防護DDoS攻擊的功能。+ _7 I4 S4 G" X6 Z+ d# t4 H. d! ?
; D* { r) J4 i3 U
7 {( r1 _' w4 V+ p0 K7 M% ?參考原文: http://blog.eztable.com/2011/05/17/how-to-prevent-ddos/
$ n$ i5 Y6 Z5 }% p
! ?2 O6 O$ ~' w9 g) ]================================================
, E) c# `% w# a) W- I+ s偵測可疑IP 的指令:. m8 q3 B) r' d# D
sed 's/ .*//' access.log | sort | uniq -c | sort -n$ E5 `2 l8 v( z' T. l5 Z4 Q
perl -ne 'print "$1*\n" if m#^((\d+\.){3})#' access.log | sort | uniq -c | sort -n6 H3 B a6 Q2 C4 Z" r0 W! o8 s
|
|
-->
|