|
Linux強大的iptables,有一個名為ipt_recent的module,能阻擋DDoS攻擊。
7 \" ?6 P7 W( }$ O+ N例如,你可以新增一個chain: iptables -N WEB_SRV_DOS 或是 ":WEB_SRV_DOS - [0:0]"( d! J- p% n. t9 Q) p
然後,再用以下的指令,把60秒內hit port 80/443超過10次的IP阻擋並記錄下來:% [' J) W# @- b& X: B' X) z
- 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
複製代碼 n$ b& Y% h8 M' x) s# M5 Z
如果你看dmesg遇到下列這類錯誤: 3 C2 ^3 e" n0 Q# }4 J4 P0 X8 r
hitcount (200) is larger than packets to be remembered (20)
7 |. J: ^8 E4 \. V, C. d表示你設定要計算的次數大於ipt_recent所設定的上限,可透過調整ipt_recent module的ip_pkt_list_tot參數來解決。
1 S2 X1 y! [, L/ E9 N' V2 Q; ]6 P8 E \, B' C% k5 R
測試一下吧:" T$ F( N* k0 Y* `
先對測試site發出大量的 http request [size=13.376px](可以寫程式來跑,或用所謂的工人智慧 – 用browser開多個TAB,不斷的reload網頁。)( m" R8 l7 z8 L. M- J, S# O) x
可以發現在/var/log/message中出現下列訊息:
* h# {. M+ ^% r* `+ wMay 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. ^9 k* ^- U* g4 |* L5 f) C* [
此時再以browser打開測試網頁,則會出現Connection refused,無法連上(因為我設定的rule是REJECT)。' t: O6 q3 s4 y8 B# |
OK,iptables的ipt_recent module發揮作用了。
- i' V& j( S% [8 L; j: ~
4 [5 d+ f8 \6 z結論:
3 R, U2 I3 N( B1 x* n(1) iptables在網路層即阻擋掉攻擊封包,對server的loading影響較小 g# E3 K) [: X, H( g. }+ C
(2) iptables設定上較有彈性,可用來防護80,443以外的port0 _) y* v3 v- Z5 M# ]7 S3 }
(3) iptables可設定於獨立的主機,擺在server的前方進行保護,可以完全不讓攻擊封包進入server。4 V C( R t9 _- q" h# P3 W
如果你是用MS Windows + IIS,別傷心,你可以參考AQTRONIX WebKnight這套免費的web application firewall,裡面即有防護DDoS攻擊的功能。
, M' V6 Z' ~4 M9 ]) l! c( J# T, y8 ]% U- o0 O( N6 X
( w" {1 [- s& K6 _ q0 A8 J. G" S
參考原文: http://blog.eztable.com/2011/05/17/how-to-prevent-ddos/
, e9 q# l' d+ y6 G9 q5 [, C+ T# F3 s) B1 {
================================================
1 H6 U( V# s) J! a( z偵測可疑IP 的指令:
@4 u8 ]; t6 d* h3 I7 [0 t! Xsed 's/ .*//' access.log | sort | uniq -c | sort -n
' l2 p* n7 t3 p) operl -ne 'print "$1*\n" if m#^((\d+\.){3})#' access.log | sort | uniq -c | sort -n
! D* D, G# P+ g8 v# T( e |
|
-->
|