原文
' F! x3 q4 `; v$ f) v2 r5 g. X1 R5 I
基本運作原理: fail2ban (daemon) → 監視 log file → 連續出現多次錯誤訊息 → 封鎖來源 IP
. c! n& }* |! v1 Z' O' Z# T) \3 ~& \- Z, d8 s+ I
以下是在 Fedora 7 (python-2.5 & fail2ban 0.8) 針對 sshd 與 proftpd 的防護設置
& I* Z& s, t/ o( v0 e# N" x- V1 O0 @
環境3 _5 |) @; S; k; ~. \1 {# A: ^
Fedora 7
0 R* f' h% i$ ]' Jpython-2.5
2 b, d) l0 M0 \( G7 L; J& ofail2ban 0.8 (required: python >= 2.4) , E Y- W. X6 D! X6 A" l+ ] z1 R
安裝 fail2ban 0.8' V! P1 f0 j. ~& O& \4 ~0 q
4 |* o2 [) ~/ U0 ~( i另言
* {7 R* Y5 a1 B5 u+ fFedora似乎也把它列為更新套件,所以在系統上使用) z6 v9 G8 ]( A+ r3 v6 `( G
# rpm -qa fail2ban$ B# w: O; L' {& V1 Q7 ^/ F
查詢之後,發現在系統已經安裝了 fail2ban-0.8.0-8.fc6。因此接下來的動作便是設定好,然後啟動它就大功告成了。
2 s) `: z+ T1 v* E/ Z9 g
: k0 } M5 Y7 B" f* P9 K3 D% \ m6 I這裡只針對 ssh 的部分,fail2ban 可以阻擋的服務,在 filter.d 目錄可以看到所有的部分$ ?2 J' H) S1 J6 I
# ls /etc/fail2ban/filter.d/
& D; S5 G0 Q& l+ H/ Q& x; hapache-auth.conf couriersmtp.conf pure-ftpd.conf sshd-ddos.conf
1 h( C" |8 r8 g/ Papache-badbots.conf exim.conf qmail.conf vsftpd.conf- ~+ e. Y% u; r8 {5 q0 u Y
apache-noscript.conf postfix.conf sasl.conf wuftpd.conf
" I4 u2 W! e- k# n+ Z {; \courierlogin.conf proftpd.conf sshd.conf ' G2 ], X, G+ I
2 j6 n1 y' C$ D4 S; hdownload page- h) r: k) t0 I+ ]& N
" K9 }- ~' X- A* u& G, ?8 K2 \yum install python-devel& E' t2 J- {, [3 Y; _# W/ k0 }# Z
0 w( N) Q9 h+ ?/ }- M
wget http://nchc.dl.sourceforge.net/s ... l2ban-0.8.0.tar.bz25 Y: ^6 R V5 M/ F5 e7 V
" \' L* X& f6 M4 q/ o. i
tar jxf fail2ban-0.8.0.tar.bz2! e6 P4 J5 ?# P T( E7 a7 t( i
7 d& N! m: g; z! W) ~( ~7 L n1 Wcd fail2ban-0.8.0
# R# L4 `' v' A' Z. x+ k9 _+ y0 [5 p! j0 ^4 P7 c9 L* y0 n: ~
python setup.py install0 \/ u" X+ B, ]4 S& y
& @! ~! v( P$ X; e啟用 fail2ban1 W& V* P% Y' ]4 y$ z
. E6 f1 n2 |9 a6 mcd /etc/fail2ban1 `4 h6 `2 M. |" y% e; Q3 U
) ]! N& G/ C+ c6 h
vi jail.conf- #全域設置
- [DEFAULT]
- #排除 IP 範圍, 以空白隔開
- ignoreip = 127.0.0.1 192.168.0.0/24
- #觸發 maxretry 之後的封鎖時間(秒); 設為 -1 表示永遠封鎖
- bantime = 600
- #以 findtime (秒) 時間內的錯誤記錄作為 maxretry 的計數基準
- findtime = 600
- #允許嘗試次數
- maxretry = 3
- #以 iptables 阻擋嚐試登入 sshd 的來源 ip
- [ssh-iptables]
- enabled = true
- filter = sshd #對應 /etc/fail2ban/filter.d
- action = iptables[name=SSH, port=ssh, portocol=tcp] #對應 /etc/fail2ban/action.d
- logpath = /var/log/secure #這是 Fedora 的 sshd log file
- maxretry = 5 #取代全域設定值 (maxretry = 3)
- [proftpd-iptables]
- enabled = true
- filter = proftpd
- action = iptables[name=ProFTPD, port=ftp, protocol=tcp]
- logpath = /var/log/proftpd/proftpd.log
- maxretry = 6
複製代碼 fail2ban-client start
( M& w) a- M& @2 ~: q( e c" D, {, i7 b" u# {
- D- e4 A. n% y. N
ProFTPD 補充! ?4 d# n0 y \9 s
' l U. V. p6 {" ?8 M( P產生 log 檔:
& ~$ o. h1 t6 k編輯 proftpd.conf 加入:- SystemLog /var/log/proftpd/proftpd.log
複製代碼 若要連密碼錯誤也一併計入 "maxretry":) H3 G5 C5 A' h! ]. l
編輯 /etc/fail2ban/filter.d/proftpd.conf ) @( q" J) p" f: q [$ x
於 failregex 加入一行:參考資料7 A4 d( J2 u9 w4 u, Z
Fail2ban 官方網頁
0 T! K$ p' }! z5 R! HArmor SSH and Block Brute Force Attacks" by Carla Schroder |