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

ahmed_ismail_21's avatar
ahmed_ismail_21
Icon for Nimbostratus rankNimbostratus
Jun 05, 2016

why F5 give me this error

looking for close parenthesis}][{($allowed == 0) and ([HTTP::uri] end_with "/register")}]

 

when CLIENT_ACCEPTED { set allowed 0 if { [ class match -- [whereis [IP::client_addr] country] equals "EG"] or [[ whereis [IP::client_addr] country ] not equals "EG" ] } { set allowed 1 } } when HTTP_REQUEST { if {($allowed == 0) and ([HTTP::uri] end_with "/register")} { HTTP::respond 403 content "Blocked!"} }

 

guys kindly advise

 

27 Replies

  • Hi,

    Just see that the class match cause your error. Try this instead :

    when CLIENT_ACCEPTED { 
        set allowed 0 
        if { [whereis [IP::client_addr] country] equals "EG" } { 
            set allowed 1 
        } 
    } 
    when HTTP_REQUEST { 
        if { ($allowed == 0) and ([HTTP::uri] ends_with "/register") } { 
            HTTP::respond 403 content "Blocked!"
        } 
    }
    
    • ahmed_ismail_21's avatar
      ahmed_ismail_21
      Icon for Nimbostratus rankNimbostratus
      Hi Yann, your help is appreciated, the below iRule didn't work, means when I opening this URL "test.com/register" which end with /register from Egypt, the website didn't redirect me to test.com/register, plus home page of website didn't open as well. when CLIENT_ACCEPTED { set allowed 0 if { ([whereis [IP::client_addr] country] equals "EG") or (![whereis [IP::client_addr] country ] equals "EG") } { set allowed 1 } } when HTTP_REQUEST { if { ($allowed == 0) and ([HTTP::uri] ends_with "/register") } { HTTP::redirect "http://www.test.com/register"} elseif { ($allowed == 1) and ([HTTP::path] ends_with "/register") } { HTTP::redirect "http://www.test/login"} else {pool test} }
  • Hi,

    ([whereis [IP::client_addr] country] equals "EG") or (![whereis [IP::client_addr] country ] equals "EG")
    are the exact opposite.

    You have to remove one of the condition. Because of possible subsequent requests, I suggest to change a little bit your irule. For example :

    when HTTP_REQUEST { 
        set allowed 0 
        if { !([whereis [IP::client_addr] country ] equals "EG") } { 
            set allowed 1 
        }
        if { ($allowed == 0) and ([HTTP::path] ends_with "/register") } { 
            HTTP::redirect "http://www.test.com/register"
        } elseif { ($allowed == 1) and ([HTTP::path] ends_with "/register") } { 
            HTTP::redirect "http://www.test/login"
        } else {
            pool test
        } 
    }
    
    • ahmed_ismail_21's avatar
      ahmed_ismail_21
      Icon for Nimbostratus rankNimbostratus
      Hi Yann, First Thank you, but unfortunately didn't work at all even the main website didn't work, means when I tried to open the main website test.com, which match on pool test didn't open, wrap up, the redirect and main page of website didn't work.
  • Hi,

    ([whereis [IP::client_addr] country] equals "EG") or (![whereis [IP::client_addr] country ] equals "EG")
    are the exact opposite.

    You have to remove one of the condition. Because of possible subsequent requests, I suggest to change a little bit your irule. For example :

    when HTTP_REQUEST { 
        set allowed 0 
        if { !([whereis [IP::client_addr] country ] equals "EG") } { 
            set allowed 1 
        }
        if { ($allowed == 0) and ([HTTP::path] ends_with "/register") } { 
            HTTP::redirect "http://www.test.com/register"
        } elseif { ($allowed == 1) and ([HTTP::path] ends_with "/register") } { 
            HTTP::redirect "http://www.test/login"
        } else {
            pool test
        } 
    }
    
    • ahmed_ismail_21's avatar
      ahmed_ismail_21
      Icon for Nimbostratus rankNimbostratus
      Hi Yann, First Thank you, but unfortunately didn't work at all even the main website didn't work, means when I tried to open the main website test.com, which match on pool test didn't open, wrap up, the redirect and main page of website didn't work.
  • Hi,

    Sorry just published a new version, I saw a mistake in the irule :

    can't use empty string as operand of "!" while executing "if { (![whereis [IP::client_addr] country ] equals "EG") } { set allowed 1 }"

    here the irule :

    when HTTP_REQUEST { 
            set allowed 0 
            if { !([whereis [IP::client_addr] country ] equals "EG") } { 
                set allowed 1 
            }
            if { ($allowed == 0) and ([HTTP::path] ends_with "/register") } { 
                HTTP::redirect "http://www.test.com/register"
            } elseif { ($allowed == 1) and ([HTTP::path] ends_with "/register") } { 
                HTTP::redirect "http://www.test.com/login"
            } else {
                pool test
            } 
        }
    
    • ahmed_ismail_21's avatar
      ahmed_ismail_21
      Icon for Nimbostratus rankNimbostratus
      Hi Yann, Thank you for your support, now main website is work, but the URL test.com/register which end with /register didn't work, mean the web page didn't open, whatever I open this URL from Egypt or Not.
  • Hi,

    Sorry just published a new version, I saw a mistake in the irule :

    can't use empty string as operand of "!" while executing "if { (![whereis [IP::client_addr] country ] equals "EG") } { set allowed 1 }"

    here the irule :

    when HTTP_REQUEST { 
            set allowed 0 
            if { !([whereis [IP::client_addr] country ] equals "EG") } { 
                set allowed 1 
            }
            if { ($allowed == 0) and ([HTTP::path] ends_with "/register") } { 
                HTTP::redirect "http://www.test.com/register"
            } elseif { ($allowed == 1) and ([HTTP::path] ends_with "/register") } { 
                HTTP::redirect "http://www.test.com/login"
            } else {
                pool test
            } 
        }
    
    • ahmed_ismail_21's avatar
      ahmed_ismail_21
      Icon for Nimbostratus rankNimbostratus
      Hi Yann, Thank you for your support, now main website is work, but the URL test.com/register which end with /register didn't work, mean the web page didn't open, whatever I open this URL from Egypt or Not.
    • ahmed_ismail_21's avatar
      ahmed_ismail_21
      Icon for Nimbostratus rankNimbostratus
      The redirect didn't work, the www.test.com located at Egypt, the same VS. I made test, I located at Egypt, and change redirect to be http://www.test.com/login, and open url which end with /register, but F5 didn't redirect me to www.test.com/login.
    • Yann_Desmarest_'s avatar
      Yann_Desmarest_
      Icon for Nacreous rankNacreous
      You should trace http request/response on your computer using httpwatch or fiddler for example. The provided irule works for me in my lab so I believe that you have another issue on your side
    • ahmed_ismail_21's avatar
      ahmed_ismail_21
      Icon for Nimbostratus rankNimbostratus
      The redirect didn't work, the www.test.com located at Egypt, the same VS. I made test, I located at Egypt, and change redirect to be http://www.test.com/login, and open url which end with /register, but F5 didn't redirect me to www.test.com/login.
    • Yann_Desmarest's avatar
      Yann_Desmarest
      Icon for Cirrus rankCirrus
      You should trace http request/response on your computer using httpwatch or fiddler for example. The provided irule works for me in my lab so I believe that you have another issue on your side
  • log local0. "[IP::client_addr] - [whereis [IP::client_addr] country ]"

    Add a log entry to see what the F5 is seeing:

    when HTTP_REQUEST { 
            set allowed 0 
            if { !([whereis [IP::client_addr] country ] equals "EG") } { 
                log local0. "[IP::client_addr] - [whereis [IP::client_addr] country ]"
                set allowed 1 
            }
            if { ($allowed == 0) and ([HTTP::path] ends_with "/register") } { 
                HTTP::redirect "http://www.test.com/register"
            } elseif { ($allowed == 1) and ([HTTP::path] ends_with "/register") } { 
                HTTP::redirect "http://www.test.com/login"
            } else {
                HTTP::redirect "http://www.test.com/login"
            } 
        }