【问题标题】:Block country by geoip with nginx ingress controller and modsecurity使用 nginx 入口控制器和 modsecurity 通过 geoip 阻止国家/地区
【发布时间】:2021-11-29 13:27:54
【问题描述】:

我试图在启用 modsecurity 的 nginx 入口控制器上阻止一个国家​​,但仍然没有运气。我的配置是:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/modsecurity-snippet: |
      SecRuleEngine On                                       
      SeqRequestBodyAccess On                                
      SecAuditEngine On                                      
      SecAuditLogParts ABIJDEFHZ                             
      SecAuditLog /var/log/modsec_audit.log                  
      SecGeoLookupDb /etc/nginx/geoip/GeoIP.dat
      SecRule REMOTE_ADDR "@geoLookup" "chain,id:22,drop,msg:WrongIP"
      SecRule GEO:COUNTRY_CODE "@streq GR"
    nginx.ingress.kubernetes.io/whitelist-source-range: 0.0.0.0/0

当我尝试使用 curl 访问 URL 时,我得到的是 HTTP 200 而不是 HTTP 403。

【问题讨论】:

  • 您使用的是哪个版本的 Kubernetes,您是如何设置集群的?您是使用裸机安装还是某些云提供商?
  • 我使用基于 kubernetes 1.21 EKS 和 nginx-ingress-controller 1.0.3
  • 抱歉很久没有回复。您能否提供您的日志?

标签: kubernetes-ingress nginx-ingress mod-security


【解决方案1】:

首先验证您的解决方案是否有效:

尝试更改您的条件:

"@streq GR"

到:

"!@streq GR"

并再次测试。如果您的规则确实有效,那么您得到的结果应该翻转:200 到 403 或 403 到 200。

【讨论】:

  • 已经试过了:只允许一个国家。但是当我尝试使用以下命令访问主机时: curl -H "User-Agent: Nikto" https:..... 我得到 403 所以 modsecurity 处于活动状态
  • 所以"@streq GR" 给你一个 200 响应,"!@streq GR" 给你一个 403 响应?这听起来像是查找或正确传递的真实源IP地址存在问题。审核日志显示什么?
  • 没有。两种情况:HTTP200。
  • 啊,明白了。如果“是 GR”和“不是 GR”都不起作用,那么某些东西从根本上就坏了。 /var/log/modsec_audit.log 说什么?
  • 这很奇怪。以上述方式配置日志后,我无法在日志中看到我的请求。我正在尝试访问 curl https://...../info 但在日志中我只看到对 /nginx_status 和 /is-dynamic-lb-initialized 的请求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2019-01-26
相关资源
最近更新 更多