把 Odoo 直接裸跑在 8069 端口、master 密码还是 admin、数据库列表谁都能看——这是 2026 年最常见的 Odoo 入侵入口。下面这份清单,按「关暴露面 → 锁数据库 → 上防火墙」的顺序,把生产 Odoo 该堵的洞一次堵上,照着做半小时能搞定。
第一步:藏好数据库管理器
默认 Odoo 会在 /web/database/manager 暴露建库、删库界面,且 list_db=True 时还能列出所有库名。生产环境必须关掉,否则别人扫到你域名就能看到库清单。
# /etc/odoo.conf
list_db = False
# 或用启动参数 --no-database-list
第二步:锁死 PostgreSQL
PostgreSQL 默认监听所有网卡是巨大风险,而且 Odoo 的数据库用户不应是超级用户。把监听收回到本地,再用一个强密码的非特权账号。
# postgresql.conf
listen_addresses = 'localhost'
# 进入 psql 后执行
ALTER USER odoo WITH PASSWORD '换成一段强密码';
# 建议把 db_user 设为非超级用户,库归属另一个用户
第三步:防火墙只留必要口
8069 绝不能直接对公网开放,只让 Nginx 反代 443 对外,SSH 强制用密钥。8069 这个端口只在内网流通。
sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
# 确认 8069 不在放行列表里
踩坑实录
去年帮一家客户巡检,发现他们的 Odoo 主密码还是安装时的 admin,且 list_db=True,外网一访问 /web/database/manager 就把库名全列出来了。更离谱的是 PostgreSQL 监听 0.0.0.0,而且 Odoo 用的是 postgres 超级用户。我先把 list_db 设 False、master 密码改成 24 位随机串,再改 pg_hba 只放行本地,最后 ufw 只开 443 和 SSH。改完当晚,fail2ban 日志里十几条爆库尝试全部落空。教训:暴露面越小,被扫到的概率越低。
加固清单速查
| 加固项 | 做法 | 作用 |
|---|---|---|
| 关数据库列表 | list_db = False | 隐藏库名,防爆库 |
| 强主密码 | 24 位随机串 | 防管理页被接管 |
| PG 收本地 | listen localhost | 防数据库被远程连 |
| 防火墙 | 只开 443 / SSH | 缩暴露面 |
| 上 fail2ban | 限制登录失败 | 防暴力破解 |
常见问题
关了 list_db 后自己还能建库吗?
能。只是匿名访问者看不到建库界面,管理员用 –db-filter 配好单一库后,日常维护不受影响。
Nginx 反代还要配什么?
记得开 proxy 超时和长连接,并上 Certbot 的免费 SSL,让 8069 全程走内网、443 对外加密。
如果你正在上 Odoo 生产环境,欢迎到 fenij.com 留言说说你担心的安全点,我可以再写一期「Odoo + Nginx + SSL」的完整部署文。