开发学院

您的位置:首页>技术文章>正文

技术文章

rocky10+lnmp2.3安装naxsi防护

开发学院2026-10-30 07:38:07

1. 装编译依赖(Rocky 10)

dnf -y install gcc gcc-c++ make pcre-devel pcre2-devel zlib-devel openssl-devel wget

 2. 下载 Naxsi 1.7(含 libinjection 子模块,不用再拉 git submodule)

cd /usr/local/src
wget "https://github.com/wargio/naxsi/releases/download/1.7/naxsi-1.7-src-with-deps.tar.gz"
mkdir naxsi && tar -C naxsi -xzf naxsi-1.7-src-with-deps.tar.gz

 3. 校验关键文件(必须有 config,否则 configure 不认)

ls /usr/local/src/naxsi/naxsi_src/config
# 有输出 = 路径正确

 4. 下载同版本 Nginx 1.30.0 源码(LNMP upgrade 脚本要用)

wget https://nginx.org/download/nginx-1.30.0.tar.gz
tar xzf nginx-1.30.0.tar.gz


lnmp.conf 配置

编辑 LNMP 解压目录下的 lnmp.conf:

Nginx_Modules_Options='--add-module=/usr/local/src/naxsi/naxsi_src'
cd /root/lnmp2.3     # 你的 LNMP 解压目录
./upgrade.sh nginx

提示输入版本时,填写当前安装的nginx版本,我的系统是1.30.0(和当前运行版本完全一致,等于"重编译不升级")。


编译后验证

# 1. 看编译参数里有没有 naxsi
/usr/local/nginx/sbin/nginx -V 2>&1 | grep naxsi
# 出现 --add-module=/usr/local/src/naxsi/naxsi_src 即成功

# 2. 配置语法检查
/usr/local/nginx/sbin/nginx -t

# 3. 平滑重载
lnmp nginx reload


三个必须记住的点

Naxsi 1.7版本不用跟着 Nginx 走, 通吃;要严丝合缝对齐的是 Nginx 源码版本 = 1.30.0。

src-with-deps 已内置 libinjection,configure 时看到 No package 'libinjection' found 是正常提示,忽略即可。

以后 LNMP 再升级 Nginx(比如升到 1.31.x),只要改 lnmp.conf 里的模块路径不变,upgrade.sh nginx 会按原参数重编,Naxsi 自动跟着编进去——前提是 /usr/local/src/naxsi/naxsi_src 目录别删。

站点 location / 里加(先 LearningMode 跑几天再看误报):

SecRulesEnabled;
LearningMode;
LibInjectionSql;
LibInjectionXss;
DeniedUrl "/RequestDenied";
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;

观察日志:

grep NAXSI_FMT /usr/local/nginx/logs/error.log | tail -20

无误报后删掉 LearningMode; 切拦截模式。


LNMP + Naxsi 场景下的最小配置


要让 fail2ban 自动封 Naxsi 拦下的攻击 IP,需要手写一个 filter + 一个 jail。


1)创建 Naxsi filter

/etc/fail2ban/filter.d/naxsi.conf:

[Definition]
# 匹配 Naxsi 在 error.log 里的拦截记录
# 格式示例:2024/01/01 12:00:00 [error] 1234#0: *56 NAXSI_FMT: ip=1.2.3.4&server=xxx&uri=/&learning=0&total_processed=1&total_blocked=1&...
failregex = NAXSI_FMT.*ip=<HOST>
            NAXSI_FMT.*&ip=<HOST>&
            \[error\].*NAXSI_FMT.*<HOST>

ignoreregex =

2)创建 jail 配置

/etc/fail2ban/jail.d/naxsi.local:

ini
[naxsi]
enabled  = true
filter   = naxsi
# LNMP 默认错误日志路径
logpath  = /usr/local/nginx/logs/error.log
# 5 分钟内触发 10 次 Naxsi 拦截就封
maxretry = 10
findtime = 300
bantime  = 3600
# 可选:封禁后发送告警邮件
# action   = %(action_mwl)s

3)如果要防 Nginx 暴力扫描(404 爬虫)

/etc/fail2ban/jail.d/nginx-botsearch.local:

ini
[nginx-botsearch]
enabled  = true
filter   = nginx-botsearch
logpath  = /usr/local/nginx/logs/access.log
maxretry = 20
findtime = 300
bantime  = 1800

4)启动并验证

# 装 fail2ban(Rocky 10)
dnf -y install epel-release
dnf -y install fail2ban

# 启动
systemctl enable --now fail2ban

# 确认 jail 已加载
fail2ban-client status
# 应该看到 naxsi、nginx-botsearch、sshd

# 看 naxsi jail 详情
fail2ban-client status naxsi

# 测试 filter 正则是否匹配日志

fail2ban-regex /usr/local/nginx/logs/error.log /etc/fail2ban/filter.d/naxsi.conf