歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

在CentOS 6.3下安裝fail2ban防暴力破解工具的過程

fail2ban可以監視你的系統日志,然後匹配日志的錯誤信息(正則式匹配)執行相應的屏蔽動作(一般情況下是調用防火牆屏蔽),如:當有人在試探你的SSH、SMTP、FTP密碼,只要達到你預設的次數,fail2ban就會調用防火牆屏蔽這個IP,而且可以發送e-mail通知系統管理員,是一款很實用、很強大的軟件!

功能和特性:

1、支持大量服務。如sshd,apache,qmail,proftpd,sasl等等

2、支持多種動作。如iptables,tcp-wrapper,shorewall(iptables第三方工具),mail notifications(郵件通知)等等。

3、在logpath選項中支持通配符

4、需要Gamin支持(注:Gamin是用於監視文件和目錄是否更改的服務工具)

5、需要安裝python,iptables,tcp-wrapper,shorewall,Gamin。如果想要發郵件,那必需安裝postfix或sendmail

核心原理:

其實fail2ban就是用來監控,具體是調用iptables來實現動作!

好了,那下面來說說具體怎麼安裝、部署吧。

一、首先是服務安裝

首先配置yum源,這裡采用的是yum直接裝(也可源碼安裝)

vim /etc/yum.repos.d/CentOS-Base.repo

在最後新增:

[atrpms]

name=Red Hat Enterprise Linux $releasever - $basearch - ATrpms

baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable

gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms

gpgcheck=1

enabled=1

然後直接就yum裝:yum -y install fail2ban

安裝完成後,服務配置目錄為:/etc/fail2ban

/etc/fail2ban/action.d #動作文件夾,內含默認文件。iptables以及mail等動作配置

/etc/fail2ban/fail2ban.conf #定義了fai2ban日志級別、日志位置及sock文件位置

/etc/fail2ban/filter.d #條件文件夾,內含默認文件。過濾日志關鍵內容設置

/etc/fail2ban/jail.conf #主要配置文件,模塊化。主要設置啟用ban動作的服務及動作閥值

/etc/rc.d/init.d/fail2ban #啟動腳本文件

二、安裝後配置

首先來看看日志文件的默認定義:

cat /etc/fail2ban/fail2ban.conf |grep -v ^#

[Definition]

loglevel = 3

logtarget = SYSLOG                  #我們需要做的就是把這行改成/var/log/fail2ban.log,方便用來記錄日志信息

socket = /var/run/fail2ban/fail2ban.sock

再來看看主配置默認生效的配置:

cat /etc/fail2ban/jail.conf |grep -v ^# |less

[DEFAULT]                                 #全局設置

ignoreip = 127.0.0.1                      #忽略的IP列表,不受設置限制(白名單)

bantime  = 600                            #屏蔽時間,單位:秒

findtime  = 600                           #這個時間段內超過規定次數會被ban掉

maxretry = 3                              #最大嘗試次數

backend = auto                            #日志修改檢測機制(gamin、polling和auto這三種)

[ssh-iptables]                            #針對各服務的檢查配置,如設置bantime、findtime、maxretry和全局沖突,服務優先級大於全局設置

enabled  = true                           #是否激活此項(true/false)

filter   = sshd                           #過濾規則filter的名字,對應filter.d目錄下的sshd.conf

action   = iptables[name=SSH, port=ssh, protocol=tcp]                                                                        #動作的相關參數

          sendmail-whois[name=SSH, dest=root, [email protected]]   #觸發報警的收件人

logpath  = /var/log/secure                #檢測的系統的登陸日志文件

maxretry = 5                              #最大嘗試次數

PS:logpath(Centos5和Rhel5中)要寫成/var/log/secure,這個是系統登陸日志,不能隨意設置

service fail2ban start #啟動服務即可(就用默認的主配置文件裡定義的)

service iptables start #fail2ban依賴預iptables #之前改過日志路徑,不行的話就再重啟fail2ban

三、測試功能

測試機:192.168.30.251

fail2ban:192.168.29.253

在測試機上ssh 192.168.29.253,並且連續輸入超過5次密碼不對(經測試有延遲,多試幾次),就會出現下圖,連接不上

fail2ban上會產生日志記錄:阻擋了此ip的續連

四、擴展說明

其實fail2ban的功能還是很豐富的,剛剛只是測試了它默認開啟的防ssh暴力破解功能。

這裡介紹防止vsftpd被暴力破解功能.

1.YUM安裝vsftpd(yum配置略)

