到目前为止,我在单 VPC 上使用 Docker 手工制作托管解决方案,在主机上安装了fail2ban,并查看来自 Nginx 容器的 Docker 日志(每个服务器可以托管多个网站,通过 Nginx 代理提供服务)
我想知道如何使用 Kubernetes 实现相同的功能,特别是在 X 次尝试后阻止对 /wp-admin 访问的 POST 请求?
我考虑过为 Nginx 代理(K8s 中的 Ingress)构建一个自定义 Docker 镜像,包括 Fail2ban;但也许有一个更简单的解决方案:网络策略?
这是一个老问题,可能由作者解决,但对于其他社区成员,我决定提供一个带有一些说明的答案。
我试图找到一个
fail2ban
解决方案来帮助解决这个问题。不幸的是,我没有找到任何合适且易于使用的东西。fail2ban
与 Kubernetes 集成创建一个 GitHub 问题可能是合理的。
以下是一些可能对您有帮助的其他解决方案:
使用 Kubernetes Ingress 将 HTTP 和 HTTPS 路由从集群外部公开到集群内的服务可能是您的一个很好的起点。
正如我们在 Kubernetes Ingress 文档中看到的那样:
您必须有一个 Ingress 控制器才能满足 Ingress。仅创建 Ingress 资源没有任何效果。您可能需要部署 Ingress 控制器,例如 ingress-nginx。
在 NGINX Ingress Controller 中,您可以使用 ModSecurity 作为第三方插件:
ModSecurity 是一个开源 Web 应用程序防火墙。它可以针对一组特定的入口位置启用。必须首先通过在 ConfigMap 中启用 ModSecurity 来启用 ModSecurity 模块。请注意,这将为所有路径启用 ModSecurity,并且必须手动禁用每个路径。
您可以通过在入口级别设置以下注释来启用 OWASP 核心规则集(更多信息可以在 NGINX ModSecurity 配置文档中找到):
nginx.ingress.kubernetes.io/enable-owasp-core-rules: "true"
似乎可以使用
ModSecurity
作为 强力身份验证保护,如本文所述:
保护 WordPress 登录免受暴力攻击。
此外,值得一提的是,NGINX Ingress Controller 有许多注释,可用于缓解 DDoS 攻击,例如:
nginx.ingress.kubernetes.io/limit-whitelist:要从速率限制中排除的客户端 IP 源范围。该值是逗号分隔的 CIDR 列表。
nginx.ingress.kubernetes.io/limit-rps:每秒从给定 IP 接受的请求数。突发限制设置为此限制乘以突发乘数,默认乘数为 5。当客户端超出此限制时,返回 limit-req-status-code 默认:503。
nginx.ingress.kubernetes.io/limit-connections:单个 IP 地址允许的并发连接数。超过此限制会返回 503 错误。
当您使用 WordPress 时,您可以使用许多 WordPress 插件。 例如,Web 应用程序防火墙插件提供了
Real Time IP Blocking
功能。
无论您使用本地还是云环境,都可以使用专门的防火墙 (WAF) 和 DDoS 缓解服务,例如 Google Cloud Armor(请参阅适用于本地和云工作负载的 Cloud Armor)。
CrowdSec 是一个免费、现代的协作行为检测引擎,并配有全球 IP 信誉网络。它继承了fail2ban的理念,但与IPV6兼容并且速度提高了60倍(Go vs Python),它使用 Grok 模式来解析日志和 YAML 场景来识别行为。 CrowdSec 专为现代云/容器/基于虚拟机的基础设施而设计(通过解耦检测和修复)。一旦检测到,您可以使用各种保镖(防火墙块、nginx http 403、验证码等)来补救威胁,而攻击性 IP 可以发送到 CrowdSec 进行管理,然后在所有用户之间共享,以进一步提高每个人的安全性。
GitHub 上的 CrowdSec:https://github.com/crowdsecurity/crowdsec
与 Fail2Ban 的比较:https://www.crowdsec.net/blog/crowdsec-not-your-典型-fail2ban-clone
我认为你在谈论监控请求,k8s无法监控流量。网络策略只能用于节点之间的负载均衡。您可以使用 Istio 监控流量,但与微服务连接。
Istio
。
然后,您必须使用 Grafana 可视化指标并按照下面教程中的步骤操作
https://istio.io/docs/tasks/telemetry/metrics/using-istio-dashboard/
可视化工作负载仪表板提供了有关每个工作负载指标的详细信息。
Zipkin
跟踪请求
我希望这有帮助。