|
Linux強大的iptables,有一個名為ipt_recent的module,能阻擋DDoS攻擊。
. U+ R8 j, e( b8 U4 R# [例如,你可以新增一個chain: iptables -N WEB_SRV_DOS 或是 ":WEB_SRV_DOS - [0:0]"
4 J8 L% z; j6 I8 n然後,再用以下的指令,把60秒內hit port 80/443超過10次的IP阻擋並記錄下來:
5 J7 [7 m( W( l! _/ E9 X- 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& O2 q1 x; F, d9 X( Z6 K如果你看dmesg遇到下列這類錯誤: 9 | ?7 x. H: q/ A
hitcount (200) is larger than packets to be remembered (20) . B1 ]7 ]3 Q* Y
表示你設定要計算的次數大於ipt_recent所設定的上限,可透過調整ipt_recent module的ip_pkt_list_tot參數來解決。2 y: _) k% ^6 w
% Z9 ]' [# N" s2 P; `6 @5 P- ]; }測試一下吧:
: `$ s+ M$ j& s4 ^; w2 W先對測試site發出大量的 http request [size=13.376px](可以寫程式來跑,或用所謂的工人智慧 – 用browser開多個TAB,不斷的reload網頁。)
/ m) {1 G8 [: J$ }! w. g1 m可以發現在/var/log/message中出現下列訊息:
" c, ? V' I$ l* X1 cMay 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! Q8 o7 k9 d2 N2 v d" A
此時再以browser打開測試網頁,則會出現Connection refused,無法連上(因為我設定的rule是REJECT)。
$ N. K( J1 k8 g3 N0 iOK,iptables的ipt_recent module發揮作用了。
+ t% l1 S- g$ J# U) Q0 b0 h9 P l8 F/ P1 o, a
結論:7 A2 A2 w& I+ ~3 \, l0 |
(1) iptables在網路層即阻擋掉攻擊封包,對server的loading影響較小
4 S7 C7 t0 p M- @" S n4 c(2) iptables設定上較有彈性,可用來防護80,443以外的port3 r8 ]9 u) F) f& S! g$ m
(3) iptables可設定於獨立的主機,擺在server的前方進行保護,可以完全不讓攻擊封包進入server。1 r* H; Y* E5 b2 C- t, ^* k
如果你是用MS Windows + IIS,別傷心,你可以參考AQTRONIX WebKnight這套免費的web application firewall,裡面即有防護DDoS攻擊的功能。: ?& i( H z: U& h3 e6 d
/ t1 h0 }: o! V5 ?- L9 P2 Q# Q- Q5 y$ u" I* K
參考原文: http://blog.eztable.com/2011/05/17/how-to-prevent-ddos/. K/ ~# A8 B$ M. Y. R/ `
! C6 Z0 o M& h- k================================================* r8 E8 C9 v/ ?, Y0 E; g3 i7 K: W
偵測可疑IP 的指令: s8 C% f; U$ u
sed 's/ .*//' access.log | sort | uniq -c | sort -n
" w' u* M6 Z- s. A4 S/ Aperl -ne 'print "$1*\n" if m#^((\d+\.){3})#' access.log | sort | uniq -c | sort -n
/ E/ P) ~7 }& {: h' u- O. m |
|
-->
|