ModSecurity icon indicating copy to clipboard operation
ModSecurity copied to clipboard

Detect user agent and execute action

Open AngelSamuel opened this issue 1 year ago • 3 comments

Hello!

I would like to know what would be the best way I can do something similar to this (taken from ChatGPT). I would need to detect when there are many WP Rocket requests (User Agent -> “WP Rocket/Preload”) and if it exceeds more than X requests, execute a request to an external server to have it monitored Would it be possible?

So far what I have, which does not work, is:

SecAction "id:400020,phase:1,nolog,pass,t:none,setvar:tx.wp_rocket_counter=0"

SecRule REQUEST_HEADERS:User-Agent "@contains ?iRocket/Preload"
"id:400021,phase:1,nolog,pass,setvar:tx.wp_rocket_counter=+1"

SecRule TX:wp_rocket_counter "@gt 10"
"id:400022,phase:2,log,deny,status:403,msg:'Too many Rocket/Preload requests detected',
exec:'/usr/bin/curl --user-agent "phmodsec" -X POST https://api.domain.com/alert.php -d "alert=Too many Rocket/Preload requests detected"'"

Hopefully someone can lend a hand!

AngelSamuel avatar Jul 17 '24 12:07 AngelSamuel

Hi @AngelSamuel,

sorry for the late reply.

I think the problem in your solution is here:

SecAction "id:400020,phase:1,nolog,pass,t:none,setvar:tx.wp_rocket_counter=0"

Your variable will be initialized with 0 in every transactions, and will never reach the value of 10.

I think you need to use a persistent storage to store this value (I assume you want to count the requests by IP), so you need to use the IP collection.

Please first read the relevant part:

(you didn't mention the used version)

https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v3.x)#persistent-storage

and I'm sure CRS's DOS plugin is a good reference, if you want to understand the behavior:

https://github.com/coreruleset/dos-protection-plugin-modsecurity/blob/main/plugins/dos-protection-before.conf

airween avatar Aug 06 '24 16:08 airween

@AngelSamuel is there anything we can help you? If not, could you close this issue?

airween avatar Oct 14 '24 15:10 airween

Another remark: "@contains ?iRocket/Preload" is incorrect. "?i" is treated as a litteral, not "Rocket/Preload" case-insensitive. Unless some more info comes in, we'll close this issue soon.

marcstern avatar Oct 22 '24 14:10 marcstern