#yum install vsftpd -y

2.配置vsftpd,開啟訪問日志和傳輸日志支持

#vi /etc/vsftpd/conf/vsftpd.conf

添加:

xferlog_enable=YES

dual_log_enable=YES

vsftpd_log_file=/var/log/vsftpd.log

3.配置fail2ban的jail.conf文件,添加如下內容

#vi /etc/fail2ban/jail.conf

添加:

[vsftpd-iptables]

enabled  = true

filter   = vsftpd

action   = iptables[name=VSFTPD, port=21, protocol=tcp]

          sendmail-whois[name=VSFTPD, [email protected]]

logpath  = /var/log/secure

maxretry = 5

bantime  = 68400

4.重啟iptables和fail2ban服務.

service iptables restart

service fail2ban restart

------------------補 充----------------------

一 安裝 Fail2ban 服務

下載rpmforge , 裡面有大量最新的rpm包.

wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

開始yum吧~~!

yum install fail2ban

fail2ban noarch 0.8.2-3.el5.rf rpmforge 125 k

Installing for dependencies:

gamin

gamin-python

安裝是十分簡單的拉.

fail2ban 原理

fail2ban 調用 iptables 實時阻擋外界的攻擊,按照你的要求在一段時間內找出符合條件的日志,然後動作。

二 設定fail2ban服務

fail2ban 的設定檔在這裡

/etc/fail2ban

fail2ban.conf              日志設定文檔

jail.conf                       阻擋設定文檔

/etc/fail2ban/filter.d 具體阻擋內容設定目錄

三 為何需要安裝fail2ban呢?

Extmail 本身是沒有郵件系統被攻擊的解決方案,黑客是會不斷user unknow地試探pop3 smtp 認證得到密碼或電郵地址,大家可能問得到郵地址有何作用呢?電郵地址是可以販賣的哦!而且十分值錢的,如果垃圾郵件者購買了這些地址,你的郵件服務器就有排忙了。

你話需不需要安裝個fail2ban保護呢?

四 實施保護

1. 保護 SSH 攔截

先看看fail2ban是如何攔截的?

cat /etc/fail2ban/filter.d/sshd.conf
failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from <HOST>\s*$
^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
^%(__prefix_line)sUser \S+ from <HOST> not allowed because not listed in AllowUsers$
^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
^%(__prefix_line)srefused connect from \S+ \(<HOST>\)\s*$
^%(__prefix_line)sAddress <HOST> .* POSSIBLE BREAK-IN ATTEMPT\s*$

fail2ban 使用了正則表達式找出:

Authentication failure/authentication failure

ROOT LOGIN REFUSED

refused connect from

POSSIBLE BREAK-IN ATTEMPT

not allowed because not listed in AllowUsers

以上的狀況,可以根據你實際要求刪減. 其中<HOST> 為建立連接的IP

開啟 SSH 攔截

vi /etc/fail2ban/jail.conf

[ssh-iptables]

enabled = true

filter   = sshd

action   = iptables[name=SSH, port=ssh, protocol=tcp]

          sendmail-whois[name=SSH, dest=收件者電郵地址, sender=寄件者電郵地址]

logpath = /var/log/secure

maxretry = 3

findtime = 300

bantime = 86400

fail2ban 會按照你的要求去查看/var/log/secure日志文件,然後在findtime = 300 "5分鐘" 之內符合條件

的記錄下來,如果到達了maxretry = 3 "3次符合條件" 就阻擋這個IP連接22端口 bantime = 86400 "一天的時間".

2. POP3 保護攔截

cat /etc/fail2ban/filter.d/courierlogin.conf

failregex = LOGIN FAILED, .*, ip=\[<HOST>\]$

這裡表示錯誤地輸入用戶名/密碼的pop3連接.

開啟 pop3 保護

vi /etc/fail2ban/jail.conf

[POP3]

enabled = true

filter   = courierlogin

action   = iptables[name=pop3, port=110, protocol=tcp]

logpath = /var/log/maillog

bantime = 1800

findtime = 300

maxretry = 15

 

大家應該懂得如何看了吧? 我不寫拉!好累。參數可以按照你實際要求修改噢~!

3. POP3-SSL 保護攔截

cat /etc/fail2ban/filter.d/courierlogin-ssl.conf

failregex = LOGIN FAILED, .*, ip=\[<HOST>\]$

這裡表示錯誤地輸入用戶名/密碼的pop3-ssl連接.

vi /etc/fail2ban/jail.conf

