|
|
Linux強大的iptables,有一個名為ipt_recent的module,能阻擋DDoS攻擊。
$ H' l' B9 H" y( C' T5 A9 h例如,你可以新增一個chain: iptables -N WEB_SRV_DOS 或是 ":WEB_SRV_DOS - [0:0]"! D( H. ]/ { ?4 G% K- d
然後,再用以下的指令,把60秒內hit port 80/443超過10次的IP阻擋並記錄下來:
4 H8 Q/ f6 g0 |" I9 b% w- 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
複製代碼
X# h9 q5 u0 U+ t& I; c6 `4 }. x如果你看dmesg遇到下列這類錯誤:
3 I! @( y: G$ B, W! m2 `. }( u9 Ehitcount (200) is larger than packets to be remembered (20) ) G0 Z5 j' v( n/ j* P" Z
表示你設定要計算的次數大於ipt_recent所設定的上限,可透過調整ipt_recent module的ip_pkt_list_tot參數來解決。
2 N$ s" Y3 C+ o9 Z ^$ f, _) N- F. Q5 ~/ f2 K# g
測試一下吧:" c: Z g5 J1 w0 V6 [& P
先對測試site發出大量的 http request (可以寫程式來跑,或用所謂的工人智慧 – 用browser開多個TAB,不斷的reload網頁。)
. P4 R Y" J, q4 i可以發現在/var/log/message中出現下列訊息:7 {* q) r* ^7 z5 Q& C, D j' m
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=0* s% _ g/ x) f3 B( l
此時再以browser打開測試網頁,則會出現Connection refused,無法連上(因為我設定的rule是REJECT)。, [2 x: P$ j" B$ E' q: k
OK,iptables的ipt_recent module發揮作用了。, u- B% n# t, _! ]
+ E c, O+ t' ~; `) A6 k0 x
結論:: O9 Y* D9 f% e6 ]* ^
(1) iptables在網路層即阻擋掉攻擊封包,對server的loading影響較小/ V, i. B' s2 d5 Q1 F( L/ z8 ?8 w& V
(2) iptables設定上較有彈性,可用來防護80,443以外的port6 H0 B# d( _; u: U# N
(3) iptables可設定於獨立的主機,擺在server的前方進行保護,可以完全不讓攻擊封包進入server。
7 Y+ M) ^! o5 \) T$ [3 J& B如果你是用MS Windows + IIS,別傷心,你可以參考AQTRONIX WebKnight這套免費的web application firewall,裡面即有防護DDoS攻擊的功能。$ W2 B/ `9 }. D+ I; G. a
4 l( x3 S% L4 b! K8 V K
3 L3 k9 L& t4 R/ O$ a$ f參考原文: http://blog.eztable.com/2011/05/17/how-to-prevent-ddos/
% B Z, |( w( M- |; u7 k1 P! L- A* A3 q5 }; Q# m; d+ N+ w
================================================
1 e, w! }: G+ _$ e& R- s偵測可疑IP 的指令:' d* ?, o& D- `# [1 B( r, B
sed 's/ .*//' access.log | sort | uniq -c | sort -n- E3 \) E& c7 j7 I( I4 g @
perl -ne 'print "$1*\n" if m#^((\d+\.){3})#' access.log | sort | uniq -c | sort -n
J7 v, D6 x! j4 f+ C( H |
|
|