For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

talsa's avatar
talsa
Icon for Nimbostratus rankNimbostratus
Dec 20, 2022
Solved

BIG IP F5 IRule with data group to check if date has passed

Hello,

I have a datagroup of kind string/external file, which has hosts on the first field, and dates with format YYYY-MM-DD on the second field. I want to create an irule that will do something when the date on the same row of the host has passed, or do something else if it doesn't.

Example:

"www.google.com" := "2020-04-16"

In this case I want to do something, and if the date was 2024-11-25 I would want to do something else.

Right now, it's not working for me, as I've tried with my Irule for a number of times. I am not even getting anything in the log.

My irule:

when HTTP_REQUEST priority 100 { if { not (
( [IP::addr [IP::client_addr] equals 1.1.0.0%2/15]) or
( [IP::addr [IP::client_addr] equals 2.2.4.0%2/24]) or
( [IP::addr [IP::client_addr] equals 3.3.23.0%2/24]) or
( [IP::addr [IP::client_addr] equals 4.4.41.0%2/24]) or
( [IP::addr [IP::client_addr] equals 5.5.66.0%2/24]) or
( [IP::addr [IP::client_addr] equals 6.6.236.65%2/24]) or
( [IP::addr [IP::client_addr] equals 7.7.151.0%2/24]) or
( [IP::addr [IP::client_addr] equals 8.8.6.0%2/23]) or
( [IP::addr [IP::client_addr] equals 9.9.8.0%2/21]) or
( [HTTP::host] ends_with "co.il") or
( [HTTP::host] ends_with "sites.example.com")
) } {

if { [string tolower [class match -name "[HTTP::host]" equals /Common/webrules_tal]] ne "" } {
set expire_date [clock scan { class match -value equals /Common/webrules_tal }]
log local0. "Got host address: [HTTP::host]"
if { [clock seconds] < [clock scan { "$expire_date" }] } {
HTTP::redirect "https://www.youtube.com"
}
}

}

}

How can I do something like this in my Irule?

Note: The IP address restriction above is to restrict by IP, these IP addresses are not mine, they're there just for this post.

Thank you!

Tal Sabadia

  • So, this code will return the value of the date you've mapped to every host

     

    when HTTP_REQUEST {
     set host [string tolower [HTTP::host]] 
     set now [clock seconds] ; log local0. "now is $now"
     set expire_date "1991-01-01"
     if { [class match $host eq test-string] }{ set expire_date [class match -value "$host" equals test-string] } else { log local0. "$host does not have a value in datagroup"}
     log local0. "expire date is $expire_date"
     set exp_clock [clock scan $expire_date]; log local0. "exp_clock is $exp_clock"
     
    }

     

    Here's what variables look like

     

    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: now is 1603535987
    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: expire date is 2024-04-16
    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: exp_clock is 1713218400
    
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: now is 1603536053
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: www.random.com does not have a value in datagroup
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: expire date is 1991-01-01
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: exp_clock is 662684400

     

1 Reply

  • So, this code will return the value of the date you've mapped to every host

     

    when HTTP_REQUEST {
     set host [string tolower [HTTP::host]] 
     set now [clock seconds] ; log local0. "now is $now"
     set expire_date "1991-01-01"
     if { [class match $host eq test-string] }{ set expire_date [class match -value "$host" equals test-string] } else { log local0. "$host does not have a value in datagroup"}
     log local0. "expire date is $expire_date"
     set exp_clock [clock scan $expire_date]; log local0. "exp_clock is $exp_clock"
     
    }

     

    Here's what variables look like

     

    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: now is 1603535987
    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: expire date is 2024-04-16
    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: exp_clock is 1713218400
    
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: now is 1603536053
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: www.random.com does not have a value in datagroup
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: expire date is 1991-01-01
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: exp_clock is 662684400