CentOS下安装fail2ban防暴力破解工具:

 
前言:首先说说为什么笔者会想到写这篇博客,源于昨天下午,突然收到Nagios的报警邮件,说邮件服务器的进程数超过阀值。于是赶紧登录上去查看。
 
这里说下分析的过程:
1.既然说进程数超过阀值,肯定先查看进程:ps -ef;
2.如果不能即时看到问题,那就动态显示:top,看看究竟是哪个程序占用这么多进程;
3.最后确定了应该是courier-imap,但还不知道是什么原因导致;
4.查看ip连接,确认是否是其存在问题:netstat -ant,发现有大量的110连接;

CentOS下安装fail2ban防暴力破解工具_CentOS

5.既然是收信服务,那就赶紧追踪查看邮件日志:tail -f /var/log/maillog;
6.发现问题:日志里有大量的登录错误信息,发现是同一ip,并在用不同的用户名密码来暴力破解

 

CentOS下安装fail2ban防暴力破解工具_CentOS_02

7.稍等一会,确定目标IP后,将其ip的包丢弃:iptables -I INPUT -s 176.61.143.41 -j DROP   #此ip为真实攻击ip,所以在此曝光
8.稍等一会,再次查看进程,进程数有明显下降,故障解决。
 

 
介于这种安全隐患的存在,我们以后可以利用fail2ban来实现防暴力破解,防止恶意攻击。
下面就来说说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
在最后新增:
  1. [atrpms] 
  2. name=Red Hat Enterprise Linux $releasever - $basearch - ATrpms 
  3. baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable 
  4. gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms 
  5. gpgcheck=1 
  6. 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 ^#
  1. [Definition] 
  2. loglevel = 3 
  3. logtarget = SYSLOG              #我们需要做的就是把这行改成/var/log/fail2ban.log,方便用来记录日志信息 
  4. socket = /var/run/fail2ban/fail2ban.sock 
再来看看主配置默认生效的配置:
cat /etc/fail2ban/jail.conf |grep -v ^# |less
 
  1. [DEFAULT]                                 #全局设置 
  2. ignoreip = 127.0.0.1                      #忽略的IP列表,不受设置限制(白名单) 
  3. bantime  = 600                            #屏蔽时间,单位:秒 
  4. findtime  = 600                           #这个时间段内超过规定次数会被ban掉 
  5. maxretry = 3                              #最大尝试次数 
  6. backend = auto                            #日志修改检测机制(gamin、polling和auto这三种) 
  7.  
  8. [ssh-iptables]                            #针对各服务的检查配置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置 
  9. enabled  = true                           #是否激活此项(true/false) 
  10. filter   = sshd                           #过滤规则filter的名字,对应filter.d目录下的sshd.conf 
  11. action   = iptables[name=SSHport=sshprotocol=tcp]                                                                        #动作的相关参数 
  12.            sendmail-whois[name=SSHdest=rootsender=fail2ban@example.com]   #触发报警的收件人 
  13. logpath  = /var/log/secure                #检测的系统的登陆日志文件 
  14. 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次密码不对(经测试有延迟,多试几次),就会出现下图,连接不上

CentOS下安装fail2ban防暴力破解工具_CentOS_03

fail2ban上会产生日志记录:阻挡了此ip的续连

CentOS下安装fail2ban防暴力破解工具_CentOS_04

 
四、扩展说明
其实fail2ban的功能还是很丰富的,刚刚只是测试了它的防ssh暴力破解功能。
下面简单提下我用的一些功能:
本人是用在邮件服务器上,所以会监控pop、http等服务,具体配置见下(不做演示了)
  1. [pop3] 
  2. enabled = true 
  3. filter   = courierlogin 
  4. action   = iptables[name=pop3port=110protocol=tcp
  5. logpath = /var/log/maillog 
  6. bantime = 1800 
  7. findtime = 300 
  8. maxretry = 30 
  9.  
  10. [webmail] 
  11. enabled = true 
  12. filter   = webmail 
  13. action   = iptables[name=httpdport=httpprotocol=tcp
  14. logpath = /var/log/maillog 
  15. bantime = 900 
  16. findtime = 300 
  17. maxretry = 5 
 
好了,就先到这里吧!