|
Linux強大的iptables,有一個名為ipt_recent的module,能阻擋DDoS攻擊。
! i9 R9 n5 E8 C例如,你可以新增一個chain: iptables -N WEB_SRV_DOS 或是 ":WEB_SRV_DOS - [0:0]"
& }8 l/ d) g' { ?然後,再用以下的指令,把60秒內hit port 80/443超過10次的IP阻擋並記錄下來:
- }1 L& D) `0 b& P' s- 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
複製代碼 # @8 C: o7 _8 j b" H+ Y
如果你看dmesg遇到下列這類錯誤:
! Z, x- |3 \5 _9 [& \; o, t' Jhitcount (200) is larger than packets to be remembered (20)
( s9 f7 O' Y2 h表示你設定要計算的次數大於ipt_recent所設定的上限,可透過調整ipt_recent module的ip_pkt_list_tot參數來解決。
9 q$ L3 Q. K* x, Y1 \9 c0 u" M; I4 i/ B
測試一下吧:+ W8 h0 ]6 P+ r& g9 B
先對測試site發出大量的 http request [size=13.376px](可以寫程式來跑,或用所謂的工人智慧 – 用browser開多個TAB,不斷的reload網頁。)
! u& t$ a9 p) c; @4 L" ^% x1 N, Y可以發現在/var/log/message中出現下列訊息:
2 ^3 O; o7 B4 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=01 D0 V: N/ Q2 w9 g9 u* r
此時再以browser打開測試網頁,則會出現Connection refused,無法連上(因為我設定的rule是REJECT)。+ ~) E& E: M# i. y$ M
OK,iptables的ipt_recent module發揮作用了。
2 c* R6 r: O: u# E" r' t
8 |( G! m0 n& _0 _3 X$ `& V4 {結論:
; Z. z, k4 c4 ^ a( X(1) iptables在網路層即阻擋掉攻擊封包,對server的loading影響較小
9 g' w; A: f/ T4 R: p(2) iptables設定上較有彈性,可用來防護80,443以外的port6 G5 {3 K1 p# @2 Z0 H& n
(3) iptables可設定於獨立的主機,擺在server的前方進行保護,可以完全不讓攻擊封包進入server。
! Y! |( _" g' c( w; O# w' p如果你是用MS Windows + IIS,別傷心,你可以參考AQTRONIX WebKnight這套免費的web application firewall,裡面即有防護DDoS攻擊的功能。
$ h! U9 a8 P1 T- B: J% D x* G$ h' y3 G4 K5 C
V" X4 L7 }& {+ |) F& r
參考原文: http://blog.eztable.com/2011/05/17/how-to-prevent-ddos/
- ^5 {' r! v7 `2 v: q: t' a% l, z0 p8 h, M4 f; h
================================================
/ K: A* q. w- ]1 U9 L偵測可疑IP 的指令:
1 T, s g3 D" @9 k9 [5 Z Msed 's/ .*//' access.log | sort | uniq -c | sort -n
- l) b' T7 h0 z- |7 `$ Q) y* Eperl -ne 'print "$1*\n" if m#^((\d+\.){3})#' access.log | sort | uniq -c | sort -n
7 q& L$ V( X8 a) z# w1 S. n( Q |
|
-->
|