
在Debian11宝塔面板下编译安装Nginx防火墙ngx_waf模块
*关于ngx_waf的介绍、编译和安装建议先看下开发者的教程:https://docs.addesp.com/ngx_waf/zh-cn/guide/installation.html
*这里主要为Debian11+、Ubuntu 20.04.6 LTS宝塔环境下的Nginx防火墙模块ngx_waf的安装,其他环境请参考官方文档或者自行搜索引擎检索。
根据开发者的文档,在宝塔下可以采用宝塔官方提供的编译功能,选择自定义模块就行,可是反复折腾还是没有编译成功,也不知道是宝塔系统的bug还是预置脚本有问题,没空研究宝塔的具体问题,这里采用另外一种方式就是,先编译Nginx本身,在Nginx安装成功后再把ngx_waf编译到现有Nginx环境,大概流程如下:
一、前置条件:
1、如原先使用的是宝塔的极速安装模式则须先卸载宝塔的Nginx服务(操作卸载不会删除站点配置),如果一开始采用的就是编译安装则不需要操作此步骤,跳过直接进行编译操作。
2、宝塔软件商店里重新安装Nginx,选择编译安装,自定义模块不用选择,直接点提交安装。
二、编译安装
打开终端
1、安装ModSecurity规则引擎、更新依赖,在终端运行以下命令:
# 如果你使用 Current 版本,并想开启ModSecurity规则引擎的话,请添加这些代码
# 安装 ModSecurity v3(可选)
cd /usr/local/src
git clone -b v3.0.13 https://github.com/SpiderLabs/ModSecurity.git
cd ModSecurity
chmod +x build.sh
./build.sh
git submodule init
git submodule update
./configure --prefix=/usr/local/modsecurity
make -j$(nproc)
make install
#更新依赖
apt update
apt install -y libsodium23 \
libsodium-dev \
libcurl4-openssl-dev \
git \
libmodsecurity-dev \
libmodsecurity3
2、安装依赖LuaJIT-2.1和uthash
wget https://github.com/openresty/luajit2/archive/refs/tags/v2.1-20240815.tar.gz
tar -zxvf v2.1-20240815.tar.gz
cd luajit2-2.1-20240815
make install PREFIX=/usr/local/LuaJIT
cd /usr/local/src \
&& git clone https://gitee.com/yuwenjie10086/uthash.git
3、设置lua和uthash环境变量(临时):
export LUAJIT_LIB=/usr/local/LuaJIT/lib
export LUAJIT_INC=/usr/local/LuaJIT/include/luajit-2.1
export LIB_UTHASH=/usr/local/src/uthash
使用ModSecurity引擎则增加以下环境变量(可选)
# 如果操作系统的 Ubuntu 则不用写下面这两行
export LIB_SODIUM=/usr/local/libsodium
export LIB_MODSECURITY=/usr/local/modsecurity
可以通过env
命令查看系统变量,如果设置没有生效可以进入/etc/profile文件,把以上环境变量配置追加到该文件末尾,并运行命令:source /etc/profile
使配置生效(全局)。
4、下载ngx_waf(由于github众所周知的原因,以下均采用网页的镜像源安装):
这里有两个版本供我们选择,具体可以参考:https://docs.addesp.com/ngx_waf/zh-cn/guide/version.html
(LTS 版):
cd /www/server/nginx/src
git clone -b lts https://gitee.com/lhy1993917/ngx_waf.git
cd /www/server/nginx/src/ngx_waf
git clone https://gitee.com/chen_di/libinjection.git inc/libinjection
git clone https://gitee.com/yuwenjie10086/uthash.git inc/uthash
(Current 版):
cd /www/server/nginx/src
git clone -b current https://gitee.com/lhy1993917/ngx_waf.git
cd /www/server/nginx/src/ngx_waf
git clone -b v1.7.15 https://gitee.com/rong957/cJSON.git lib/cjson
git clone -b v2.3.0 https://gitee.com/yuwenjie10086/uthash.git lib/uthash
5、编译安装ngx_waf
编译安装一个新的模块需要知道当前的 nginx 的 configure 脚本的参数,您可以通过运行 nginx -V 来获取,并替换下面的{nginx参数}:
./configure {nginx参数} --add-module=/www/server/nginx/src/ngx_waf --with-cc-opt=-std=gnu99
如:
./configure --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --add-module=/www/server/nginx/src/ngx_waf --with-cc-opt=-std=gnu99
运行编译前配置写入:
cd /www/server/nginx/src
./configure --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --add-module=/www/server/nginx/src/ngx_waf --with-cc-opt=-std=gnu99
sed -i 's/^\(CFLAGS.*\)/\1 -fstack-protector-strong -Wno-sign-compare/' objs/Makefile
6、编译:
make
7、将/www/server/nginx/src/objs
下的nginx
文件复制到:/www/server/nginx/sbin
替换目录下的nginx
原文件(覆盖前记得备份原文件)。
8、重新启动nginx
服务,至此编译安装ngx_waf
完成。