如何为自己的应用程序创建fail2ban监狱和访问日志

时间:2019-02-18 09:09:52

标签: security webserver iptables fail2ban

我希望我自己的小型nuxt / vue.js应用程序利用fail2ban来锁定过多错误登录尝试的用户。我想我已经了解如何设置Fail2Ban本身。

我的问题是:我的access.log应该采用哪种语法才能使fail2ban立刻理解它?我没有找到任何答案。

access.log

什么是最佳实践?什么是可以立即用于fail2ban的方法?我在想像这样的东西:

2019-02-17 15:12:10 login-error from 192.168.1.1 Invalid user 'administrator'
2019-02-17 16:11:10 login-error from 192.168.1.1 Invalid password for user 'admin'

基本设置

1)安装Fail2Ban

sudo apt-get install fail2ban

2)创建自己的监狱

sudo vim /etc/fail2ban/jail.local

粘贴内容(并根据需要进行编辑)

[my-app]

enabled  = true
port     = http,https
filter   = my-app
logpath  = /home/my-user/my-app/logs/access.log
maxretry = 5

4)创建过滤器

sudo vim /etc/fail2ban/filter.d/my-app.local

将内容粘贴到您的my-app.local中:

[Definition]
failregex = login-error from <HOST>

3)重新启动服务

sudo systemctl restart fail2ban.service

现在,一旦设置了5次以上的错误尝试,它将监视my-app / logs / access.log并锁定IP。

1 个答案:

答案 0 :(得分:0)

在日志格式中,IP地址和任何其他用户数据之间应该有非常严格的分隔。您需要实现的主要考虑因素是防止外部方尝试使用某种模式登录,在这种模式中,正则表达式将匹配用户数据中的IP地址,而不是原始IP。

具有类似于您的日志格式,其中在IP可以轻松编写强大的正则表达式之前,该行开头的锚点不包含用户数据(如用户名)。

此模式占CVE's in fail2ban的大部分。

为防止这种情况出现在存储库中,FILTERS文档中提供了指南。

对于过滤器提供程序,起始锚^应该包含在正则表达式中(假设日期/时间已删除)。

您还应该以与无效密码相同的方式阻止无效用户。没有这个,用户可以通过尝试5次相同的登录来枚举存在的有效用户。