防暴力破解与登录超时配置

更新时间:
复制 MD 格式

数据库实例面向外部客户端提供访问时,可能遭受密码暴力破解攻击,空闲连接也会持续占用连接资源。云数据库 MongoDB 版提供“防暴力破解”与“登录超时(空闲连接超时)”两个安全防护能力:前者锁定认证失败次数过多的来源 IP,后者自动断开空闲的外部客户端连接。本文介绍这两个功能的适用范围、参数说明,以及开启、关闭和查看运行状态的方法。

功能机制

防暴力破解

服务端按客户端来源 IP 统计认证失败次数。同一来源 IP 在统计窗口内的认证失败次数达到阈值后,系统将该 IP 锁定一段时间。锁定期间,该 IP 发起的认证请求会被拒绝;锁定期结束后,系统自动解除锁定。来源 IP 被锁定时,服务端返回与密码错误一致的认证失败提示,攻击者无法通过返回信息判断账号是否被锁定。

登录超时(空闲连接超时)

启用后,服务端会周期性检查外部客户端连接,并主动断开空闲时长超过阈值的连接,以回收连接资源。集群内部连接不受影响,包括副本集节点之间的连接,以及分片集群中 mongos 与 mongod 之间的连接。

适用范围与配置要点

  • 两个功能默认均处于关闭状态,需要显式启用。

  • 适用地域:全部地域。

  • 适用内核版本:MongoDB 4.0、4.4、5.0、6.0、7.0、8.0 和 8.3。具体支持情况以实例内核小版本为准。

  • 下述参数均为 setParameter 参数,支持在实例启动时配置,也支持在运行时动态调整,修改后无需重启实例。

  • 对于分片集群实例,参数分别对 mongos 和 mongod 节点生效。控制台参数设置功能开放中;该功能可用后,建议通过控制台统一修改。

参数说明

防暴力破解参数

参数

默认值

说明

authBruteForceProtectionEnabled

false

是否启用防暴力破解。

authBruteForceMaxFailedAttempts

5

统计窗口内允许的最大认证失败次数。达到阈值后,来源 IP 将被锁定。最小值为 1。

authBruteForceWindowSeconds

300

认证失败次数统计窗口的长度。单位:秒。

authBruteForceLockoutSeconds

300

来源 IP 达到阈值后的锁定时长。单位:秒。到期后自动解锁。

authBruteForceMaxTrackedIPs

10000

同时跟踪的来源 IP 数量上限。超出上限后,系统按最近使用顺序淘汰记录。

authBruteForceExemptCIDRs

空字符串

白名单。取值为以英文逗号(,)分隔的 CIDR 网段列表,也支持 UNIX socket 路径。命中的来源不参与统计和锁定。

authBruteForceExemptLocalhost

true

是否豁免本机回环地址(127.0.0.0/8)。

空闲连接超时参数

参数

默认值

说明

enableIdleConnectionTimeout

false

是否启用空闲连接超时。启用后,服务端周期性检查外部客户端连接,并断开空闲时长超过阈值的连接。运行时关闭此参数即可停止清理,无需重启实例。

idleConnectionTimeoutSeconds

0

外部客户端连接允许的最大空闲时长。单位:秒。取值为 0 时,沿用 localLogicalSessionTimeoutMinutes(默认 30 分钟)作为阈值。

idleConnectionReaperPeriodMillis

0

空闲连接检查周期。单位:毫秒。取值为 0 时,沿用 logicalSessionRefreshMillis。

前提条件

  • 已通过 mongosh 连接目标实例。

  • 开启空闲连接超时前,确保业务客户端具备自动重连能力:连接因空闲超时被断开后,客户端需要重新建立连接。

开启功能

通过 mongosh 执行 setParameter 命令,开启对应功能。

开启防暴力破解

以下示例启用防暴力破解,并将无需参与防护的网段加入白名单。

db.adminCommand({
  setParameter: 1,
  authBruteForceProtectionEnabled: true,
  authBruteForceExemptCIDRs: "10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
})
说明

未特殊调整阈值时,建议沿用默认值:同一来源 IP 在 5 分钟内认证失败 5 次后锁定 5 分钟。

开启后,可按查看防暴力破解运行指标中的方法查看锁定状态等指标。

开启空闲连接超时

以下示例启用空闲连接超时。空闲时长超过 600 秒的外部客户端连接将被断开。

db.adminCommand({
  setParameter: 1,
  enableIdleConnectionTimeout: true,
  idleConnectionTimeoutSeconds: 600
})

查看防暴力破解运行指标

启用防暴力破解后,可通过 db.serverStatus() 查看以下指标。

指标

说明

trackedIPs

当前正在跟踪的来源 IP 数量。

blockedIPs

当前处于锁定状态的 IP 数量。

lockoutEvents

累计触发锁定的次数。

rejectedAuthAttempts

累计因锁定而被拒绝的认证尝试次数。

rejectedConnections

累计因来源 IP 处于锁定状态而被拒绝的连接数。

来源 IP 被锁定时,运行日志中会输出以下 WARNING 日志,组件为 ACCESS,日志 ID 为 88101。

{"msg":"Locking out source address after too many failed authentication attempts","attr":{"sourceAddress":"10.0.0.1","failedAttempts":5,"lockoutSeconds":300}}

关闭功能

执行以下命令关闭对应功能。

关闭防暴力破解

db.adminCommand({ setParameter: 1, authBruteForceProtectionEnabled: false })

关闭空闲连接超时

db.adminCommand({ setParameter: 1, enableIdleConnectionTimeout: false })