API 限速
API 限流通常用于限制用户在特定时间内可以发出的 API 调用次数,从而帮助管理 API 流量速率。出于安全目的,限流功能通过限制失败的登录尝试,可以防御拒绝服务(DoS)攻击或旨在通过试错获取访问权限的重复登录尝试。
您可以选择为安全插件配置用户名限流、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
下表描述了此类配置的各项设置。
设置 | 描述 |
---|---|
类型 | 限流类型。在本例中为 username 。 |
身份验证后端 | 内部后端。输入 internal 。 |
允许尝试次数 | 在登录尝试被阻止之前允许的登录尝试次数。请注意,增加此数字会增加堆内存使用量。 |
时间窗口秒数 | 执行 allowed_tries 值的时间窗口。例如,如果 allowed_tries 为 3 且 time_window_seconds 为 60 ,则用户名为 60 秒内成功登录有 3 次尝试机会,之后登录尝试将被阻止。 |
阻止过期秒数 | 登录失败后登录尝试保持被阻止的时间窗口。此时间过后,登录将被重置,用户名可以再次尝试登录。 |
最大阻止客户端数 | 最大阻止用户名数量。这限制了堆内存使用量,以避免潜在的 DoS 攻击。 |
最大跟踪客户端数 | 最大跟踪失败登录尝试的用户名数量。这限制了堆内存使用量,以避免潜在的 DoS 攻击。 |
IP 地址限流
IP 地址限流配置根据 IP 地址限制登录尝试。当登录失败时,用于登录的机器的特定 IP 地址将被阻止。
配置 IP 地址限流涉及两个步骤。首先,在 config.yml
文件的 http_authenticator
部分中将 challenge
设置为 false
。
http_authenticator:
type: basic
challenge: false
有关此设置的更多信息,请参阅HTTP 基本身份验证。
其次,配置 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
下表描述了此类配置的各项设置。
设置 | 描述 |
---|---|
类型 | 限流类型。在本例中为 ip 。 |
允许尝试次数 | 在登录尝试被阻止之前允许的登录尝试次数。请注意,增加此数字会增加堆内存使用量。 |
时间窗口秒数 | 执行 allowed_tries 值的时间窗口。例如,如果 allowed_tries 为 3 且 time_window_seconds 为 60 ,则 IP 地址在 60 秒内有 3 次尝试成功登录的机会,之后登录尝试将被阻止。 |
阻止过期秒数 | 登录失败后登录尝试保持被阻止的时间窗口。此时间过后,登录将被重置,IP 地址可以再次尝试登录。 |
最大阻止客户端数 | 最大阻止 IP 地址数量。这限制了堆内存使用量,以避免潜在的 DoS 攻击。 |
最大跟踪客户端数 | 最大跟踪失败登录尝试的 IP 地址数量。这限制了堆内存使用量,以避免潜在的 DoS 攻击。 |
忽略主机 | 用于限流的要忽略的 IP 地址列表、CIDR 范围或主机名模式。config.dynamic.hosts_resolver_mode 必须设置为 ip-hostname 才能支持主机名匹配。 |