【问题标题】:WSO2 Custom Throttle Policy For Each End-User IP Address In X-Forwarded-ForX-Forwarded-For 中每个最终用户 IP 地址的 WSO2 自定义限制策略
【发布时间】:2021-02-25 08:05:54
【问题描述】:

我使用 WSO2 API Managementt 2.6.0 作为我的 Spring Boot REST API 前面的 API 网关。

我想添加一个自定义限制策略来设置每个最终用户 ip 地址的速率限制,该地址由面向互联网的 WAF 放入请求标头 X-Forwarded-For

WSO2 文档显示了一些用 Siddhi 语言编写的自定义策略示例,但没有足够的示例。

我能找到的最详细的文章是https://dzone.com/articles/implement-user-based-throttling-with-wso2-api-mana,它展示了一个userId限制速率的例子。

FROM RequestStream
SELECT userId, userId as throttleKey
INSERT INTO EligibilityStream;
​
FROM EligibilityStream#throttler:timeBatch(1 min)
SELECT throttleKey, (count(userId) >= 5) as isThrottled, expiryTimeStamp group by throttleKey
INSERT ALL EVENTS into ResultStream;

上述 Siddhi 查询告诉 WSO2 从请求中提取userId 并将其用作throttleKey 并限制每个throttleKey 每1 分钟少于5 个事务。

我想知道如何修改此 Siddhi 查询以使用请求标头中的 IP 地址 X-Forwarded-For 而不是 userId

【问题讨论】:

    标签: wso2 throttling api-gateway rate-limiting


    【解决方案1】:

    如果您想为特定标头或特定 IP 创建限制策略,您可以使用高级限制策略配置 (https://docs.wso2.com/display/AM260/Adding+New+Throttling+Policies)。

    【讨论】:

    • 谢谢,但高级策略只允许我对 ip 的特定值进行速率限制。在这种情况下,我希望将速率限制应用于每个传入用户 ip
    • 我的意思是在你的情况下添加标题条件还不够?
    • 标头条件还要求我输入标头名称和参数值。但我不想限制特定的参数值,而是希望对每个传入的参数值动态应用速率限制
    • 您可以使用像 (.*?) 这样的正则表达式来匹配所有参数。为此,您需要在 /repository/conf/api-manager.xml 中启用 <EnableHeaderConditions>true</EnableHeaderConditions>
    • 让我们用一个例子来讨论这个问题。如果我使用标头条件(例如 Header Name: X-Forwarded-For, Param Value: .*?)设置每分钟 1000 个请求的规则,则意味着该规则将 共享 标头为 X-Forwared-For=<anything> 的任何请求,这意味着如果我有不同的2000 个用户同时使用我的应用程序,其中一半会收到配额超出错误,对吗?相反,我希望可以阻止每个用户的规则,以防他/她是黑客并以每分钟 1000 多个请求攻击我的 API,而其他人仍然可以使用该应用程序。
    猜你喜欢
    • 2016-05-22
    • 2020-07-06
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多