|
Linux強大的iptables,有一個名為ipt_recent的module,能阻擋DDoS攻擊。
! h& k; l' c" y1 r" G例如,你可以新增一個chain: iptables -N WEB_SRV_DOS 或是 ":WEB_SRV_DOS - [0:0]"! G6 l2 A" V9 h3 g
然後,再用以下的指令,把60秒內hit port 80/443超過10次的IP阻擋並記錄下來:
5 v/ R! P% f" e/ c2 C- 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
複製代碼 1 P3 H+ J" W5 u$ z( J j/ {. V' I
如果你看dmesg遇到下列這類錯誤: : P* m, c, b! n e" x0 O+ z; a
hitcount (200) is larger than packets to be remembered (20)
$ ^; k; x# W: w/ v, i1 V表示你設定要計算的次數大於ipt_recent所設定的上限,可透過調整ipt_recent module的ip_pkt_list_tot參數來解決。( t$ ~$ k* x2 Q( F7 ?0 E
+ c1 B5 O4 O# j# W, m
測試一下吧:. i' @9 }% Y9 r
先對測試site發出大量的 http request [size=13.376px](可以寫程式來跑,或用所謂的工人智慧 – 用browser開多個TAB,不斷的reload網頁。)
( [8 t& H6 a) h) k% D: ?' t& ~可以發現在/var/log/message中出現下列訊息: J! ], L' e" E
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
( b" \8 S1 `# o& E" Z, n! ?此時再以browser打開測試網頁,則會出現Connection refused,無法連上(因為我設定的rule是REJECT)。
: Q6 S* Y) O6 n7 b. k' oOK,iptables的ipt_recent module發揮作用了。
) u# E3 ]" F7 x! N; |
4 d3 h8 p S' H' t* h結論:
/ T: O; C5 U! P5 I, |1 n(1) iptables在網路層即阻擋掉攻擊封包,對server的loading影響較小
- K# P/ w/ p1 a/ U$ A(2) iptables設定上較有彈性,可用來防護80,443以外的port
8 M* A3 H8 C8 N/ |. {) u2 s(3) iptables可設定於獨立的主機,擺在server的前方進行保護,可以完全不讓攻擊封包進入server。
6 o& |5 c4 Y3 K7 A2 A* z: a如果你是用MS Windows + IIS,別傷心,你可以參考AQTRONIX WebKnight這套免費的web application firewall,裡面即有防護DDoS攻擊的功能。. `5 l# p- S k' a7 R+ \( i2 h
6 W( v- Z* |, @2 S _8 x5 R/ Z
; j* g! a+ B4 M; j% {, ]
參考原文: http://blog.eztable.com/2011/05/17/how-to-prevent-ddos/, g3 g y6 r$ r9 f; ]
# J x3 J# n9 r9 x, M0 Y7 [================================================* h5 T; p, f% B* g$ l. u& y
偵測可疑IP 的指令:
- }0 M0 V9 V+ y6 Csed 's/ .*//' access.log | sort | uniq -c | sort -n0 d. ~. @/ s9 V( a* L2 R; l
perl -ne 'print "$1*\n" if m#^((\d+\.){3})#' access.log | sort | uniq -c | sort -n/ W, `% j1 ]* F3 L, x+ K
|
|
-->
|