Windows 一键加固 aaPanel:清理可疑 Lua 文件并限制面板仅越南 IP 访问
aaPanel 是常用的 Linux 服务器管理面板,可以通过网页管理网站、数据库、Nginx、PHP 和服务器文件。 由于面板拥有较高的服务器权限,如果管理端口长期暴露在公网,或者 Nginx 配置中出现来源不明的 Lua 文件, 服务器可能面临账号暴力破解、恶意跳转、配置篡改和文件被植入等安全风险。
本文介绍如何在 Windows 系统中使用 SSH 和 SCP 管理 Debian、Ubuntu 服务器, 检查并隔离 aaPanel Nginx 中的可疑 Lua 文件,隐藏 Nginx 版本号, 并使用 ipset 与 iptables 将 aaPanel 管理端口限制为仅允许越南 IPv4 网段访问。
重要提醒: 不要直接删除/www/server/nginx/lib/lua 整个目录,也不要删除其中的 ngx 和 resty 目录,否则可能导致 Nginx 无法启动。
一、需要完成的安全加固项目
本次 aaPanel 安全加固主要包括以下内容:
- 从 Windows 登录 Linux 服务器;
- 检查 Nginx 配置中是否存在可疑 Lua 调用;
- 删除或隔离来源不明的 Lua 文件;
- 保留 Nginx 正常运行所需的 Lua 标准库;
-
设置
server_tokens off;隐藏 Nginx 版本号; - 上传越南 IPv4 CIDR 网段文件;
- 自动读取 aaPanel 当前管理端口;
- 限制 aaPanel 端口仅允许越南 IPv4 访问;
- 禁止通过 IPv6 绕过面板访问限制;
- 保存 ipset 和 iptables 规则,确保服务器重启后仍然有效。
二、Windows 登录 Linux 服务器
在 Windows CMD、PowerShell 或 Windows Terminal 中执行以下命令:
ssh -p SSH端口 root@服务器IP
例如:
ssh -p 46853 root@服务器IP
第一次连接时,系统可能提示:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入:
yes
然后输入 root 密码。输入密码时屏幕不会显示字符或星号,这是正常现象。
三、检查 aaPanel Nginx 中的可疑 Lua 文件
需要重点检查以下文件:
/www/server/nginx/html/fastcgi_waf.lua
/www/server/nginx/html/waf.lua
/www/server/nginx/lib/lua/ngxd.lua
/www/server/nginx/lib/lua/ngxdl.lua
执行下面的命令检查这些文件是否存在:
find /www/server/nginx -type f \( \
-name "fastcgi_waf.lua" -o \
-name "waf.lua" -o \
-name "ngxd.lua" -o \
-name "ngxdl.lua" \
\) -ls 2>/dev/null
如果没有任何输出,说明这些文件当前不在 Nginx 目录中。
四、检查 Nginx 是否正在调用可疑 Lua 文件
即使 Lua 文件已经被删除,Nginx 配置中仍可能保留执行指令。
/www/server/nginx/sbin/nginx -T 2>&1 | awk '
$0 !~ /^[[:space:]]*#/ &&
$0 ~ /(_by_lua_file|fastcgi_waf|ngxd|ngxdl|luawaf\.conf)/
'
重点关注以下配置:
access_by_lua_file
content_by_lua_file
rewrite_by_lua_file
init_by_lua_file
例如:
access_by_lua_file /www/server/nginx/html/fastcgi_waf.lua;
如果确认该文件不是正常插件所需,应先将这一行注释,再删除或隔离对应的 Lua 文件。
五、不能删除的 Lua 标准库
以下目录通常是 aaPanel Nginx 或 OpenResty 的正常标准库:
/www/server/nginx/lib/lua/ngx
/www/server/nginx/lib/lua/resty
下面这行配置通常也必须保留:
lua_package_path "/www/server/nginx/lib/lua/?.lua;;";
该配置只是告诉 Nginx 到哪个目录查找 Lua 模块,并不会自动执行 ngxd.lua、ngxdl.lua 或其他陌生文件。
rm -rf /www/server/nginx/lib/lua
删除整个目录可能导致 Nginx 出现 failed to load the 'resty.core' module 错误。
六、删除可疑 Lua 文件
下面的命令会先检查文件是否存在,存在时解除不可修改属性并删除。
for f in \
/www/server/nginx/html/fastcgi_waf.lua \
/www/server/nginx/html/waf.lua \
/www/server/nginx/lib/lua/ngxd.lua \
/www/server/nginx/lib/lua/ngxdl.lua
do
if [ -f "$f" ]; then
echo "发现文件:$f"
chattr -i -a "$f" 2>/dev/null
rm -f "$f" && echo "已删除:$f" || echo "删除失败:$f"
else
echo "文件不存在:$f"
fi
done
删除后再次检查:
find /www/server/nginx/html /www/server/nginx/lib/lua -type f \( \
-name "fastcgi_waf.lua" -o \
-name "waf.lua" -o \
-name "ngxd.lua" -o \
-name "ngxdl.lua" \
\) -ls 2>/dev/null
没有输出表示相关文件已经删除。
七、收紧 Nginx HTML 目录权限
如果 /www/server/nginx/html 只用于存放静态页面,
可以将目录所有者调整为 root,并将目录权限设置为 755、文件权限设置为 644。
chattr -R -i -a /www/server/nginx/html 2>/dev/null
chown -R root:root /www/server/nginx/html
find /www/server/nginx/html -type d -exec chmod 755 {} \;
find /www/server/nginx/html -type f -exec chmod 644 {} \;
检查权限:
find /www/server/nginx/html -type f -printf '%m %u:%g %p\n'
正常静态文件应类似:
644 root:root /www/server/nginx/html/index.html
八、隐藏 Nginx 具体版本号
编辑 Nginx 主配置文件:
/www/server/nginx/conf/nginx.conf
在 http {} 区块内加入:
server_tokens off;
配置示例:
http
{
server_tokens off;
include mime.types;
include proxy.conf;
lua_package_path "/www/server/nginx/lib/lua/?.lua;;";
}
检查配置:
/www/server/nginx/sbin/nginx -t
配置正确时会显示:
syntax is ok
test is successful
然后重新加载 Nginx:
/www/server/nginx/sbin/nginx -s reload
设置后,HTTP 响应头可能仍然显示 Server: nginx,
但不会继续显示 nginx/1.30.0 之类的具体版本号。
九、查看 aaPanel 管理端口
aaPanel 当前端口一般保存在:
/www/server/panel/data/port.pl
执行:
cat /www/server/panel/data/port.pl
也可以使用:
bt 14
bt 14 可能显示面板地址、端口、用户名和安全入口,
不要将完整结果公开。
十、上传越南 IPv4 网段文件
将越南 IPv4 CIDR 文件保存到 Windows 下载目录:
C:\Users\你的用户名\Downloads\vietnam_ipv4_cidrs_2026-07-01.txt
重新打开一个 Windows CMD 窗口,执行:
scp -P 46853 "%USERPROFILE%\Downloads\vietnam_ipv4_cidrs_2026-07-01.txt" root@服务器IP:/root/
注意,SCP 的端口参数必须使用大写 -P。
上传完成后,在服务器中检查:
ls -lh /root/vietnam_ipv4_cidrs_2026-07-01.txt
wc -l /root/vietnam_ipv4_cidrs_2026-07-01.txt
十一、安装 ipset 和 iptables 持久化组件
Debian 或 Ubuntu 系统执行:
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y ipset ipset-persistent iptables-persistent
十二、导入越南 IPv4 网段
创建越南 IPv4 集合:
ipset create vn_ipv4 hash:net family inet hashsize 4096 maxelem 65536 -exist
ipset flush vn_ipv4
导入 CIDR 文件:
tr -d '\r' < /root/vietnam_ipv4_cidrs_2026-07-01.txt | while IFS= read -r cidr;
do [ -z "$cidr" ] && continue case "$cidr" in \#*) continue ;
;
esac ipset add vn_ipv4 "$cidr" -exist done
检查导入数量:
ipset list vn_ipv4 | grep "Number of entries"
测试某个越南公网 IP:
ipset test vn_ipv4 14.227.57.251
十三、限制 aaPanel 端口仅允许越南 IPv4 访问
自动读取 aaPanel 端口:
PORT=$(tr -dc '0-9' < /www/server/panel/data/port.pl) echo "aaPanel 端口:$PORT"
创建专用规则链:
iptables -N AAPANEL_ONLY_VN 2>/dev/null || true
iptables -F AAPANEL_ONLY_VN
允许本机和越南 IPv4 访问:
iptables -A AAPANEL_ONLY_VN -i lo -j ACCEPT
iptables -A AAPANEL_ONLY_VN -m set --match-set vn_ipv4 src -j ACCEPT
iptables -A AAPANEL_ONLY_VN -j DROP
将 aaPanel 端口交给该规则链处理:
while iptables -C INPUT -p tcp --dport "$PORT" -j AAPANEL_ONLY_VN 2>/dev/null; do
iptables -D INPUT -p tcp --dport "$PORT" -j AAPANEL_ONLY_VN
done
iptables -I INPUT 1 -p tcp --dport "$PORT" -j AAPANEL_ONLY_VN
禁止通过 IPv6 访问 aaPanel:
while ip6tables -C INPUT -p tcp --dport "$PORT" -j DROP 2>/dev/null; do
ip6tables -D INPUT -p tcp --dport "$PORT" -j DROP
done
ip6tables -I INPUT 1 -p tcp --dport "$PORT" -j DROP
注意: 如果当前电脑的公网出口 IP 不属于越南,规则生效后将无法打开 aaPanel,
但 SSH 端口不会受到这条规则影响。
十四、保存防火墙规则
保存 ipset、IPv4 和 IPv6 规则:
mkdir -p /etc/iptables
ipset save > /etc/iptables/ipsets
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
创建 ipset 开机恢复服务:
cat > /etc/systemd/system/ipset-restore.service <<'UNIT' [Unit] Description=Restore IP sets before firewall rules DefaultDependencies=no Before=netfilter-persistent.service After=local-fs.target [Service] Type=oneshot ExecStart=/bin/sh -c '/sbin/ipset restore -exist < /etc/iptables/ipsets' RemainAfterExit=yes [Install] WantedBy=multi-user.target UNIT
启用服务:
systemctl daemon-reload
systemctl enable ipset-restore.service
systemctl enable netfilter-persistent.service
netfilter-persistent save
十五、检查 aaPanel 端口限制是否生效
查看 aaPanel 监听状态:
PORT=$(cat /www/server/panel/data/port.pl)
ss -lntp | grep ":${PORT}"
查看防火墙规则:
iptables -L AAPANEL_ONLY_VN -n -v --line-numbers
正常情况下可以看到类似规则:
ACCEPT all -- anywhere anywhere match-set vn_ipv4 src
DROP all -- anywhere anywhere
如果最后一条 DROP 的数据包计数不断增加,
表示有非越南公网 IP 正在访问 aaPanel,并且已经被拦截。
十六、删除 Lua 文件后仍然跳转怎么办
Lua 文件不存在但网站仍然跳转,常见原因包括:
- Nginx 旧 Worker 进程仍然保留已加载的 Lua 代码;
-
Nginx 配置中仍有
access_by_lua_file; -
网站配置中存在
rewrite; -
配置中存在
return 301或return 302; - PHP、JavaScript 或数据库中设置了跳转;
- Cloudflare、CDN 或负载均衡设置了重定向;
- 浏览器缓存了永久 301 跳转;
- Service Worker 仍然控制网站请求。
检查当前实际加载的跳转和 Lua 配置:
/www/server/nginx/sbin/nginx -T 2>&1 | awk '
$0 !~ /^[[:space:]]*#/ &&
$0 ~ /(_by_lua|fastcgi_waf|ngxd|ngxdl|rewrite|return[[:space:]]+30[1278])/
'
检查成功后完整重启 Nginx:
/www/server/nginx/sbin/nginx -t && /etc/init.d/nginx restart
十七、最终安全检查
检查可疑 Lua 文件:
find /www/server/nginx -type f \( \
-name "fastcgi_waf.lua" -o \
-name "waf.lua" -o \
-name "ngxd.lua" -o \
-name "ngxdl.lua" \
\) -ls 2>/dev/null
检查仍然生效的 Lua 执行配置:
/www/server/nginx/sbin/nginx -T 2>&1 | awk '
$0 !~ /^[[:space:]]*#/ &&
$0 ~ /(_by_lua_file|fastcgi_waf|ngxd|ngxdl|luawaf\.conf)/
'
检查 Nginx 配置:
/www/server/nginx/sbin/nginx -t
检查正常 Lua 标准库:
ls -ld \
/www/server/nginx/lib/lua/ngx \
/www/server/nginx/lib/lua/resty
ls -lah /www/server/nginx/lib/lua/resty/core.lua
十八、安全注意事项
- 执行防火墙配置时,始终保持当前 SSH 窗口不要关闭;
- 最好同时打开第二个 SSH 窗口进行测试;
- 修改 Nginx 配置前必须先备份;
-
不要删除
ngx和resty标准库; -
不要注释正常的
lua_package_path; - 不要直接删除整个 Lua 目录;
- 来源不明的 Lua 文件优先隔离,不要马上永久销毁;
- 面板端口限制后,非越南公网 IP 将无法访问;
- 公开过的 root 密码必须立即修改;
- 只允许管理员自己的固定 IP,通常比允许整个国家网段更安全。
总结
通过 Windows SSH、SCP、ipset 和 iptables,可以完成 aaPanel 服务器的批量安全加固, 包括检查并清理来源不明的 Lua 文件、关闭异常 Lua 执行配置、收紧 Nginx HTML 目录权限、 隐藏 Nginx 版本号,以及限制 aaPanel 管理端口仅允许指定地区的公网 IPv4 访问。
在清理 Lua 文件时,必须区分可疑脚本和正常运行库。 ngxd.lua、ngxdl.lua、fastcgi_waf.lua 等来源不明的文件需要重点检查,但 /www/server/nginx/lib/lua/ngx、 /www/server/nginx/lib/lua/resty 和正常的 lua_package_path 配置应当保留。