aaPanel 是常用的 Linux 服务器管理面板,可以通过网页管理网站、数据库、Nginx、PHP 和服务器文件。 由于面板拥有较高的服务器权限,如果管理端口长期暴露在公网,或者 Nginx 配置中出现来源不明的 Lua 文件, 服务器可能面临账号暴力破解、恶意跳转、配置篡改和文件被植入等安全风险。

image

本文介绍如何在 Windows 系统中使用 SSH 和 SCP 管理 Debian、Ubuntu 服务器, 检查并隔离 aaPanel Nginx 中的可疑 Lua 文件,隐藏 Nginx 版本号, 并使用 ipset 与 iptables 将 aaPanel 管理端口限制为仅允许越南 IPv4 网段访问。

重要提醒: 不要直接删除 /www/server/nginx/lib/lua 整个目录,也不要删除其中的 ngxresty 目录,否则可能导致 Nginx 无法启动。

一、需要完成的安全加固项目

本次 aaPanel 安全加固主要包括以下内容:

  1. 从 Windows 登录 Linux 服务器;
  2. 检查 Nginx 配置中是否存在可疑 Lua 调用;
  3. 删除或隔离来源不明的 Lua 文件;
  4. 保留 Nginx 正常运行所需的 Lua 标准库;
  5. 设置 server_tokens off; 隐藏 Nginx 版本号;
  6. 上传越南 IPv4 CIDR 网段文件;
  7. 自动读取 aaPanel 当前管理端口;
  8. 限制 aaPanel 端口仅允许越南 IPv4 访问;
  9. 禁止通过 IPv6 绕过面板访问限制;
  10. 保存 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.luangxdl.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 301return 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 配置前必须先备份;
  • 不要删除 ngxresty 标准库;
  • 不要注释正常的 lua_package_path
  • 不要直接删除整个 Lua 目录;
  • 来源不明的 Lua 文件优先隔离,不要马上永久销毁;
  • 面板端口限制后,非越南公网 IP 将无法访问;
  • 公开过的 root 密码必须立即修改;
  • 只允许管理员自己的固定 IP,通常比允许整个国家网段更安全。

总结

通过 Windows SSH、SCP、ipset 和 iptables,可以完成 aaPanel 服务器的批量安全加固, 包括检查并清理来源不明的 Lua 文件、关闭异常 Lua 执行配置、收紧 Nginx HTML 目录权限、 隐藏 Nginx 版本号,以及限制 aaPanel 管理端口仅允许指定地区的公网 IPv4 访问。

在清理 Lua 文件时,必须区分可疑脚本和正常运行库。 ngxd.luangxdl.luafastcgi_waf.lua 等来源不明的文件需要重点检查,但 /www/server/nginx/lib/lua/ngx/www/server/nginx/lib/lua/resty 和正常的 lua_package_path 配置应当保留。