返回列表 回覆 發帖

[轉貼] 以 Fail2ban 封鎖嘗試侵入的 IP

原文
' 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
  1. #全域設置
  2. [DEFAULT]

  3. #排除 IP 範圍, 以空白隔開
  4. ignoreip = 127.0.0.1 192.168.0.0/24

  5. #觸發 maxretry 之後的封鎖時間(秒); 設為 -1 表示永遠封鎖
  6. bantime = 600

  7. #以 findtime (秒) 時間內的錯誤記錄作為 maxretry 的計數基準
  8. findtime = 600

  9. #允許嘗試次數
  10. maxretry = 3

  11. #以 iptables 阻擋嚐試登入 sshd 的來源 ip
  12. [ssh-iptables]

  13. enabled = true
  14. filter = sshd #對應 /etc/fail2ban/filter.d
  15. action = iptables[name=SSH, port=ssh, portocol=tcp] #對應 /etc/fail2ban/action.d
  16. logpath = /var/log/secure #這是 Fedora 的 sshd log file
  17. maxretry = 5 #取代全域設定值 (maxretry = 3)

  18. [proftpd-iptables]

  19. enabled = true
  20. filter = proftpd
  21. action = iptables[name=ProFTPD, port=ftp, protocol=tcp]
  22. logpath = /var/log/proftpd/proftpd.log
  23. 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 加入:
  1. 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 加入一行:
  1. Incorrect password
複製代碼
參考資料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
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

查詢並禁止apache中異常訪問量的用戶

授權方式:署名,非商業用途,保持一致,轉載時請務必以超鏈接(http://www.fwolf.com/blog/post/331)的形式標明文章原始出處和作者信息及本聲明。  K9 ]$ X3 E9 t  M  ^

& n; M7 X" ~. [. e% ]9 }0 iApache中的異常訪問,通常指的是頻繁、大量訪問的用戶,通過apache的log,結合linux下的幾個命令,可以分析這些用戶,並通過apache的配置文件來禁止他們訪問。
6 L9 S5 Q7 z6 m% {: H$ n) {- I' k1 n6 j, {
首先,更改apache的log方式,不記錄一些圖像、css等文件,這樣在log中每一行基本上都能對應一次訪問,如果不去除圖像等文件的記錄,正常用戶訪問一個頁面,同時也會下載頁面上的圖像、css等文件,會產生多條log記錄,影響計數的結果。在apache的conf文件中增加如下配置:
/ W0 T: e. v% k4 n; q4 u9 PSetEnvIfNoCase Request_URI \.css$ useless-file
* y: L& a2 c$ M0 eSetEnvIfNoCase Request_URI \.gif$ useless-file
. M  c' e. e  I/ dSetEnvIfNoCase Request_URI \.ico$ useless-file
9 h- l7 A# z  JSetEnvIfNoCase Request_URI \.jpg$ useless-file
7 C1 N# w( m& r  Y4 TSetEnvIfNoCase Request_URI \.js$ useless-file$ d! R* s& h1 E
CustomLog logs/hebgc.com/access.log combined env=!useless-file
6 U; t% I$ k% b' n3 [; z& x2 I
: `: t* {; N+ ^/ e% M  F這樣就可以了,關於SetEnvIf的其他用法,可以參見Apache文檔中SetEnvIf和Environment Variables in Apache部分。
. ?: z( o) y- a) s, @; j0 D! s# a  L
接下來,經過一段時間的運行,我們就可以分析log文件中訪問量最大的用戶了,只需要一條命令:8 V( b3 Q' t# u
cat access.log |awk '{print $1}'| sort | uniq -c |sort -n
  s/ o; D  t* F& f; Q
. r1 E$ E- G0 o一點點的來看:
% X( O6 L% T) i1 ~" x2 v0 m
* \) {2 _& i1 P) _    * cat就不用說了;
% p; E' p8 x4 q+ u  t9 ^* p    * awk的作用,就是把第一列,也就是客戶端ip地址分揀出來;( h1 [) A. H3 b
    * 第一個sort,是把分揀出來的ip地址排序,這樣相同的ip地址會排在一起
4 f. n7 u; t% e6 ^4 V    * uniq是一個去除重複值的工具,但是帶上-c參數,就可以統計出每個值出現了多少次3 }5 Y' N  {* G5 v
    * 最後的sort,把uniq產生的結果進行排序,按照-n這個參數的默認設置,最大的排在最下面。  N: j8 V" k9 O

0 d# A! L8 ]' h% B( f8 W+ n所以,我們得到的結果應該是這樣的:
( x/ Z$ d' }" h. I) r" E8 C" L9 I...  D2 j- t$ x/ g( T! M' Z
2040 219.148.106.198# q+ @3 s# w8 \7 h% o1 e
2047 218.12.78.14' {1 I' c3 t* E+ }8 X/ p
2149 218.12.26.233+ ~& Y! k- G6 r! b. z2 ?
2205 121.28.4.34
* @5 s( R7 J, @: H/ N" E" f7 Y! E5 B7 ?2 M: d+ R* k- N
第一列就是訪問次數,第二列是ip地址,再回去對照log文件中的詳細內容,如果發現哪個訪問量大戶是某某機器人的話,就可以禁止掉了,還是修改apache的conf文件:- F  A. h. T0 i: ?' h% h
<Directory />8 v% G. z. ]" o& b' a& I- f
    Order Deny,Allow
, U- H. h  ?- i% U$ ~( O$ ]    Deny from 219.143.69.2
8 M/ e; {4 d1 E' `. v8 l    Deny from 218.12.26.233# y5 I/ `% D. T/ E& m/ n+ q
    Deny from 61.135.162.512 H0 }7 |$ ?3 t  a- C
    Allow from all' M8 [5 @! t, `' K1 H2 F0 l  o% B
</Directory>
* C( t, n3 P4 w2 ^
* N* C3 r% i6 h* h4 _" K如此反覆監測、設置,直到沒有人搗亂為止。6 H, [/ W" r$ a! J
3 ^' ~5 K  R1 I1 t
同理,如果想查看反覆刷新查看某一頁面的用戶,可以用如下命令:
. N( P, b% ?1 v+ \: ygrep "GET /url/to/some/file" access.log |awk '{print $1}' |sort |uniq -c |sort -n
返回列表