利用fail2ban提高VPS安全性

VPS的安全性不言而喻,传统情况下均使用iptables防火墙阻挡来自外界的攻击。然而iptables存在这样的一个问题:不能够根据外界的攻击情况来这改变自己的策略,也就是说,这是一个“被动式防火墙”。被动式防火墙对于网络上常用的暴力破解无能为力。而fail2ban则能够分析日志,根据日志内容,利用iptables执行相应的屏蔽操作,从而实现主动式防火墙

一、fail2ban的特性

fail2ban的功能如下:

  1. 支持大量服务。如sshd,apache,qmail,proftpd,sasl等等。
  2. 支持多种动作。如iptables,tcp-wrapper,shorewall(iptables第三方工具),mail notifications(邮件通知)等等。
  3. 在logpath选项中支持通配符

fail2ban的需求如下:

  1. 需要gamin支持(注:gamin是用于监视文件和目录是否更改的服务工具)
  2. 需要安装python,iptables,tcp-wrapper,shorewall
  3. 如果想要发邮件,那需要安装postfix/sendmail

二、安装与配置

2.1 fail2ban安装

fail2ban一般情况下源里面已经集成,可以直接从源里面获取安装。如debian系可以:

$ sudo apt-get install fail2ban

安装完成后,可以通过service命令查看fail2ban的状态:

$ sudo service fail2ban status

如果源里面没有或者想要获取最新版本的fail2ban,那么可以访问github源码,然后编译安装:

$ sudo git clone https://github.com/fail2ban/fail2ban.git
$ cd fail2ban
$ sudo python setup.py install

可以通过下面的命令查看fail2ban是否安装成功:

$ fail2ban-client -h

当然如果通过源码安装的话,fail2ban是不会主动添加到service服务中去的,需要手动添加(以debian为例),源码的files文件夹中已有着许多service脚本:

$ sudo cp files/debian-initd /etc/init.d/fail2ban
$ sudo update-rc.d fail2ban defaults
$ sudo service fail2ban start

2.2 fail2ban配置

fail2ban的配置目录在/etc/fail2ban/下,主要目录及文件如下:

action.d/           #动作文件夹,内含默认文件。iptables以及mail等动作配置
fail2ban.conf       #定义了fai2ban日志级别、日志位置及sock文件位置
filter.d/           #条件文件夹,内含默认文件。过滤日志关键内容设置
jail.conf           #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值

fail2ban.conf是fail2ban的主配置文件,一般情况下基本不用修改,而最重要的配置文件则是jail.conffilter.d下面的文件。jail.conf主要有这样的几个配置:

ignoreip :  永不被ban的IP
bantime  :  一旦触发ban的条件,该IP被ban的时间(秒)
findtime :  查找日志的时间(秒)
maxretry :  在findtime时间内最多可触发的次数,达到该阈值后IP会被ban

另外jail.conf内部分为全局配置和局部配置,[default]下面均为全局配置,而局部配置会覆盖全局配置。局部配置的范例如下:

[ssh-iptables]    #相当于标签说明
enabled  = true    #是否激活此项(true/false)
filter   = sshd    #过滤规则filter的名字,对应filter.d目录下的sshd.conf
port     = ssh
logpath  = /var/log/messages    #日志记录的位置
findtime = 600
maxretry = 3

而failter.d目录下则有着许多预定义的配置文本。

2.3 针对xmlrpc攻击的配置(nginx)

默认对于nginx的配置是关于xmlrpc的限制的,所以需要手动添厍规则,新建文件/etc/fail2ban/nginx-http-xmlrpc.conf,内容如下:

# fail2ban filter configuration for nginx
[Definition]
failregex = ^<HOST> .*POST .*xmlrpc\.php.*
ignoreregex =

然后在jail.conf中添加下面一段:

[nginx-http-xmlrpc]
enabled = true
filter = nginx-http-xmlrpc
action = iptables[name=xmlrpc, port=http, protocol=tcp]
logpath = /var/log/nginx/access.log
bantime = 600000
findtime = 100
maxretry = 3

当然findtime和maxretry的值可以根据需要,自由设置。

2.4 注意的问题

  1. fail2ban 和 iptables 重启均会导致之前所有屏蔽规则失效
  2. 关于fail2ban的IP屏蔽情况可以查log:/var/log/fail2ban.log
  3. findtime与maxretry需要设置合适,否则会出现误伤。

三、小结

用了fail2ban之后,我才发现这个世界充满了恶意,随便一查fail2ban的log文件,里面就有上百个ssh使用root帐号尝试登陆的IP。有了fail2ban,觉得VPS安全性上面好了很多。

此条目发表在LINUX, 网络建站, 软件安装分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。