我想在Nginx Ingress Controller with ModSecurity环境中更新核心规则集

首先

我在Nginx Ingress Controller上进行了ModSecurity的实施。
我将核心规则集(CRS/OWASP前十名及其他广泛签名)的更新方法进行了确认。

其中一目的

定期更新 Nginx Ingress Controller 上的核心规则集。

方法

    • 理想:Nginx Ingress Controller 上の Core Rule Set のみ更新

 

    妥協案:Nginx Ingress Controller 自体のコンテナイメージ含めて更新

我大概浏览了一下互联网,但我觉得可能会有一个妥协的方案…

ModSecurity 简介

ModSecurity 是一个开源的Web应用防火墙。
OWASP核心规则集是一组规则。CRS可以在ModSecurity或兼容的Web服务器中使用。

根据ModSecurity官方网站的消息,Trustwave公司宣布ModeSecurity将于2024年7月1日终止维护(EOL)。 (看来ModeSecurity只剩下一年半的时间了…)
此后,ModeSecurity将移交给开放源代码社区,但未来的发展情况(是否会得到持续开发)还不得而知。

根据阅读 GitHub 上的 README,目前最新版本似乎是 v3.x.x 系列。最初是为了 Apache 而创建的,但在 v3 中删除了对 Apache 的依赖,以支持 Nginx 和 IIS。

image.png

Nginx Ingress控制器概述

参考先人的 Kubernetes 中 Ingress Controller 的列表,可以看到有两个免费可用的 Nginx Ingress。

    1. kubernetes/ingress-nginx = Kubernetes 的 Ingress Nginx

 

    nginxinc/kubernetes-ingress = Nginx 公司的 Kubernetes Ingress

由于我们使用的是前一种选项,所以我们将在这个环境中进一步讨论 kubernetes/ingress-nginx。

核心规则集更新方式

查看OWASP CRS文档时,发现需要使用ModSecurity 3.0.8或更高版本的IIS/Nginx Web服务器。在IIS/Nginx环境中使用CRS v3需要ModSecurity v.3.0.8或更高版本。

従い、恐らく Nginx Ingress は ModSeurity v3.0.8 以降を採用していると推測されます。

我认为在Nginx Ingress上,CRS相关配置是通过crs-setup.conf文件进行管理的。我认为只需要修改这个配置文件就可以了,但是由于不清楚如何正确地编写配置文件,所以需要多看一些文档…

KUBERNETES INGRESS CONTROLLERを読む限り、大した情報はありません。
続いて https://github.com/coreruleset/coreruleset/blob/v4.0/dev/INSTALL内の INSTALE ファイルを確認します。

Installing on Nginx
-------------------
    1. Compile ModSecurity into Nginx
    2. Ensure that ModSecurity is loading correctly by checking error.log
    at start up for lines indicating ModSecurity is installed. An example
    might appear as follows:
    ```ModSecurity for nginx (STABLE)/2.9.1 (http://www.modsecurity.org/) configured.```
    3. The most common method of deploying ModSecurity we have seen is
    to create a new folder underneath the Nginx directory (typically
    /usr/local/nginx/conf/). Often this folder
    is called 'owasp-modsecurity-crs'. Create this folder and cd into it.
    4. Download our release from https://coreruleset.org/installation/
    and unpack it into a new owasp-modsecurity-crs folder.
    5. Move the crs-setup.conf.example file to crs-setup.conf.
    Please take this time to go through this
    file and customize the settings for your local environment. Failure to
    do so may result in false negatives and false positives. See the
    section entitled OWASP CRS Configuration for more detail.
    6. Rename rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example and
    rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example to remove the
    '.example' extension. This will allow you to add exceptions without updates
    overwriting them in the future.
    7. Nginx requires the configuration of a single ModSecurity
    configuration file within the nginx.conf file using the
    'ModSecurityConfig' directive (when using ModSecurity 2.x).
    Best practice is to set 'ModSecurityConfig' to a file from
    which you will include your other ModSecurity configuration
    files. In this example we will use:
    ```ModSecurityConfig modsec_includes.conf;```
    7. Within modsec_includes.conf create your includes to the
    CRS folder similar to as follows (The modsecurity.conf file from the
    ModSecurity installation is included in this example):
    ```
    Include modsecurity.conf
    Include owasp-modsecurity-crs/crs-setup.conf
    Include owasp-modsecurity-crs/plugins/*-config.conf
    Include owasp-modsecurity-crs/plugins/*-before.conf
    Include owasp-modsecurity-crs/rules/*.conf
    Include owasp-modsecurity-crs/plugins/*-after.conf
    ```
    8. Restart web server and ensure it starts without errors
    9. Make sure your web sites are still running fine.
    10. Proceed to the section "Testing the Installation" below.

