mongodb默认端口号是27017;旧版(≤3.2)还默认开启28017 http控制台,无认证、无tls,存在严重未授权访问风险,须禁用httpinterface/rest并配置bind_ip与authorization强化安全。

MongoDB 默认安装后,27017 端口裸奔 + 28017 HTTP 控制台默认开启,等于把数据库大门敞开——必须立刻禁用这两个入口,否则未授权访问风险极高。
确认是否还在监听 28017 HTTP 控制台
旧版 MongoDB(≤3.2)默认启用 httpinterface 和 rest,监听 28017(不是 27018,注意端口号差异)。这个接口无认证、无 TLS、无访问控制,curl 一下就能看到数据库结构甚至文档内容。
执行以下命令验证:
-
sudo ss -tlnp | grep ':28017'—— 若有输出,说明 HTTP 控制台仍在运行 -
curl -s http://localhost:28017/ | head -n 3—— 若返回 HTML 或 JSON 数据,而非Connection refused,即已暴露 - 检查配置文件中是否残留
http.enabled: true、rest: true或启动参数含--httpinterface/--rest
彻底禁用 HTTP/REST 接口的三步操作
禁用本身不难,但容易漏掉隐式启用点。MongoDB 4.0+ 已完全移除该功能,但旧配置若没清理,会误导判断。
- 编辑主配置文件(如
/etc/mongod.conf),在net段下确保没有http.enabled字段;若有,删掉或设为false - 检查 systemd 启动项:
sudo systemctl cat mongod,确认ExecStart行不含--httpinterface或--rest - 容器部署(Docker/K8s)需检查
args或command中是否硬编码了--rest;即使 MongoDB 版本 ≥4.2,也建议一并删除,避免配置污染
改完重启:sudo systemctl restart mongod,再跑一遍上面的 ss 和 curl 验证。
修改默认端口 27017 的实操要点
改端口不能只改一个地方,否则服务起不来或连不上。重点是配置文件中的 port 和客户端连接时的实际端口要一致。
- 在
/etc/mongod.conf的net段下修改:port: 27018(或其他非知名端口,避开 27017、28017、27019 等常见值) - 改完必须重启服务:
sudo systemctl restart mongod - 验证监听:
sudo ss -tlnp | grep ':27018'(替换为你设的端口) - 客户端连接时,显式指定新端口:
mongo --port 27018或连接字符串中写mongodb://localhost:27018 - 注意:仅改端口不解决未授权问题,它只是增加一层基础障碍;必须配合
bind_ip和认证一起用
最容易被忽略的两个加固动作
很多人禁了 HTTP、改了端口就以为安全了,其实最关键的两处常被跳过:
-
bind_ip必须设为内网 IP 或127.0.0.1,绝不能留空或写0.0.0.0—— 否则改端口也没用,照样被外网扫到 - 认证必须真生效:在
admin库中创建用户后,配置里打开security.authorization: enabled,且确认admin.system.users里已有至少一个用户;否则--auth参数形同虚设
这两步不做,前面所有操作都只是掩耳盗铃。











