安装配置fail2ban防止暴力破解

By | 2013年2月17日

何为fail2ban

fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如:当有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的软件!

安装前的准备工作

必须的

python>2.4(官网推荐使用2.5版本以上,2.4版本有bug)

可选的

iptables、shorewall、tcp-wrapper,当发生暴力破解现象时,使用其中一种方式来屏蔽ip

gmain,文件更改监视器

sendmail、postfix,可以及时发邮件报告情况

安装fail2ban

安装也很简单!

下载fail2ban:https://github.com/fail2ban/fail2ban

cd /opt/fail2ban/

setup.py install

安装的默认路径:/usr/share/fail2ban

执行脚本路径:/usr/bin

配置文件路径:/etc/fail2ban

安装截图:

启动脚本与logrotate配置

1.配置/etc/init.d脚本

首先,我们要创建一个服务脚本,便于管理fail2ban的启动与关闭,包括它的开机启动。

fail2ban安装内自带了几个系统的模板文件,centos的文件为:files/redhat-initd。

#将redhat-initd文件复制到/etc/init.d目录下
cp redhat-initd /etc/init.d/fail2ban

#更改权限
chmod 755 /etc/init.d/fail2ban

#加入开机服务项
chkconfig --add fail2ban

#开机启动
chkconfig fail2ban on

2.配置fail2ban的logrotate

创建这个文件:/etc/logrotate.d/fail2ban

#内容为:
/var/log/fail2ban.log {
    weekly
    rotate 7
    missingok
    compress
    postrotate
           /usr/bin/fail2ban-client reload 1>/dev/null || true
    endscript
}

其中fail2ban-client的路径值得注意,可以使用这个命令查询:

which fail2ban-client
#或者
whereis fail2ban-client

Fail2Ban结构说明

首先来简述下fail2ban是如何工作的,涉及到哪些东西。

fail2ban包含下面5个要素,理解这5个要素之间的关系,对于如何配置如何使用fail2ban是很有帮助的。

  • filter(过滤器):用于在日志文件中找出需要屏蔽信息的正则表达式
  • action(操作指令):发现需要屏蔽时所做的具体操作
  • jail(组合,一个filter或者多个action):filter和action的整合
  • fail2ban-client:客户端(/usr/bin/fail2ban-client)
  • fail2ban-server:服务端(/usr/bin/fail2ban-server)

前三个都是配置文件,在/etc/fail2ban目录下;最后两个是fail2ban的可执行文件。

Server

fail2ban有两部分组成:fail2ban-client和fail2ban-server。server是多线程的并用来监听unix socket的命令。server本身不加载任何配置。

因此,在启动时,server处于没有jail定义的默认状态!需要client给予具体的配置。

fail2ban-server的启动参数如下:

------------
-b                   start in background(后台启动)
-f                   start in foreground(前台启动)
-s                   socket path(套接字路径)
-x                   force execution of the server(强制执行server)
-h, --help           display this help message(显示帮助信息)
-V, --version        print the version(打印版本)
-----------

Client

fail2ban-client是fail2ban-server的前端程序,它连接server的socket并发送命令给server以配置和操作server。

client以命令行或交互模式(使用-i选项)读取配置文件或仅仅发送一个单独的命令给server。fail2ban-client也可以启动server。

fail2ban-client的启动参数:

-c               configuration directory(配置目录)
-s               socket path(socket路径)
-d               dump configuration. For debugging(打印出配置,用于调试)
-i               interactive mode(交互模式)
-v               increase verbosity(增加详细描述)
-q               decrease verbosity(减少详细描述)
-x               force execution of the server(强制执行server)
-h, --help       display this help message(显示帮助)
-V, --version    print the version(打印版本)

配置目录

目录结构如下图:

每个.conf文件都会被名为 .local的文件覆盖。.conf首先被读取,其次是.local。新的配置会覆盖早先的。因此,.local 文件不必包含每个相应于.conf中的选项,只是填写你想要覆盖的设置。

具体请查看fail2ban使用手册:官网中文

开始体验fail2ban

/etc/fail2ban下已经自带了一些常用服务的filter,action脚本了。所以只要简单的配置下即可使用。

jail.conf文件里可以配置多个需要检测的服务,比如sshd,vsftpd等。每一段都可以指定如何过滤(filter),如何屏蔽(action)。

通常只需修改jail.conf文件,修改filter扫描的日志路径,修改action等。

而自带的filter和action,一般都可以用了。但如果自定义filter,需要了解正则表达式相关的知识。

vim /etc/fail2ban/jail.conf
#SSH的配置:
[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
                  sendmail-whois[name=SSH, dest=lijialong1314@foxmail.com, sender=root]
logpath  = /var/log/secure
maxretry = 5

#Vsftpd的配置
[vsftpd-iptables]
enabled  = true
filter   = vsftpd
action   = iptables[name=VSFTPD, port=ftp, protocol=tcp]
                sendmail-whois[name=VSFTPD, dest=lijialong1314@foxmail.com]
logpath  = /var/log/message
maxretry = 5
bantime  = 1800

启动/关闭/重启fail2ban:service fail2ban {start|stop|status|restart}