我希望我自己的小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
现在,这将监视my-app / logs / access.log并在设置日志后超过5次不正确的尝试后锁定IP。
在日志格式中,IP地址和任何其他用户数据之间应该存在非常严格的分离。您需要实现的主要考虑因素是防止外部方尝试使用您正则表达式的模式登录,该模式将匹配用户数据中的IP地址而不是原始IP。
像你这样的日志格式,行开头的锚点不包含用户数据(如用户名),在IP之前可以轻松编写强大的正则表达式。
这种模式占CVE's in fail2ban的大部分。
为了防止在您的模式上出现这种情况,存储库中的FILTERS文档中有指导。
对于过滤器提供程序,应该在正则表达式中包含一个起始锚点qazxsw poi(假设已删除日期/时间)。
您还应该以与无效密码相同的方式阻止无效用户。如果没有这个,用户可以通过尝试相同的登录5次来枚举存在的有效用户。