API 速率限制

API 速率限制通常用于限制用户在一段时间内可以进行的 API 调用次数,从而帮助管理 API 流量速率。出于安全目的,速率限制功能通过限制失败的登录尝试,有可能防御拒绝服务 (DoS) 攻击,防止通过试错获得访问权限的重复登录尝试。

您可以选择配置 Security 插件以进行用户名速率限制、IP 地址速率限制或两者兼有。这些配置在 config.yml 文件中进行。有关每种速率限制配置类型的信息,请参阅以下部分。

用户名速率限制

用户名速率限制配置通过用户名限制登录尝试。当登录失败时,该用户名将被网络中的其他机器阻止使用。以下示例显示了为用户名速率限制配置的 config.yml 文件设置:

auth_failure_listeners:
  internal_authentication_backend_limiting:
    type: username
    authentication_backend: internal
    allowed_tries: 3
    time_window_seconds: 60
    block_expiry_seconds: 60
    max_blocked_clients: 100000
    max_tracked_clients: 100000

下表描述了此类配置的各个设置。

设置 描述
type 速率限制的类型。此处为 username
authentication_backend 内部后端。输入 internal
allowed_tries 登录尝试被阻止之前允许的登录尝试次数。请注意,增加此数值会增加堆内存使用。
time_window_seconds 强制执行 allowed_tries 值的时间窗口。例如,如果 allowed_tries3time_window_seconds60,用户名有 3 次尝试失败之后,将被锁定 60 秒,60秒之后才能再次尝试登录。
block_expiry_seconds 登录失败后登录尝试保持被阻止的时间窗口。此时间过后,登录重置,用户名可以再次尝试登录。
max_blocked_clients 被阻止用户名的最大数量。这限制了堆内存使用,以避免潜在的 DoS 攻击。
max_tracked_clients 具有失败登录尝试的被跟踪用户名的最大数量。这限制了堆内存使用,以避免潜在的 DoS 攻击。

IP 地址速率限制

IP 地址速率限制配置通过 IP 地址限制登录尝试。当登录失败时,用于登录的特定机器的 IP 地址将被阻止。

配置 IP 地址速率限制涉及两个步骤。首先,在 config.yml 文件的 http_authenticator 部分将 challenge 设置为 false

http_authenticator:
  type: basic
  challenge: false

其次,配置 IP 地址速率限制设置。以下示例显示了一个完整的配置:

auth_failure_listeners:
  ip_rate_limiting:
    type: ip
    allowed_tries: 1
    time_window_seconds: 20
    block_expiry_seconds: 180
    max_blocked_clients: 100000
    max_tracked_clients: 100000

下表描述了此类配置的各个设置。

设置 描述
type 速率限制的类型。此处为 ip
allowed_tries 登录尝试被阻止之前允许的登录尝试次数。请注意,增加此数值会增加堆内存使用。
time_window_seconds 强制执行 allowed_tries 值的时间窗口。例如,如果 allowed_tries3time_window_seconds60,IP地址在 3 次尝试失败之后,将被锁定 60 秒,60秒之后才能再次尝试。
block_expiry_seconds 登录失败后登录尝试保持被阻止的时间窗口。此时间过后,登录重置,IP 地址可以再次尝试登录。
max_blocked_clients 被阻止 IP 地址的最大数量。这限制了堆内存使用,以避免潜在的 DoS 攻击。
max_tracked_clients 具有失败登录尝试的被跟踪 IP 地址的最大数量。这限制了堆内存使用,以避免潜在的 DoS 攻击。
ignore_hosts 速率限制要忽略的 IP 地址或主机名模式列表。config.dynamic.hosts_resolver_mode 必须设置为 ip-hostname 以支持主机名匹配。