自定义fail2ban筛选器

・9 分钟阅读

fail2Ban是一个非常方便的工具,可以防止服务器带宽不必要的流量被大量消耗,它是一个非常小且相对简单的IDS类型工具,带有一些预定义过滤器来自动锁定潜在的危险或带宽消耗类型攻击。

本教程介绍基本安装和设置,以便为你提供一个简单的自定义过滤器的示例。

安装描述在http://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Debian,我使用了apt-get 无痛苦地

$ sudo apt-get install fail2ban
配置

我在Ubuntu 12.04,安装位置是/etc/fail2ban ,jail 日志位置为/var/log/fail2ban.log。

filters , actions 和jails

fail2ban使用filters , actions 和jails的概念。

  • 筛选器(filter)是你要查找的正规表达式
  • 动作(action)是当你找到一些东西时你要采取的步骤,
  • 监狱(jail)是用来将日志文件,过滤器和操作绑定在一起的内容
.local文件

不要编辑你找到的.conf文件,相反,要为设置去创建一个名称相同的.local文件,在.local中指定的设置将覆盖.conf,并且在升级时你将不会遇到问题。

入门

fail2ban应该安装在/etc/fail2ban中,看看jail.conf文件,您会看到默认情况下已经启用了一些jails,例如,ssh。你要做的第一件事是启用一些其他的东西。

启用预定义的Jail

不要编辑jail.conf,而且是在同一目录中创建一个jail.local来替代.conf设置,可以复制整个文件,但是,我建议只复制相关的部分,将启用的设置为true ,(你也可以为默认情况下启用的方式关闭jails )。

## HTTP servers#[apache]enabled = trueport    = http,httpsfilter  = apache-authlogpath = /var/log/apache*/*error.logmaxretry = 6

由于没有显式指定操作,因此将采取默认操作,该操作定义在jail.conf的顶部,目前使用iptables禁用黑客的IP地址。如果您不使用iptables,您可能希望这样做或采取更高级的操作。

高级用法

当您创建自定义filters , actions 和jails时,fail2ban的真正威力就来了。我用一个例子来查看pure-FTPd日志,并且向路由器发出一个块,有效地阻止整个网络中的错误IP地址。

创建自定义筛选器

基本目标是找到一个特定的错误消息和一个与之关联的IP地址,检查您关注的日志文件。

pure-FTPd示例

在我的案例中,pure-FTPd登录到/var/log/messages,并且它有如下条目:

# Aug  8 17:43:10 NAS pure-ftpd: (?@91.121.174.74) [WARNING] Sorry, cleartext sessions are not accepted on this server. Please reconnect using SSL/TLS security mechanisms.# Aug  8 15:05:45 NAS pure-ftpd: (?@192.168.1.148) [WARNING] Authentication failed for user [schmoe]

然后转到filter.d目录,并且创建一个名为pure-ftpd-TLS.local的新文件,查找错误消息并用fail2ban保留字替换该IP地址,下面是一个示例:

[Definition]failregex = pure-ftpd: (.+?@) [WARNING] Sorry, cleartext sessions are not accepted on this server            pure-ftpd: (.+?@) [WARNING] Authentication failed for userignoreregex =

有趣的部分是(.+@),这是一个转义的"( "a ". "the characters "?@ "关键字,"+"对于正规表达式非常重要,因为"@"前面可以有一个用户名,它是特定于fail2ban的,它需要知道什么IP才能对它进行操作。

您可以利用其他功能(虽然没有详细记录),但是,这个示例代表最小的方法。

创建自定义操作

可以将action文件视为命令集合,一些动作你想在fail2ban启动时发出,有些则在它停止以便自行清理时发出。它们包含在action.d目录中,预定义的iptables-multiport.conf非常适合开始。iptables-allports.conf更进一步,有时你可能想要用它做一些高级的事情。

在Boarder的屏蔽例子

修改它以使用基于tomato的路由器,只需粘贴ssh root@tomato '....'  命令在现有的iptable命令前面。确保在路由器上启用ssh登录,并将主机的公钥放置在authorized_keys文件中,

更改

actionban = iptables -I fail2ban- 1 -s  -j DROP

actionban = ssh root@tomato 'iptables -t nat -I fail2ban- 1 -s  -j DROP'

注意iptable命令后添加-t nat。这是必需的,因为这是在路由器上使用,而不是转发流量。

创建一个新的Jail

要打开一个jail,你将创建一个jail.local文件,我将默认的禁止动作更改为刚创建的新动作,并为Pure-FTPd创建了一个监狱。在这两种情况下,只需使用没有扩展名的文件名来标识要使用的筛选器和操作文件,

## ACTIONS#

# (Default banning action)
[DEFAULT]banaction =  iptables-allports-router## JAILS#[pure-FTPd]enabled  = trueport     = allfilter   = pure-ftpd-TLSlogpath  = /var/log/messagesmaxretry = 5
检查jail的状态
$ sudo fail2ban-client status
Status
|- Number of jail:      2
`- Jail list:           pure-ftpd-TLS, ssh
 
$ sudo fail2ban-client status pure-ftpd-TLS
Status for the jail : pure-ftpd-TLS
|- filter
| |- File list :/var/log/messages
| |- currently failed : 1
| `- Total failed : 76
`- action
|- currently banned : 0
| `- IP list :
`- Total banned : 8
问题处理
Filters

测试你的过滤器是个好主意。例如,pure-ftpd的默认过滤器是为旧版本设置的,不起作用。通过创建一对故意失败的登录尝试来执行此操作,然后像这样使用实用程序fail2ban-regex,

$ fail2ban-regex /var/log/messages /etc/fail2ban/filter.d/pure-ftpd-TLS.local
启动fail2ban

如果你尝试手动启动fail2ban或检查它状态,你将看到此错误消息,

  $ /etc/init.d/fail2ban start   * Socket file /var/run/fail2ban/fail2ban.sock is present

这是因为你必须在某些发行版(ubuntu至少)中使用sudo 命令来fail2ban

fail2ban 崩溃

有时fail2ban会启动,但是,一旦我问它状态是什么就会退出。查看错误的方法是在控制台模式下启动服务器,并通过另一个shell询问它的状态。做这个

# /usr/bin/fail2ban-server -x -f

在一个shell中和另一个shell中

 $ fail2ban-client status pure-ftpd-TLS

您可能会发现,在arm架构上,对于诸如DNS-323之类的东西,必须使用python2.4运行fail2ban,

$ apt-get install python2.4$ python2.4 /usr/bin/fail2ban-server -x -f rm /usr/bin/python ln -s /usr/bin/python2.4  /usr/bin/python
Zhongy0410 profile image