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_tries 为 3 且 time_window_seconds 为 60,用户名有 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_tries 为 3 且 time_window_seconds 为 60,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 以支持主机名匹配。 |