F5基于源IP和URL组合拦截请求配置
2023-10-24 16:13:12
Will Tang
配置方法
F5可以通过iRule实现针对源IP和目的URL的黑名单阻断,也即一个源IP加入黑名单后,可以选择只禁止访问特定URL,也可以禁止所有访问。所用iRule如下:
when HTTP_REQUEST {
if { [class match [IP::client_addr] equals block_ip] } {
set block_uri [class match -value [IP::client_addr] equals block_ip]
if { [class exists $block_uri] } {
if { [class match [HTTP::uri] starts_with $block_uri] } {
reject
log local0. "Client from IP [IP::client_addr] visit [HTTP::uri] has been blocked."
}
} else {
reject
log local0. "Client from IP [IP::client_addr] has been blocked for all url."
}
}
}
要使用这个iRule,首先我们需要创建一个名为block_ip的data-group,类型为ip,在这里管理源ip黑名单,如果一个源ip要做特定URL阻断,则给这个ip同时赋予一个value,value是另外一个data-group的名字,而这个data-group里面管理的即是要阻断的URL,类型为string。如果block_ip中的ip地址没有value,则为禁止所有访问。
测试一下,我们首先创建block_ip的data-grouphe和iRule,加上必要的vs和pool并关联iRule,首先我们不在block_ip添加任何ip,访问一下vs,能正常访问
访问/lorax.php这个页面也正常
然后我们在block_ip这个data-group中添加一个源地址,value留空
再次访问,发现被拦截
日志里也有相应记录
然后我们修改一下block_ip中这个地址,给它加上一个值,叫做block_uri1
然后创建block_uri1这个data-group,类型为string,添加一个string “/lorax”
再次访问vs首页,发现可以访问
然后访问/lorax.php发现被拦截
日志也有相应记录
REST API操作
我们可以通过F5 REST API来维护IP和URL列表,这样方便我们做自动化拦截以及和第三方联动。
对于iRule和block_ip这个data-group,我们会预先创建,只需要通过API维护block_ip里面的地址列表即可。REST API对data-group的Records做的是全量更新,也就是我们要维护这个列表的最终状态。
首先我们可以通过GET方法读取当前的列表内容
Endpoint是/mgmt/tm/ltm/data-group/internal/block_ip
用PATCH方法可以更新records,记住是全量更新,例如要新增如下两个ip,需要把之前的records也带上
登录设备查看发现data-group已被更新
这里我们给10.1.10.2这个IP设置了一个新的URL列表,叫做block_uri2,我们需要创建这个data-group
Endpoint是/mgmt/tm/ltm/data-group/internal/
方法用POST,Payload如下
{
"name": "block_uri2",
"type": "string",
"records": [
{
"name": "/uri21",
"data": ""
},
{
"name": "/uri222",
"data": ""
}
]
}
登录设备可以看到data-group已经被创建
URL列表的更新方法和IP列表一样,这里不再赘述,请一定记住是全量更新!
发布评论 加入社群
相关文章

AWAF v17.1 Bot Defense限速REST API配置手册
Will Tang
2023-10-24 16:36:54 150

AWAF v17.1 Data Guard REST API配置手册
Will Tang
2023-10-24 16:24:54 111

使用AWAF进行Header防护
Will Tang
2023-03-22 22:33:57 403

回复评论
发布评论