如何在nginx上安装ModSecurity防火墙

WAF

1. 安装依赖

首先,安装所需的依赖库:

sudo apt-get update
sudo apt-get install -y git g++ apt-utils autoconf automake build-essential libcurl4-openssl-dev \
libgeoip-dev liblmdb-dev libpcre2-dev libtool libxml2-dev libyajl-dev pkgconf zlib1g-dev

2. 安装 libModSecurity

接下来,我们需要从 GitHub 获取 ModSecurity 的源代码,并进行编译安装:

  1. 克隆 libModSecurity 仓库

    git clone https://github.com/owasp-modsecurity/ModSecurity.git
    cd ModSecurity
  2. 初始化子模块

    git submodule init
    git submodule update
  3. **编译和安装 libModSecurity**:

    ./build.sh
    ./configure
    make -j$(nproc)
    sudo make install
  4. 验证安装: 确保 ModSecurity 安装成功,可以通过查看版本来验证:

    modsec-version

3. 安装 modsecurity-nginx 模块

现在我们安装 modsecurity-nginx 模块,它是用于将 ModSecurity 与 Nginx 集成的组件。

  1. 克隆 modsecurity-nginx 仓库

    git clone https://github.com/owasp-modsecurity/ModSecurity-nginx.git
  2. 下载和解压 Nginx 源代码(如果你还没有下载):

    NGINX_VERSION=$(nginx -v 2>&1 | awk -F'/' '{print $2}')
    wget http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz
    tar -xvzf nginx-$NGINX_VERSION.tar.gz
    cd nginx-$NGINX_VERSION
  3. 编译 modsecurity-nginx 模块到 Nginx

    • 静态编译(将模块嵌入到 Nginx 中):

      ./configure --add-module=../ModSecurity-nginx
      make -j$(nproc)
      sudo make install
    • 动态编译(推荐使用动态模块):

      ./configure --add-dynamic-module=../ModSecurity-nginx --with-compat
      make modules
      sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules/

4. 配置 Nginx 使用 ModSecurity

编辑 Nginx 的主配置文件 /etc/nginx/nginx.conf,使 Nginx 加载 ModSecurity 模块并启用其功能。

1. 加载动态模块: 在 nginx.conf 文件的顶部,加载 modsecurity 模块:

load_module modules/ngx_http_modsecurity_module.so;


2. 启用 ModSecurity: 在 httpserver 块中启用 ModSecurity,并指定规则文件路径:

modsecurity on;
modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;

5. 配置 ModSecurity 与 Core Rule Set (CRS)

为了增强 ModSecurity 的防护能力,可以使用 Core Rule Set (CRS) 规则集。

  1. 克隆 CRS 仓库并安装规则

    cd /etc/nginx/modsecurity
    git clone --depth 1 https://github.com/coreruleset/coreruleset.git
    mv coreruleset rules
    cp rules/crs-setup.conf.example rules/crs-setup.conf
  2. 编辑 modsecurity.conf 文件,启用 CRS 规则:

    sudo nano /etc/nginx/modsecurity/modsecurity.conf

    确保文件中包含以下内容:

    SecRuleEngine On
    SecUnicodeMapFile /etc/nginx/modsecurity/unicode.mapping
    Include /etc/nginx/modsecurity/rules/*.conf
  3. 配置 CRS 设置

    sudo nano /etc/nginx/modsecurity/coreruleset/crs-setup.conf

    根据需要修改配置,以适应特定需求。


6. 测试和重启 Nginx

  1. 测试 Nginx 配置是否正确

    sudo nginx -t
  2. 重启 Nginx 使更改生效:

    sudo systemctl restart nginx

7. 验证 ModSecurity 是否生效

使用 curl 测试是否成功启用了 ModSecurity 防护规则:

curl -A "Nikto" http://your-server-ip


如果 ModSecurity 配置正确,你应该会看到 403 Forbidden 错误响应。

总结

通过以上步骤,你已经成功在 Ubuntu 22.10 上安装并配置了 ModSecurity 和 CRS 规则集。此配置将增强 Nginx 服务器的安全性,保护 Web 应用免受各种常见的攻击。

- 安装依赖:确保安装所需的库和工具。
- **安装 libModSecurity**:从 GitHub 获取并编译 libModSecurity
- **安装 modsecurity-nginx**:将 ModSecurity 集成到 Nginx 中,支持静态或动态模块。
- 启用和配置 ModSecurity:在 Nginx 中启用 ModSecurity,加载 CRS 规则集,增强防护能力。

按照此指导文章操作,你的 Nginx 服务器将具备强大的 Web 应用防护能力。

希望这篇文章对你有所帮助!如有任何问题,随时欢迎询问。