Fail2ban配合Docker使用解决暴力破解
fail2ban 正常使用可以参考 使用Fail2ban抵御暴力破解和cc攻击,但是对于使用了 Docker host 网络的容器来说是不生效的。原因最后说, 我们先复原一下部署情况
环境现状
服务器是我自己的服务器,使用 Nginx 做入口,反向代理到不同的后端,后端服务和 Nginx 都是运行在 Docker 里,使用 Docker 的自定义网络进行互联。其中 Nginx 容器使用的是 Host 网络
配置 fail2ban
确定 Docker 版 Nginx 日志路径
Linux 内一切皆文件,Docker 会将日志写入到主机的一个日志文件中。通过
1 | docker inspect nginx --format "{{.LogPath}}" |
可以查看到容器的日志位置
创建配置文件 /etc/fail2ban/jail.d/nginx-cc.conf
1 | [nginx-cc] |
创建配置文件 /etc/fail2ban/filter.d/nginx-cc.conf
1 | [Definition] |
复现问题
照此配置后,多次访问后,查看 fail2ban-client status nginx-cc
,此时 fail2ban 已经显示 ip 被 ban 了:
查看 iptables 规则:
也已经 REJECT 了,但是并没有效果。
原因分析
原因是 fail2ban 作用于 INPUT 链,而 Docker Host 走的是 Forward 链。
解决方案
在 /etc/fail2ban/jail.d/nginx-cc.conf
里增加一行配置,指定作用于哪个链。
完整配置如下:
1 | [nginx-cc] |
执行
1 | fail2ban-client reload |
重新加载配置。此时发生 ban ip,再次查看 iptables 规则:
已经作用于 DOCKER-USER 链
allport 封禁不生效
在 docker 环境下, 需要对通过 docker 转发的所有端口进行封禁的操作, 可以指定作用于 forward 链
1 | [gitea-docker] |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭!
评论