我希望我自己的小型nuxt / vue.js应用程序利用fail2ban来锁定过多错误登录尝试的用户。我想我已经了解如何设置Fail2Ban本身。
我的问题是:我的access.log应该采用哪种语法才能使fail2ban立刻理解它?我没有找到任何答案。
什么是最佳实践?什么是可以立即用于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。
答案 0 :(得分:0)
在日志格式中,IP地址和任何其他用户数据之间应该有非常严格的分隔。您需要实现的主要考虑因素是防止外部方尝试使用某种模式登录,在这种模式中,正则表达式将匹配用户数据中的IP地址,而不是原始IP。
具有类似于您的日志格式,其中在IP可以轻松编写强大的正则表达式之前,该行开头的锚点不包含用户数据(如用户名)。
此模式占CVE's in fail2ban的大部分。
为防止这种情况出现在存储库中,FILTERS文档中提供了指南。
对于过滤器提供程序,起始锚^
应该包含在正则表达式中(假设日期/时间已删除)。
您还应该以与无效密码相同的方式阻止无效用户。没有这个,用户可以通过尝试5次相同的登录来枚举存在的有效用户。