[POP3-SSL]

enabled = true

filter   = courierlogin-ssl

action   = iptables[name=pop3-ssl, port=995, protocol=tcp]

logpath = /var/log/maillog

bantime = 1800

findtime = 300

maxretry = 15

4 SMTP 保護攔截

cat /etc/fail2ban/filter.d/couriersmtp.conf

failregex = postfix/smtpd.* warning: unknown\[<HOST>\]: SASL LOGIN authentication failed: authentication failure

這裡表示錯誤地輸入用戶名/密碼的smtp連接.

vi /etc/fail2ban/jail.conf

[SMTP]

enabled = true

filter   = couriersmtp

action   = iptables[name=smtp, port=25:366, protocol=tcp]

logpath = /var/log/maillog

bantime = 1800

findtime = 300

maxretry = 15

參數可以按照你實際要求修改.

5. Extmail 登錄保護

由於Extmail 的web mail 登入沒有做到保護,現在加固吧!

vi /etc/fail2ban/filter.d/extmail.conf

failregex = extmail.*: user=.*, client=<HOST>, module=login, status=badlogin

這裡表示錯誤地輸入用戶名/密碼的web mail 登入.

vi /etc/fail2ban/jail.conf

[extmail]

enabled = true

filter   = extmail

action   = iptables[name=httpd, port=http, protocol=tcp]

logpath = /var/log/maillog

bantime = 300

findtime = 300

maxretry = 6

6. POSTFIX 保護User unknow 的試探.

不知道這個動作的意思先看看這篇文章。

http://hi.baidu.com/enjoyunix/blog/item/e8506058fd3c3189810a183a.html

vi /etc/fail2ban/filter.d/postfix.conf

failregex = reject: RCPT from (.*)\[<HOST>\]: 450

vi /etc/fail2ban/jail.conf

[POSTFIX]

enabled = true

filter   = postfix

action   = iptables[name=postfix, port=25, protocol=tcp]

logpath = /var/log/maillog

bantime = 43200

findtime = 1200

maxretry = 5

這裡保護了User unknow 的試探以及垃圾郵件跳信攻擊。

五 看看iptables

iptables -L -nv

pkts bytes target     prot opt in     out     source               destination        

   0     0 fail2ban-pop3-ssl tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:995

773 83329 fail2ban-postfix tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25

299 12660 fail2ban-pop3 tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110

301 12740 fail2ban-ftp tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:21

3354 253K fail2ban-SSH tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22

438 33979 fail2ban-httpd tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target     prot opt in     out     source               destination        

Chain OUTPUT (policy ACCEPT 5703 packets, 829K bytes)

pkts bytes target     prot opt in     out     source               destination        

Chain fail2ban-SSH (1 references)

pkts bytes target     prot opt in     out     source               destination        

3354 253K RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0          

Chain fail2ban-ftp (1 references)

pkts bytes target     prot opt in     out     source               destination        

301 12740 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0          

Chain fail2ban-httpd (1 references)

pkts bytes target     prot opt in     out     source               destination        

438 33979 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0          

Chain fail2ban-pop3 (1 references)

pkts bytes target     prot opt in     out     source               destination        

299 12660 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0          

Chain fail2ban-pop3-ssl (1 references)

pkts bytes target     prot opt in     out     source               destination        

   0     0 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0          

Chain fail2ban-postfix (1 references)

pkts bytes target     prot opt in     out     source               destination        

773 83329 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0          

Chain fail2ban-smtp (0 references)

pkts bytes target     prot opt in     out     source               destination        

   0     0 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0          

如何監察呢?

#watch -n 1 fail2ban-client status POSTFIX

Status for the jail: POSTFIX

|- filter

| |- File list:    /var/log/maillog

| |- Currently failed:    2

| `- Total failed:    22

`- action

  |- Currently banned:    0

  | `- IP list:    

  `- Total banned:    0

看看那些垃圾郵件者真是好無聊!不斷地試探我的郵件服務器呢。

六 看看fail2ban的日志

# cat fail2ban.log | grep '] Ban '

2009-04-07 20:22:44,575 fail2ban.actions: WARNING [POSTFIX] Ban ip地址

就以看到過去有那些IP攔截了,以及是那個服務。

# cat fail2ban.log | grep '] Unban '

可以查看什麼時候解的。

本文出自 “一路向北” 博客,請務必保留此出處http://showerlee.blog.51cto.com/2047005/1169792

Copyright © Linux教程網 All Rights Reserved