原文
. I; `: u6 ?9 |
3 _& ~! G; i" e' H0 a3 J0 A基本運作原理: fail2ban (daemon) → 監視 log file → 連續出現多次錯誤訊息 → 封鎖來源 IP1 x- \6 B, }7 {' m9 a3 G2 M- W
9 H2 Y6 C, h: c! h: f" y( V以下是在 Fedora 7 (python-2.5 & fail2ban 0.8) 針對 sshd 與 proftpd 的防護設置4 \7 q7 q! D6 F+ v
: p+ O6 e& p( K5 b' c$ w
環境
/ K4 t5 g0 a$ CFedora 7
5 C) r1 b% @. a2 _: f: e& {0 ypython-2.5
' v5 }8 a6 [& u1 Mfail2ban 0.8 (required: python >= 2.4)
% Z3 B- Q6 s! e _安裝 fail2ban 0.8
" x1 f) [8 I7 h7 W) K& M* l1 q0 q4 J+ e另言9 ~8 w# h% n) B D9 a2 p, B) Q
Fedora似乎也把它列為更新套件,所以在系統上使用5 a u1 V# R+ p1 W+ s& v
# rpm -qa fail2ban
( a9 G- {! u5 [' J; W查詢之後,發現在系統已經安裝了 fail2ban-0.8.0-8.fc6。因此接下來的動作便是設定好,然後啟動它就大功告成了。. X8 X" s. I7 z) Y6 Z3 A
+ P8 \* y0 G3 Z; }
這裡只針對 ssh 的部分,fail2ban 可以阻擋的服務,在 filter.d 目錄可以看到所有的部分: q [4 A+ j2 f! A0 N7 X! R+ Y
# ls /etc/fail2ban/filter.d/
/ a4 @) p' `/ t2 f. H% J2 Xapache-auth.conf couriersmtp.conf pure-ftpd.conf sshd-ddos.conf- ]# P4 C$ T+ s" x6 i2 Y4 j
apache-badbots.conf exim.conf qmail.conf vsftpd.conf' `5 Y! |7 ]9 L& [; Z# H
apache-noscript.conf postfix.conf sasl.conf wuftpd.conf& [3 m% a1 K4 W; [; ?' h& v" E0 [. V
courierlogin.conf proftpd.conf sshd.conf $ Y6 f' w* W$ s! e2 n2 i! m8 V: d1 ]' r7 s% q
download page
# r7 e% E& j9 R+ q7 j
- g: S& I+ f9 b8 e0 m! J! Iyum install python-devel$ v& y! h! K9 s! _
6 `* c) R2 @( t+ P
wget http://nchc.dl.sourceforge.net/s ... l2ban-0.8.0.tar.bz2
7 _" i0 g! S# H# n5 e& H5 }2 U J4 n6 o8 F4 P! l3 F
tar jxf fail2ban-0.8.0.tar.bz27 U2 s2 U5 d; M7 I0 c3 {
& T* p' G& ~/ X( Y9 |4 s0 p
cd fail2ban-0.8.0
2 C$ M( u: H1 C# n! m3 S0 ?0 [) P
$ w# J0 T. e( @. P9 |python setup.py install" O& ^( U& `$ ^; a0 i" s0 {
. Z# u$ t, w" F. W o
啟用 fail2ban! g9 ?0 T8 _, I" X" | _* t
* \/ n, q$ G3 Z4 lcd /etc/fail2ban
! A; J( p+ t. Z. M% R4 p. H/ y; X+ l7 P; X$ h/ B- q( 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
0 Z& b! x9 q1 M: N! t, ~* g& R! b, t9 p: d% w& F
: h5 l0 F1 C3 ~0 Q! u' hProFTPD 補充6 L8 Q6 D' R7 f1 _6 e
" z' K/ P* _7 G* K產生 log 檔:
% X& W$ H0 ?, m9 |; m編輯 proftpd.conf 加入:- SystemLog /var/log/proftpd/proftpd.log
複製代碼 若要連密碼錯誤也一併計入 "maxretry":' i: U; ?. d" Y. U% z1 L: p, \2 X# _
編輯 /etc/fail2ban/filter.d/proftpd.conf 9 C- q0 s/ T- L! |- X8 {2 Y: B/ @
於 failregex 加入一行:參考資料
7 Q6 ?+ M$ l( hFail2ban 官方網頁 . \5 ?; S3 V& z" h
Armor SSH and Block Brute Force Attacks" by Carla Schroder |