SYSADMIN JOURNAL / Linux · Networking · Security · HostingProcedure, appunti e soluzioni tecniche
Crowdsec

CrowdSec: bloccare richieste HTTP sospette extra UE senza Referer

Pubblicato il 12/11/2026

Uno scenario CrowdSec per individuare richieste HTTP potenzialmente automatizzate provenienti da indirizzi esterni all’Unione europea, escludendo Svizzera e Regno Unito. Il filtro combina assenza di Referer, codici HTTP selezionati e User-Agent sospetti o obsoleti. Di seguito configurazione, spiegazione e controlli da eseguire prima di attivarlo in produzione.

Scenario YAML

Salvare il file in /etc/crowdsec/scenarios/http-404-no-referrer-extraeu.yaml:

type: trigger
name: custom/http-404-no-referrer-extraeu
description: "Rileva richieste HTTP sospette extra UE senza Referer"
filter: |
  evt.Meta.log_type == 'http_access-log' &&
  evt.Meta.source_ip != nil &&
  evt.Enriched.IsInEU == 'false' &&
  evt.Enriched.IsoCode not in ['CH', 'GB'] &&
  evt.Parsed.referrer == '-' &&
  (
    evt.Meta.http_status in ['301', '404'] ||
    (
      evt.Meta.http_user_agent != nil &&
      (
        evt.Meta.http_user_agent matches 'Chrome/([1-9]|[1-9][0-9]|100)[.]' ||
        evt.Meta.http_user_agent matches 'Firefox/([1-9]|[1-9][0-9]|100)[.]' ||
        evt.Meta.http_user_agent matches 'MSIE [6-9][.]' ||
        evt.Meta.http_user_agent contains 'MSIE 10.' ||
        evt.Meta.http_user_agent contains 'Trident/7.0' ||
        evt.Meta.http_user_agent == '-' ||
        evt.Meta.http_user_agent == '' ||
        evt.Meta.http_user_agent matches '(?i)(sqlmap|nikto|masscan|python-requests|python-urllib|go-http-client|curl/|wget/)'
      )
    )
  )
groupby: evt.Meta.source_ip
blackhole: 720h
labels:
  remediation: true
  classification:
    - attack.T1595
  behavior: "http:suspicious-extraeu"
  service: http

Come funziona il filtro

  • http_access-log limita l’analisi alle richieste registrate negli access log, escludendo gli error log Apache/Nginx. Evita falsi positivi causati, per esempio, dai messaggi di timeout di un bouncer.
  • IsInEU e IsoCode usano l’arricchimento GeoIP per applicare il controllo agli IP non UE, con esclusione esplicita di CH e GB.
  • evt.Parsed.referrer == '-' seleziona richieste senza intestazione Referer, un segnale che da solo non prova un attacco.
  • Il ramo 301/404 intercetta risorse inesistenti o richieste che producono redirect; l’altro ramo riconosce browser molto vecchi e alcuni tool automatici.
  • type: trigger produce un evento al primo match. groupby separa gli IP e blackhole impedisce alert ripetuti per lo stesso bucket durante l’intervallo indicato.

Attenzione ai falsi positivi

Questa è una regola aggressiva: un normale browser può richiedere un URL errato o seguire un redirect senza inviare un Referer. Anche curl, wget e python-requests sono usati da monitoraggi leciti. Prima di abilitarne la remediation, conviene osservare gli alert e, se necessario, restringere il filtro a URL notoriamente scansionati o passare a uno scenario a soglia (type: leaky).

Il campo evt.Enriched.IsInEU va verificato con cscli explain sulla versione e sulla pipeline in uso: l’esempio usa il confronto testuale 'false' previsto dalla configurazione di partenza. Se nei propri eventi è un booleano effettivo, occorre usare false senza apici. Non fare supposizioni sui tipi dei campi. Analogamente il codice HTTP deve essere disponibile nel formato atteso dal parser.

Nota: blackhole: 720h non imposta la durata del ban; quest’ultima dipende dai profili decisionali configurati. Un blackhole molto lungo sopprime nuovi alert per lo stesso IP: va dimensionato secondo le necessità.

Verifica della configurazione

sudo crowdsec -t
sudo cscli scenarios list | grep http-404-no-referrer-extraeu
sudo cscli explain --file /var/log/apache2/access.log --type apache2 --verbose
sudo cscli alerts list
sudo cscli decisions list

Per evitare di rielaborare un intero log in produzione, estrarre una o più righe rappresentative in un file temporaneo e provarle con cscli explain. Testare anche casi leciti: browser moderno, accessi dal Regno Unito/Svizzera, Referer presente, error log e redirect applicativi.

Attivazione e rollback

sudo crowdsec -t && sudo systemctl reload crowdsec
# Disattivazione rapida dello scenario:
sudo mv /etc/crowdsec/scenarios/http-404-no-referrer-extraeu.yaml /etc/crowdsec/scenarios/http-404-no-referrer-extraeu.yaml.disabled
sudo crowdsec -t && sudo systemctl reload crowdsec

La configurazione va considerata un punto di partenza da validare, non un criterio universale per riconoscere bot malevoli. Per riferimento: formato degli scenari e espressioni e campi degli eventi nella documentazione ufficiale CrowdSec.