Forum Discussion
Need iRule to block the traffic for specific URL
Hello
Can somebody help on this please?
I have LTM appliance & Virtual server 'https://www100.test.com' hosted.
The requirement I have is to block all the traffic destinated to one of the application 'https://www100.test.com/ce' - is this something achievable by iRule If so do you have any idea on the iRule?
Would appreciate somebody can help.
Have seen this - https://support.f5.com/csp/article/K74012450 but that is looking too complex to me.
Thanks
you could something like this:
when HTTP_REQUEST {
if { ([HTTP::host] eq "www100.test.com") and ([HTTP::path] eq "/ce") } {
drop
}
}you could also, instead of eq "/ce" do starts_with "/ce" in case you have other URI's that start with "/ce" and you want to block them
- JamesB12Altocumulus
Thanks for that. I will give it a try.
If i need to filter specific Source IPs say from Whitelist1 Data group allow it, block rest of it for the same URL "www100.test.com/ce". How do i match the condition with the below iRule.
Hi James,
The provided example in K74012450 allows you to block certain URIs for external IPs. Its probable not the right (to complex) solution if you want to block access to a given URI for all clients.
Depending on how the "block" action should be you may use one of the iRule snippets below:
Intercept the Request and send HTTP 403 "Access Denied" response to the User-Agent:
Intercept the Request and send HTTP 403 "Access Denied" response to the User-Agent: when HTTP_REQUEST { if { [string tolower "[HTTP::host][HTTP::path]"] starts_with "www100.test.com/ce" } then { HTTP::respond 403 content "<html><body><h1>Access Denied</h1></body><html>" "Content-Type" "text/html" } }
Intercept the Request and redirect the User-Agent to a custom error page or landing URL:
when HTTP_REQUEST { if { [string tolower "[HTTP::host][HTTP::path]"] starts_with "www100.test.com/ce" } then { HTTP::respond 302 "Location" "/error_page.html" } }
If the block list gets more complex (e.g. more entries) you may need a different technique to filter URLs. Also keep in mind that the block list in my examples are filtering request to "www100.test.com/ce*". If your web application is also accesible via lets say "https://212.212.212.212/ce" then the filtering wont work. You may need to skip checking of the HOST-Name to make the black-listing more robust...
Cheers, Kai
- JamesB12Altocumulus
Thanks for that , Should be OK with sending
HTTP::respond 403
If i need to filter specific Source IPs say from Whitelist1 Data group allow it, block rest of it for the same URL "www100.test.com/ce". How do i match the condition with the below iRule.
when HTTP_REQUEST {
if { [string tolower "[HTTP::host][HTTP::path]"] starts_with "www100.test.com/ce" } then {
HTTP::respond 403 content "<html><body><h1>Access Denied</h1></body><html>" "Content-Type" "text/html"
}Thanks
Sounds like the piece you are looking for is a class match for the whitelist.
when HTTP_REQUEST {
if { [string tolower "[HTTP::host][HTTP::path]"] starts_with "www100.test.com/ce" } then {if { [class match [IP::client_addr] equals Whitelist1] } {
log local0.info "TESTCE: Acceptable usage from [IP::remote_addr]"} else {
HTTP::respond 403 content "<html><body><h1>Access Denied</h1></body><html>" "Content-Type" "text/html"return
}}
You can also have a pool selection with the log statement if the traffic goes to a specific pool. You can also just negate the "if" condition if you only want to action if the IP is not in the whitelist.
Scott
- zahranaNimbostratus
Below is fine and tested
when HTTP_REQUEST {
if { [string tolower [HTTP::host]] eq "example.com" && [string tolower [HTTP::uri]] eq "/news" } {
HTTP::respond 403 content "<html><body><h1>Access Denied</h1></body></html>" "Content-Type" "text/html"
}
}
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com