首页 > ODOO > 正文

Odoo 服务器中了挖矿木马怎么清

fenij 2026-08-26 38 ODOO

如果你的 Odoo 服务器风扇突然狂转、top 里出现 .odoo_pg_health 之类可疑进程,别急着加 CPU。2024 年中以来,针对暴露 PostgreSQL 端口的 Odoo/VPS 主机出现了一股挖矿木马活动,进程名伪装成 Odoo 或 PostgreSQL 组件,靠 COPY ... FROM PROGRAM 拿到 shell 权限。本文按真实排障流程给一份清理与加固清单。

典型症状:业务没涨,CPU 先满了

挖矿木马不会直接破坏数据,但它会把机器榨干,导致 Odoo 页面卡顿、长轮询超时。常见信号:

  • top / htop 显示整体负载长期高于 CPU 核数,业务 QPS 却没明显变化。
  • 出现以 . 开头的隐藏进程,例如 .odoo_pg_health.odoo_worker_monitor.bg_payload
  • PostgreSQL 日志里能看到 COPY public.xxx FROM PROGRAM 'curl ... | bash' 这类语句。
  • 外联流量异常,ss -tnp 中出现矿池常见端口 3333、4444、5555、7777。
  • /var/log/syslogdmesg 里进程被 OOM killer 反复干掉又重新启动。

排查四步:先隔离,再定位

1. 立即隔离外联。发现可疑连接后,先用 iptables 或云安全组临时封掉该 IP 与端口,避免木马继续下载 payload:

iptables -A OUTPUT -d 45.9.x.x -j DROP
# 或用 ufw
ufw deny out to 45.9.x.x

2. 查进程与启动路径。隐藏进程名的父进程可能是 postgres 或 systemd,找到真实二进制:

ps auxf | grep -E '\.odoo|\.bg_|xmr|minerd|pool'
ls -la /proc/<PID>/exe
ls -la /tmp/.* /var/tmp/.* /dev/shm/.*

3. 查持久化入口。只杀进程会复活,必须把定时任务、systemd timer、启动项全看一遍:

crontab -l
cat /etc/crontab
ls /etc/cron.d /etc/cron.hourly /etc/cron.daily
systemctl list-timers --all
find /etc/systemd -type f -newer /etc/hostname

4. 查 PostgreSQL 权限。很多入侵是因为 Odoo 数据库用户被赋予了 superuser,或 5432 端口直接暴露:

\du                    # 列出角色
SELECT * FROM pg_stat_activity WHERE query ILIKE '%COPY%FROM%PROGRAM%';
📊 正常服务器 vs 中招服务器
指标 正常 可疑
CPU 空闲 通常 >50% 持续 <10%
隐藏进程 无 .xxx 进程 .odoo_pg_health 等
外联端口 443/22/8069 3333/4444/7777
PostgreSQL 仅监听 localhost 5432 暴露公网

踩坑实录:以为加 CPU 能好,结果是矿池在挖矿

有一台 4 核 Odoo 16 测试机,客户反馈页面加载慢。我先用 htop 看负载飙到 8,以为是 workers 不够,顺手把 odoo.confworkers 从 4 改成 8。结果负载更高,风扇直接起飞。最后 ss -tnp 发现十几个连接到 45.9.x.x:3333,进程名是 .odoo_pg_health,PID 目录在 /tmp/.x/ 下。用 ls -la /proc/XXXX/exe 才定位到真实二进制 /tmp/.x/.bg_payload。杀了进程,十分钟后又复活——因为 postgres 用户的 crontab 里藏了一条 */10 * * * * curl ... | bash。只杀进程不清入口,等于白忙。

清理与加固:别信“清干净”,建议重建

挖矿木马拿到 root 或 postgres 权限后,完全可信的清理非常难。生产环境建议:

  1. 快照当前机器用于事后取证,但不要继续用它对外服务。
  2. 找一份确认在入侵时间之前的备份,重建干净 VPS;恢复数据库和 filestore 后,先改所有密码。
  3. PostgreSQL 只监听 127.0.0.1pg_hba.conf 拒绝除 Odoo 外的连接。
  4. Odoo 数据库用户不要给 superuser,删除可疑角色。
  5. UFW/安全组只开 22、80、443,8069/8072 只接受 Nginx 反向代理。
  6. SSH 改成密钥登录,关闭密码认证,fail2ban 拦截暴力破解。
🔒
5432 不暴露公网
🔑
SSH 仅密钥登录
🛡️
Odoo DB 用户非 superuser

常见问题

Q:能不能只清木马不重装系统?
A:理论上可以,但 rootkit 可能藏在内核模块或替换的系统命令里。生产环境建议重建,避免二次中毒。

Q:怎么判断备份是干净的?
A:看备份时间是否早于首次发现异常连接的时间;恢复后先执行 crontab -lsystemctl list-timersss -tnp,确认没有矿池连接。

Q:云安全组已经关了 5432,为什么还会中招?
A:部分 VPS 默认开启 UFW 放行全部,或安全组规则被后期修改。建议 ufw status numbered 和云控制台双重核对。

你在 Odoo 或 VPS 安全上踩过什么坑?欢迎在 fenij.com 评论区留言,一起把这份清单补得更完整。

相关完整手册

系统化的排查与配置思路,建议顺手收藏这几篇完整手册: