F5 数据包过滤还是 iRules 还是两者兼而有之?

F5 数据包过滤还是 iRules 还是两者兼而有之?

我需要为需要检查 IP 地址和 URL 的虚拟主机设置自定义过滤器。如下所示:

_if_  _(_ http-request matches url _and_ ip is from certain host/net range _)_  
      _or_ ip is     from a certain VIP range _then_ let the request through  

我想知道我是否应该尝试将 IP 检查移至数据包过滤器,然后进行两次 IP 检查(以绕过 VIP 范围的 URL 检查)或者是否可以将其留在 irule 性能范围内?

答案1

这在 iRule 中是非常常见的事情,除非您的 BIG-IP 负载严重,否则不会有问题。

如果你担心,你可以打开 iRule 计时来查看规则使用了多少个 CPU 周期。DevCentral 有一个老旧但好用的关于如何做到这一点的文章。唯一过时的部分是在 v11 上,您需要 tmsh 而不是 bigpipe(例如“show /ltm rule”)。

如果您确实想避免使用 iRules,另一种方法是 HTTP 类(本地流量 > 配置文件 > 协议 > HTTP 类),但这是通过 URI 而不是源 IP 进行分类的。它使您能够将匹配的 URI 发送到不同的池或返回重定向。您可以将其与 v11.3 中虚拟服务器上的新源属性相结合,以创建多个仅处理流量的虚拟服务器特定网络。

但是如果您要覆盖许多源范围,我只会使用 iRule 和地址类型数据组(使用“match class ..equals”命令在数据组中搜索客户端 IP,有点像使用路由表一样)。

数据包过滤器非常残酷,会导致客户端超时,而 HTTP 类或 iRule 选项可让您选择是否丢弃请求、选择其他池、返回重定向或返回错误页面。

答案2

我会在一个 iRule 中完成所有操作。

以下是每个虚拟服务器执行第 4 层 ACL 的示例:

https://devcentral.f5.com/wiki/iRules.AccessControlBasedOnNetworkOrHost.ashx

您可以根据 CLIENT_ACCEPTED 中的数据组检查客户端 IP,然后使用 [HTTP::uri] 检查 HTTP_REQUEST 中的 URI。

以下是使用 class 命令的示例:

https://devcentral.f5.com/wiki/iRules.class.ashx

when CLIENT_ACCEPTED {
    # Check if the client IP is in the allowed_hosts_dg data group
    if {[class match [IP::client_addr] equals allowed_hosts_dg]}{
        set allowed_ip 1
    } else {
        set allowed_ip 0
    }
}
when HTTP_REQUEST {
    # If the client is a legal source IP check if the HTTP path is in the allowed_paths_dg data group
    if {$allowed_ip == 1 && [class search allowed_paths_dg contain [string tolower [HTTP::path]]]}{
        # allow the request
    } else {
        # Send a 403 blocking response
        HTTP::respond 403 content {Illegal request!}
    }
}

亚伦

相关内容