|
|
Linux強大的iptables,有一個名為ipt_recent的module,能阻擋DDoS攻擊。
- A5 n3 Q) ^2 p& P! Y例如,你可以新增一個chain: iptables -N WEB_SRV_DOS 或是 ":WEB_SRV_DOS - [0:0]"" e9 Q; ~# a+ a3 v
然後,再用以下的指令,把60秒內hit port 80/443超過10次的IP阻擋並記錄下來:
- O6 J8 ^7 h; \3 Z# A- 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
複製代碼 0 a$ F8 `+ x; l' W* ]
如果你看dmesg遇到下列這類錯誤:
+ q9 M3 v9 c/ Ehitcount (200) is larger than packets to be remembered (20) & K! @' a1 x9 i" y; u7 m
表示你設定要計算的次數大於ipt_recent所設定的上限,可透過調整ipt_recent module的ip_pkt_list_tot參數來解決。
) @4 b- |* z& B. y2 K p. O6 Q4 x
測試一下吧:! N9 S# G$ v3 n( ]# {; B* }# Y
先對測試site發出大量的 http request (可以寫程式來跑,或用所謂的工人智慧 – 用browser開多個TAB,不斷的reload網頁。)& r& _3 z/ q, _) l% Y
可以發現在/var/log/message中出現下列訊息:2 n j. [# n Q% ^( t5 L
May 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=06 ?/ v' u$ n, \! H7 n% r
此時再以browser打開測試網頁,則會出現Connection refused,無法連上(因為我設定的rule是REJECT)。& d5 F/ b2 c6 i# W l" w+ G
OK,iptables的ipt_recent module發揮作用了。
! E% n c5 i5 i3 s5 ^3 ^' r! d& [0 c
) n; a9 x9 j+ Y% L! }) Y! M結論:( `7 g7 u0 ]/ R8 a. i
(1) iptables在網路層即阻擋掉攻擊封包,對server的loading影響較小
5 S+ l' p4 T" u6 o4 ~, `(2) iptables設定上較有彈性,可用來防護80,443以外的port s% V2 h$ C, m, U# X0 J( x
(3) iptables可設定於獨立的主機,擺在server的前方進行保護,可以完全不讓攻擊封包進入server。) v. ]4 D) w+ z6 t! d: _
如果你是用MS Windows + IIS,別傷心,你可以參考AQTRONIX WebKnight這套免費的web application firewall,裡面即有防護DDoS攻擊的功能。/ r+ [- H Z8 {1 r7 d% U
1 \& {4 w% x3 l; x: n& n* x) m2 E/ @) M& ? }6 C: B
參考原文: http://blog.eztable.com/2011/05/17/how-to-prevent-ddos/9 l* g" a B5 U7 y, G6 V- R% v
( c: u# _9 @ F8 l0 b# k9 Y+ T
================================================
: I" ~: ^: ?0 w4 U偵測可疑IP 的指令:/ ]1 t9 R3 {5 L; q& k+ p# h
sed 's/ .*//' access.log | sort | uniq -c | sort -n
L# w3 `/ O0 ]perl -ne 'print "$1*\n" if m#^((\d+\.){3})#' access.log | sort | uniq -c | sort -n
- g: G8 {8 K9 b5 A# n! k |
|
|