Forum Discussion
irule help: Limit HTTP Methods to ONLY GET and POST and reject everything else?
Im still trying to figure out the iRule nirvana but I am requesting the help of all y'alls to guide me in the right direction.
=================
when RULE_INIT {
set good_http_methods [list “GET” “POST"]
}
when HTTP_REQUEST {
if { [class match [string tolower [HTTP::method]] contains good_http_methods] } {
log local0. "good methods [HTTP::method]"
return
} else {
log local0. "rejected methods [HTTP::method]"
reject
}
}
=======================
Or is the negative method better? (I assume it depends if you are half-glass-full vs half-glass-empty type of person?)
==================================
when RULE_INIT {
set sec_http_methods [list "CONNECT" "DELETE" "HEAD" "OPTIONS" "PUT" "TRACE"]
}
when HTTP_REQUEST {
if { [matchclass [HTTP::method] equals $::sec_http_methods] } {
reject
}
}
==================================
But I found this off of devcentral on ([https://devcentral.f5.com/articles/irule-security-101-02-http-methods-and-cross-site-tracing.Ux9odl5dSzQ]iRule Security 101 2.
4 Replies
- Kevin_Stewart
Employee
You could significantly simplify the positive model like this:
when HTTP_REQUEST { if { ( [HTTP::method] equals "GET" ) or ( [HTTP::method] equals "POST" ) } { return } else { reject } } - Kevin_Stewart
Employee
Further, the class commands work on data groups not lists, so your original iRule (slightly modified):
when HTTP_REQUEST { if { not ( [class match [HTTP::method] equals good_http_methods] ) } { reject } }would query a string-based data group:
ltm data-group internal good_http_methods { records { GET { } POST { } } type string } - fubarSUSHI
Altocumulus
Kevin:
Would this work if I wanted to log?========================= when HTTP_REQUEST { if { [class match [HTTP::method] equals good_http_methods]} { log local0. "good methods [HTTP::method]" return } else { log local0. "rejected methods [HTTP::method]" reject } } =========================A question about setup on the data group list?
Records>String=POST Records>Value=? (What do I put there?) - Kevin_Stewart
Employee
Yes that would work, though it'd be a pretty sparse log entry.
You don't have to put anything in the data group value. We're just evaluating if the data group entry exists.
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)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