一、fail2ban简介

当我们服务器开启了远程维护或者是运行着比如mail、ftp之类的应用程序,会有N多的非法IP来探测用户的弱口令,造成安全隐患,那么我们就需要一个工具fail2ban来监控并及时的清楚掉安全隐患。

fail2ban的原理就是分析日志记录,对于在一定时间内登录失败一定次数后,就利用iptables对此IP做出指定的规则限制。其官方主页为

http://www.fail2ban.org/wiki/index.php/Main_Page fail2ban 可以阻挡的暴力入侵服务很多如apache,postfix,exim,named,qmail,sasl,ssh,webmin,wuftpd等。而其实现过滤地址的原理是通过日志的正则查找到相应的IP地址,并加入到防火墙里并将其drop掉。

二、下载

可以通过 http://sourceforge.net/projects/fail2ban/files/fail2ban-stable 下载最新的安装包。也可以到其主页下载最新的针对不同系统的源包。而在centos下我们可以直接通过yum -y install fail2ban来实现下载安装。

三、安装

通过源安装的方式上面已经提到,这里主要说下源码包安装:

1tar jxvf fail2ban-0.8.4.tar.bz2
2cd fail2ban-0.8.4
3./setup.py install

因为fail2ban是基于python写的,所以其安装时需要python环境才能进行安装。

四、主要配置文件及参数

1[root@web10 fail2ban]# ll /etc/fail2ban/
2总计 24
3drwxr-xr-x 2 root root 4096 06-28 16:53 action.d       //是如何调用iptables、mail发送等程序的目录
4-rw-r--r-- 1 root root  859 01-17 12:24 fail2ban.conf  //设置该程序的日志等
5drwxr-xr-x 2 root root 4096 06-28 16:11 filter.d      //过滤规则目录
6-rw-r--r-- 1 root root 6593 06-28 15:42 jail.conf    //监控和过滤的配置参数。
7-rw-r--r-- 1 root root 1375 2011-11-30 jail.local    //配置本地主要监控的日志及相关参数

注:jail.conf文件第一个被读取,接着是读取jail.local文件,所以local文件中定义的参数会覆盖conf中的参数。

过滤规则:我们以/etc/fail2ban/filter.d/postfix.conf为例,可以看到具体的正则如下:

1failregex = reject: RCPT from (.*)[<HOST>]: 554

554代表Relay Access Denied。一般上面的正则规则我们是不需要更改的。除非你想要监控的程序不在/etc/fail2ban/filter.d目录里,你可以新增自定义配置文件实现给第三方应用的监控。

 1vim /etc/fail2ban/jail.conf
 2ignoreip = 127.0.0.1   // 忽略的IP,不同的IP使用空格分开
 3bantime  = 600   // 封IP时间,单位秒。等于-1时是永久封IP
 4findtime  = 600  // 多少秒内失败maxretry次数后就封IP
 5maxretry = 3   // 失败多少次数后就封IP,与上面的findtime配合使用
 6[ssh-iptables]
 7enabled  = false /true  关闭/开启
 8filter   = sshd
 9action   = iptables[name=SSH, port=ssh, protocol=tcp]
10           sendmail-whois[name=SSH, dest=目标邮箱地址, sender=发送邮箱地址]
11logpath  = /var/log/secure  //日志路径
12maxretry = 5   //错误次数

当然,以上参数也可以在fail2.loacl文件中进行设置。如果要设置白名单时需要在[DEFAULT]全局定义里的ignoreip参数后进行指定。如果有二组以上以空白做为间隔 其后的IP支持以192.168.1.0/24 IP段格式书写。

配置完了以后,可以通过/etc/init.d/fail2ban 进行start、stop或restart。

五、测试和查看

过滤检查语法测试

1fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/vsftpd.conf

可以通过iptables命令查看被封掉的IP:

1[root@web10 fail2ban]# iptables -L -nv
2Chain INPUT (policy DROP 660 packets, 68278 bytes)
3 pkts bytes target     prot opt in     out     source               destination
4 121M   27G ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
51522K   91M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 80,443,25,465,110, 4929  290K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
6  219 18254 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
7    0     0 ACCEPT     tcp  --  *      *       192.168.1.0/24      0.0.0.0/0           tcp dpt:23
8    0     0 ACCEPT     tcp  --  *      *       192.168.1.0/24      0.0.0.0/0           tcp dpt:873
9    2    96 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8081 

另外也可以通过下在的命令查看:

 1fail2ban-client status vsftpd-iptables
 2Status for the jail: vsftpd-iptables
 3|- filter
 4|  |- File list:    /var/log/secure
 5|  |- Currently failed:    0
 6|  `- Total failed:    6
 7`- action
 8|- Currently banned:    1
 9|  `- IP list:    IP
10|`- Total banned:    1

注:如果重起iptables 记的一定还要重起fail2ban,不然他就不能生效,fail2ban的过滤表是在iptables 启动后在加入的。