User Tools

Site Tools


doc:appunti:linux:sa:apache_modsecurity2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:apache_modsecurity2 [2025/07/14 17:39] – [Apache ModSecurity 2] niccolodoc:appunti:linux:sa:apache_modsecurity2 [2025/07/16 18:26] (current) – [Definizione delle regole] niccolo
Line 22: Line 22:
  
 # Track requests to some php pages. # Track requests to some php pages.
-SecRule REQUEST_URI "@beginsWith /wp-login.php" +SecRule REQUEST_URI "@beginsWith /wp-login.php" "id:1101,phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},setvar:ip.req_counter_login=+1" 
-    "id:1101,phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},setvar:ip.req_counter_login=+1" +SecRule REQUEST_URI "@beginsWith /xmlrpc.php"   "id:1102,phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},setvar:ip.req_counter_xmlrpc=+1"
-SecRule REQUEST_URI "@beginsWith /xmlrpc.php" +
-    "id:1102,phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},setvar:ip.req_counter_xmlrpc=+1"+
 # Threshold: one request every 3 seconds (60 req / 180 s). # Threshold: one request every 3 seconds (60 req / 180 s).
-SecRule IP:req_counter_login +SecRule IP:req_counter_login  "@gt 1000" "id:1201,phase:1,log,deny,status:403,msg:'Blocking IP for hammering wp-login.php',setvar:ip.blocked=1,expirevar:ip.blocked=3600" 
-    "@gt 1000" +SecRule IP:req_counter_xmlrpc "@gt 1000" "id:1202,phase:1,log,deny,status:403,msg:'Blocking IP for hammering xmlrpc.php',setvar:ip.blocked=1,expirevar:ip.blocked=3600"
-    "id:1201,phase:1,log,deny,status:403,msg:'Blocking IP for hammering wp-login.php',setvar:ip.blocked=1,expirevar:ip.blocked=3600" +
-SecRule IP:req_counter_xmlrpc +
-    "@gt 1000" +
-    "id:1202,phase:1,log,deny,status:403,msg:'Blocking IP for hammering xmlrpc.php',setvar:ip.blocked=1,expirevar:ip.blocked=3600"+
 # Reset the counter using a rolling window. # Reset the counter using a rolling window.
 SecAction "id:1301,phase:1,pass,nolog,expirevar:ip.req_counter_login=3600" SecAction "id:1301,phase:1,pass,nolog,expirevar:ip.req_counter_login=3600"
Line 39: Line 33:
 SecRule IP:BLOCKED "@eq 1" "id:1401,phase:1,log,deny,status:403,msg:'IP is temporarily blocked due to rate limiting'" SecRule IP:BLOCKED "@eq 1" "id:1401,phase:1,log,deny,status:403,msg:'IP is temporarily blocked due to rate limiting'"
 </file> </file>
 +
 +===== Definizione delle regole =====
 +
 +La prima **SecRule** definita valuta la variabile **REQUEST_URI**, cioè valuta l'URL richiesto usando l'operatore **%%@beginsWith%%**. Se il risultato è positivo l'azione **setvar** incrementa il valore della variabile **ip.req_counter_login**, dove **ip** è una collezione di variabili che è stata inizializzata **initcol** usando il **REMOTE_ADDR** (cioè viene istanziata una collezione di variabile diversa per ogni HTTP client).
 +
 +**ATTENZIONE**: I nomi delle variabili sono **case-insensitive** ed è consuetudine indicarle in minuscolo nello statement **setvar** e in maiuscolo quando sono l'argomento di **SecRule**.
 +
 +Collegata alla regola precedente vi è un'altra **SecRule** che valuta la variabile **IP:req_counter_login** ...
 +
 +FIXME
 +
 +Quando si cambia il file di configurazione è sufficiente fare il reload di Apache:
 +
 +<code>
 +systemctl reload apache2.service
 +</code>
  
 Nella configurazione sopra viene indicato il file di log **/var/log/modsec_audit.log**, si deve provvedere una configurazione di logrotate per effettuare l'opportuna rotazione del log. Creare il file **/etc/logrotate.d/modsecurity** con qualcosa del genere: Nella configurazione sopra viene indicato il file di log **/var/log/modsec_audit.log**, si deve provvedere una configurazione di logrotate per effettuare l'opportuna rotazione del log. Creare il file **/etc/logrotate.d/modsecurity** con qualcosa del genere:
doc/appunti/linux/sa/apache_modsecurity2.1752507544.txt.gz · Last modified: by niccolo