27017 是什么
27017 是 MongoDB 的默认端口,mongod 与 mongos 都监听它,客户端通过 MongoDB 的二进制协议读写数据。自 3.6 版本起 mongod 默认只绑定 127.0.0.1,这是安全默认值;为远程访问把它改成全网卡时,就等于把这个端口直接摆到网络上。
勒索事件为什么集中在这里
2020 年前后的大规模 MongoDB 勒索事件,正是「绑定所有地址 + 未开启认证 + 无可用备份」这套组合造成的:扫描器几分钟内就能定位实例,批量删库并留下勒索说明。即便现在,暴露在公网的 27017 依然是高价值目标,因为它通常连着完整的业务数据。
基本信息
| 服务 | MongoDB(mongod / mongos) |
|---|---|
| 协议 | TCP,MongoDB Wire Protocol |
| 默认绑定 | 3.6 起为 127.0.0.1 |
| 认证 | 需在配置中显式开启 |
| 安全等级 | 严禁公网,认证与限网段与备份缺一不可 |
典型使用场景
- 业务应用通过连接串写入与查询数据
- 副本集与分片集群的节点之间做数据同步
- 排查客户端连不上时确认绑定地址与认证库设置
- 安全核查时确认是否存在绑定全网卡且未开认证的实例
- 迁移或升级前跑一次完整备份并验证可恢复性
监听与认证核对
监听与认证核对
ss -lntp | grep 27017 # 看绑定地址是回环还是全网卡
mongosh --host 127.0.0.1 --port 27017 -u admin -p --authenticationDatabase admin --eval 'db.runCommand({ping:1})'备份与最小权限用户
备份与最小权限用户
mongodump --uri 'mongodb://backup:<口令>@127.0.0.1:27017/?authSource=admin' --out /backup/$(date +%F)
mongosh --eval 'db.getSiblingDB("admin").createUser({user:"app",pwd:"<口令>",roles:[{role:"readWrite",db:"app"}]})'加固项对照
| 配置项 | 建议值 | 作用 |
|---|---|---|
| net.bindIp | 127.0.0.1 或指定内网地址 | 收敛监听范围 |
| security.authorization | enabled | 开启认证与鉴权 |
| net.tls.mode | requireTLS(跨网段时) | 链路加密 |
| 备份 | 定期 mongodump 或企业方案 | 保证可恢复性 |
连接字符串务必带上 authSource:认证库与业务库不一致时会直接报未授权;4.x 起命令行工具换成 mongosh,旧脚本里的 mongo 需要相应替换。
把端口改成非默认值不构成防护,全端口扫描同样能识别服务特征;真正的边界是绑定地址、认证与网络策略三项一起做。
副本集场景要额外注意:节点间通信同样依赖 27017,限制来源时应把集群内网段整体放行而不是逐个地址维护;扩容新节点后及时同步策略,否则会出现选举失败、写入被拒等看起来与网络无关的症状。