【问题标题】:How to use Fail2ban under Kubernetes?Kubernetes下如何使用Fail2ban?
【发布时间】:2019-05-15 22:46:46
【问题描述】:

到目前为止,我一直在使用 Docker 在单 VPC 上提供手动托管解决方案,在主机上安装了 fail2ban,并从 Nginx 容器中查看 Docker 日志(每台服务器可以托管多个网站,通过 Nginx 代理提供服务)

我想知道如何使用 Kubernetes 实现相同的功能,尤其是在 X 次尝试后阻止对 /wp-admin 访问的 POST 请求?

我想过为 Nginx 代理(K8s 中的 Ingress)构建一个自定义 Docker 镜像,包括 Fail2ban;但也许有一个更简单的解决方案:网络策略?

【问题讨论】:

  • 你还有这个问题吗?不知道ModSecurity能不能解决这个问题。

标签: docker kubernetes firewall fail2ban ufw


【解决方案1】:

这是一个老问题,作者可能已经解决了,但对于其他社区成员,我决定提供一些澄清的答案。

我试图找到一个fail2ban 解决方案来帮助解决这个问题。不幸的是,我没有找到任何合适且易于使用的东西。
fail2ban 与 Kubernetes 集成创建一个 GitHub issue 可能是合理的。

以下是一些可能对您有所帮助的其他解决方案:

ModSecurity

使用Kubernetes Ingress 将集群外部的 HTTP 和 HTTPS 路由公开给集群内的服务可能是一个很好的起点。

正如我们在Kubernetes Ingress documentation 中看到的:

您必须有一个 Ingress 控制器才能满足 Ingress。仅创建 Ingress 资源没有任何效果。您可能需要部署一个 Ingress 控制器,例如 ingress-nginx。

在 NGINX 入口控制器中,您可以使用 ModSecurity 作为第三方插件:

ModSecurity 是一个开源 Web 应用程序防火墙。可以为一组特定的入口位置启用它。 ModSecurity 模块必须首先通过在 ConfigMap 中启用 ModSecurity 来启用。请注意,这将为所有路径启用 ModSecurity,并且必须手动禁用每个路径。

您可以通过在入口级别设置以下注释来启用OWASP Core Rule Set(更多信息可以在NGINX ModSecurity configuration 文档中找到):

nginx.ingress.kubernetes.io/enable-owasp-core-rules: "true"

似乎可以将ModSecurity 用作蛮力身份验证保护,如本文所述: Defending WordPress Logins from Brute Force Attacks.

另外,值得一提的是,NGINX Ingress Controller 有很多annotations可以用来缓解DDoS攻击例如:

nginx.ingress.kubernetes.io/limit-whitelist:客户端IP源范围排除在速率限制之外。该值是一个逗号分隔的 CIDR 列表。

nginx.ingress.kubernetes.io/limit-rps:每秒从给定 IP 接受的请求数。突发限制设置为此限制乘以突发倍数,默认倍数为5。当客户端超过此限制时,返回limit-req-status-code default: 503。

nginx.ingress.kubernetes.io/limit-connections:单个 IP 地址允许的并发连接数。超过此限制时返回 503 错误。

WordPress Plugins

当您使用 WordPress 时,您可以使用许多 WordPress 插件。 例如Web Application Firewall 插件提供Real Time IP Blocking 功能。

Web Application Firewall (WAF)

无论您使用本地还是云环境,您都可以使用专用防火墙 (WAF) 和 DDoS 缓解服务,例如 Google Cloud Armor(请参阅 Cloud Armor for on-prem and cloud workloads)。

【讨论】:

    【解决方案2】:

    我认为您在谈论监控请求,k8s 无法监控流量。网络策略只能用于节点之间的负载平衡。您可以使用 Istio 监控流量,但与微服务连接。

    您需要在集群上安装Istio。 然后你必须使用 Grafana 可视化指标并按照下面教程中的步骤操作 https://istio.io/docs/tasks/telemetry/metrics/using-istio-dashboard/ 和可视化工作负载仪表板提供有关每个工作负载指标的详细信息。

    Istio 还有很多其他的优点,你也可以使用Zipkin跟踪请求

    我希望这会有所帮助。

    【讨论】:

    • 感谢您的回答。但据我了解,Istio/Zipkin 与任何类型的 WAF 无关。除了可视化请求之外,我还希望能够禁止与自定义过滤器匹配的 IP。
    • 是的,但是 Istio 会帮助您可视化请求,然后您可以在此基础上编写自己的脚本来阻止您想要的请求。 Kubernetes 中没有这个功能,你必须手动完成。
    • @MaggieO 能否请您描述一下脚本,比如在分析日志后我想阻止一个 IP,那么应该发送什么样的请求脚本以及发送到哪里?阻止IP?
    猜你喜欢
    • 1970-01-01
    • 2019-02-06
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多