|
|
Linux強大的iptables,有一個名為ipt_recent的module,能阻擋DDoS攻擊。
: l( P* N0 V1 O! X1 x例如,你可以新增一個chain: iptables -N WEB_SRV_DOS 或是 ":WEB_SRV_DOS - [0:0]"5 Z# \7 N) Y' ~% q5 P* N
然後,再用以下的指令,把60秒內hit port 80/443超過10次的IP阻擋並記錄下來:
8 j9 y8 n% j* Q- 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 m4 E# y# N1 _9 L9 [4 m如果你看dmesg遇到下列這類錯誤:
L) Q4 t Y2 w7 Y: Vhitcount (200) is larger than packets to be remembered (20) + S% _# I6 [* {
表示你設定要計算的次數大於ipt_recent所設定的上限,可透過調整ipt_recent module的ip_pkt_list_tot參數來解決。
4 x8 [0 H) h5 W- R8 _* c' w
$ }% h5 W7 R7 A0 h' {; S* }測試一下吧:8 c# o1 i i2 l
先對測試site發出大量的 http request (可以寫程式來跑,或用所謂的工人智慧 – 用browser開多個TAB,不斷的reload網頁。)4 d4 H9 K# O, u( O6 S, `* G
可以發現在/var/log/message中出現下列訊息:
W, @/ \. y; 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
) R1 s6 a) ^) l6 s此時再以browser打開測試網頁,則會出現Connection refused,無法連上(因為我設定的rule是REJECT)。5 l" ]9 [3 ]+ O4 N( C) R) s
OK,iptables的ipt_recent module發揮作用了。* u. u. }. y, o' g
: k6 [0 C+ f1 i4 u [0 b
結論:
; ^# W. R2 f0 S9 S3 c4 F, r& {(1) iptables在網路層即阻擋掉攻擊封包,對server的loading影響較小
' b7 Z9 j+ U. ?- \% S(2) iptables設定上較有彈性,可用來防護80,443以外的port
y: R. @/ V6 P; j7 s$ H( M1 t(3) iptables可設定於獨立的主機,擺在server的前方進行保護,可以完全不讓攻擊封包進入server。$ Q) h& |* y/ ~( W' `+ D
如果你是用MS Windows + IIS,別傷心,你可以參考AQTRONIX WebKnight這套免費的web application firewall,裡面即有防護DDoS攻擊的功能。+ B1 \7 K, g( o0 j, x8 {+ e. D
# H! c; S+ H7 b _0 F2 U f0 g
- F* ?) C1 _1 m) H
參考原文: http://blog.eztable.com/2011/05/17/how-to-prevent-ddos/: t! T8 e' h! A2 ~: | f
/ u3 Z( _" B. l: q# [8 M================================================
Z' d( }$ H) P) I6 |! a) }3 F偵測可疑IP 的指令:
5 r b/ ^3 u7 Z3 D! |; osed 's/ .*//' access.log | sort | uniq -c | sort -n
% {1 [) v# i- T) B. T- `& Aperl -ne 'print "$1*\n" if m#^((\d+\.){3})#' access.log | sort | uniq -c | sort -n
( _& g9 F- H* a |
|
|