使用Fail2ban阻擋針對公司郵件系統的暴力破解

公司使用的郵件系統常常被人使用pop暴力嘗試破解,因爲設置密碼時並無驗證密碼的複雜度,所以對於攻擊者來講想破解那麼一些帳號真是垂手可得的事情;同時不斷被人嘗試破解也拖慢了系統速度。php

不過還好郵件系統針對登陸有日誌(還不會爛到連日誌都沒有的地步吧 = =!),會記錄嘗試登陸者的IP地址,所以利用iptables對可疑IP進行封鎖便成爲一個彷佛能夠執行的方案了,可是怎麼作呢?搜索以後終於發現了fail2ban這款軟件(點32個贊!)。html


fail2ban是用python編寫的開源軟件:http://www.oschina.net/p/fail2ban,項目首頁地址:http://www.fail2ban.org,受權協議爲GPLv2。python

其經過掃描日誌文件,利用正則式匹配登陸錯誤的IP地址,而後能夠將IP地址列入防火牆中,同時還能給我發送email以提醒我有哪一個IP地址被ban了。
linux

嗯,正是我要的!開始安裝它吧!git

1、系統環境

OS:RHEL 5.6(32位)github

Python:2.7.5(自帶的2.4應該也能夠)web

2、安裝軟件

1. 安裝fail2ban

http://www.fail2ban.org/wiki/index.php/Downloads 下載stable版本,而後源碼安裝:正則表達式

[root@localhost tmp]# tar xvfj fail2ban-0.8.11.tar.bz2
[root@localhost tmp]# cd fail2ban-0.8.11
[root@localhost fail2ban-0.8.11]# python setup.py install

軟件位於/usr/share/,二進制執行腳本位於/usr/bin,配置文件位於/etc/fail2ban。shell

而後將fail2ban放入開機啓動列表裏:apache

[root@localhost fail2ban-0.8.11]# chkconfig -a fail2ban

2. 安裝pyinotify

因爲郵件日誌logrotate,天天凌晨會有一分鐘左右不存在日誌文件,若是使用默認的idle會致使fail2ban中止工做,所以須要安裝pyinotify,該軟件地址:http://www.oschina.net/p/pyinotify

https://github.com/seb-m/pyinotify 下載pyinotify,而後源碼安裝:

[root@localhost tmp]# cd pyinotify
[root@localhost pyinotify]# python setup.py install

3. (可選)安裝mailx

因爲RHEL 5自帶的mailx太老,沒法配置自定義的SMTP,所以須要安裝最新的mailx程序。這個程序如何安裝配置,這裏就不贅述了。感興趣的能夠看這篇文章:http://www.cnblogs.com/xiaoshi1991/archive/2012/09/19/2694465.html

3、配置

配置前首先來看一下日誌文件長什麼樣:

[root@localhost ~]# cat /var/log/pop_authlog
1381124478 M caohui example.com 0 ip:127.0.0.1 status:1
1381124481 M info example.com 0 ip:89.151.140.52 status:0
1381124482 M zhouqing example.com 0 ip:111.164.210.227 status:1
1381124487 M shell example.com 0 ip:89.151.140.52 status:0
1381124493 M linux example.com 0 ip:89.151.140.52 status:0
1381124495 M zhaoyong1 example.com 0 ip:127.0.0.1 status:1
1381124497 M unix example.com 0 ip:89.151.140.52 status:0
1381124502 M yangjun example.com 0 ip:180.109.216.129 status:1
1381124502 M webadmin example.com 0 ip:89.151.140.52 status:0
1381124508 M test example.com 0 ip:89.151.140.52 status:0
1381124511 M qc example.com 0 ip:180.166.242.30 status:1
1381124513 M admin example.com 0 ip:89.151.140.52 status:0
......

每一行關鍵數據是:帳號,ip地址和狀態,狀態爲1表示成功,狀態爲0表示失敗。觀察日誌文件咱們能夠發現,來自89.151.140.52的設備正在不斷更換常見帳號嘗試破解,所以咱們須要讓fail2ban將此ip用iptables封掉!

進入配置文件目錄咱們能夠看到有這幾個文件和目錄:

/etc/fail2ban/
├── action.d
│   ├── dummy.conf
│   ├── hostsdeny.conf
│   ├── iptables.conf
│   ├── mail-whois.conf
│   ├── mail.conf
│   └── shorewall.conf
├── fail2ban.conf
├── fail2ban.local
├── filter.d
│   ├── apache-auth.conf
│   ├── apache-noscript.conf
│   ├── couriersmtp.conf
│   ├── postfix.conf
│   ├── proftpd.conf
│   ├── qmail.conf
│   ├── sasl.conf
│   ├── sshd.conf
│   └── vsftpd.conf
├── jail.conf
└── jail.local

每個.conf文件都對應一個同名的.local文件,軟件將先讀取.conf文件,再讀取對應的.local文件,.local文件會覆蓋.conf文件中同名的配置。

1. 建立自定義規則

[root@localhost ~]# vim /etc/fail2ban/jail.local
#模塊名稱
[pop3-iptables]
#是否啓用
enabled = true
#過濾器名稱,注意這個名稱與下面第二步所建立的過濾器文件名需一致
filter = my-pop3
#針對IP的行爲,因爲咱們這裏須要封的是pop3,所以端口是110,協議是tcp;第二行發送提醒信到管理員郵箱
action = iptables[name=pop3, port=110, protcol=tcp]
         mail-whois[name=POP3, dest=plutonji@example.com]
#檢查的日誌文件路徑
logpath = /var/log/pop_authlog
#封禁時間(單位:秒)
bantime = 86400
#多少秒內匹配多少次就執行上面的action,這裏是30s內匹配6次
findtime = 30
maxretry = 6

2. 建立過濾器

[root@localhost ~]#vim /etc/fail2ban/filter.d/my-pop3.conf
[Definition]

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values:  TEXT
#使用正則表達式匹配到須要封的IP地址,即下面的<HOST>部分
failregex = ^.*ip:<HOST>\sstatus:0$

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

4、啓動程序

[root@localhost ~]# service fail2ban start
相關文章
相關標籤/搜索