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