以下是用于nginx的安装步骤。简要总结如下。

    • まずは ModSecurity をコンパイルする

 

    • error.log を確認し、正しく ModSecurity がロードされているか確認

usr/local/nginx/conf/owasp-modsecurity-crs フォルダ作成されることを確認
最新の Core Rule Set をダウンロードして owasp-modsecurity-crs フォルダに展開

crs-setup.conf.example を crs-setup.conf にリネイム後、必要であれば設定内容を変更

REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example と RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example から “example” 拡張子を除く。次回 CRS アップデート時に当該ファイルは上書きされなくなる
nginx.conf 内に ModSecurity 用の設定ファイルを指定

modsec_includes.conf ファイルを作成し、CRS フォルダ等を含める
nginx 再起動して動作確認

整理 Ingress nginx controller 上已经出现的设置文件和路径。(在 Ingress nginx controller 上进行确认)

パスファイル名/etc/nginx/modsecuritymodsecurity.conf/etc/nginx/owasp-modsecurity-crscrs-setup.conf/etc/nginx/owasp-modsecurity-crsrules(ディレクトリ)/etc/nginx/owasp-modsecurity-crsnginx-modsecurity.conf(modsec_includes.confと同じ)

整理以上后,想到了一个可以不用再次编译,只需替换CRS(规则)并重新启动nginx即可的想法!

結論 – 概括而言

首先,将 Ingress Nginx 控制器上的 rules 文件夹切换到 nfs-volume。然后,替换 rules 文件夹中的规则集和 crs-setup.conf 文件,并通过执行 nginx -s reload 命令来更新 CRS。

在任务进行过程中引起关注的问题

Q. Nginx Ingress Controller 的版本是多少?

A. 描述 Pod

# kubectl describe pod xxx |grep Image
    Image:         registry.k8s.io/ingress-nginx/controller:v1.4.0

Q. 用于ModSecurity的核心规则集的版本是什么?

确认 crs-setup.conf 文件的内容。

$ cat /etc/nginx/owasp-modsecurity-crs/crs-setup.conf |grep 'Core Rule Set ver'
# OWASP ModSecurity Core Rule Set ver.3.3.2 // ver3.3.2 ですね。現時点の最新は ver3.3.4 です

问题:ModSecurity的版本是多少?

由于CRS正在使用v3.x.x版本,所以ModSecurity是使用v3或更高版本,这是毫无疑问的。但是,我们没有找到明确的确认方法。如果仔细查看GitHub上的文档,可能会找到一些信息…

Q. 只更新核心规则集是否好,但与ModSecurity主体的兼容性是否可行?

如果是v.3.x.x系列,可以认为没有问题(推测)。

最后

现在有一个叫做Coraza的后续替代ModSecurity的选择。它与CRS v4兼容,并且正在进行使其适用于Nginx的开发,因此Coraza很有可能成为ModSecurity的替代品。
那么,Nginx Ingress方面会迁移到Coraza上来代替ModSecurity吗?

请查考资料。

    • ModSecurity-wiki

Kubernetes NGINX Ingress WAF with ModSecurity. From zero to hero! // 英語でこれくらいサクッと書けるようになりたい。良記事。
OWASP ModSecurity Core Rule Set
OWASP® ModSecurity Core Rule Set (CRS)

coreruleset/coreruleset // OWASP の CRS git はここ

Installation Guide // Nginx Ingress Controller の公式ドキュメントはここ

广告
将在 10 秒后关闭
bannerAds