← Torna agli articoli

News · 08 February 2026

IDS e IPS con Suricata: metti gli occhi sulla tua rete

IDS e IPS con Suricata: metti gli occhi sulla tua rete

Hai un firewall. Ottimo. Ma il firewall guarda solo le porte e i protocolli — non guarda dentro il traffico. Potrebbe passarci un C2 in HTTPS, una sessione di esfiltrazione dati via DNS, un exploit su una porta lecita. Il firewall non direbbe niente.

Ecco dove entra in gioco un IDS (Intrusion Detection System) o un IPS (Intrusion Prevention System): strumenti che analizzano il traffico di rete in profondità, cercando pattern di attacco noti e comportamenti anomali.

Suricata è la mia scelta preferita: open source, performante, con supporto multi-thread, regole compatibili con Snort e sviluppato attivamente.


IDS vs IPS: la differenza pratica

  IDS IPS
Posizione Out-of-band (copia del traffico) In-line (nel mezzo del traffico)
Azione Alert only Alert + blocca
Rischio Nessun impatto sul traffico Falsi positivi possono bloccare traffico legittimo
Primo passo consigliato ✅ Sì Dopo aver tuned le regole

La regola d’oro: inizia sempre in modalità IDS (solo alert), studia i falsi positivi, poi passa a IPS quando sei sicuro delle regole.


Installazione di Suricata

# Ubuntu/Debian
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
sudo apt install suricata -y

# Verifica versione
suricata --version

# RHEL/CentOS/Fedora
sudo dnf install epel-release -y
sudo dnf install suricata -y

Configurazione base

Il file di configurazione principale è /etc/suricata/suricata.yaml. I punti chiave:

# Specifica le reti "home" (quelle che vuoi monitorare)
vars:
  address-groups:
    HOME_NET: "[192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12]"
    EXTERNAL_NET: "!$HOME_NET"
  
  port-groups:
    HTTP_PORTS: "80"
    HTTPS_PORTS: "443"
    SSH_PORTS: "22"

# Interfaccia di cattura
af-packet:
  - interface: eth0
    threads: auto
    cluster-id: 99
    cluster-type: cluster_flow
    defrag: yes

# Output
outputs:
  - eve-log:
      enabled: yes
      filetype: regular
      filename: /var/log/suricata/eve.json
      types:
        - alert:
            payload: yes
            payload-printable: yes
        - http:
            extended: yes
        - dns:
            query: yes
            answer: yes
        - tls:
            extended: yes
        - flow

Scarica le regole

# Scarica e aggiorna le regole con suricata-update
sudo apt install python3-pip -y
pip3 install suricata-update

# Aggiorna tutte le sorgenti di regole
sudo suricata-update

# Abilita sorgenti aggiuntive gratuite
sudo suricata-update list-sources
sudo suricata-update enable-source et/open         # Emerging Threats Open (gratis)
sudo suricata-update enable-source ptresearch/attackdetection
sudo suricata-update update-sources
sudo suricata-update

# Le regole vengono salvate in /var/lib/suricata/rules/suricata.rules

Avvio e test

# Test della configurazione
sudo suricata -T -c /etc/suricata/suricata.yaml -v

# Avvia come servizio
sudo systemctl enable suricata
sudo systemctl start suricata

# Monitora i log in tempo reale
sudo tail -f /var/log/suricata/eve.json | python3 -c "
import sys, json
for line in sys.stdin:
    try:
        event = json.loads(line)
        if event.get('event_type') == 'alert':
            print(f\"[ALERT] {event['timestamp']} | {event['src_ip']} -> {event['dest_ip']} | {event['alert']['signature']}\")
    except: pass
"

# Test con traffico malevolo simulato (curl verso un IP noto nei feed)
curl http://testmynids.org/uid/index.html

Scrittura di regole personalizzate

Questa è la parte più potente: Suricata ti permette di scrivere le tue regole basandoti sulla tua threat intelligence.

Struttura di una regola Suricata

action  proto  src_ip  src_port  direction  dst_ip  dst_port  (opzioni)
# Rileva connessioni verso un IP di C2 noto
alert ip any any -> 185.220.101.47 any (
    msg:"TI - Connessione verso C2 noto Feb2026";
    classtype:trojan-activity;
    sid:9000001;
    rev:1;
    metadata:affected_product Windows;
)

# Rileva download di file eseguibili via HTTP
alert http any any -> any any (
    msg:"Possible EXE download via HTTP";
    flow:established,to_client;
    file.data;
    content:"MZ";
    within:2;
    http.response_body;
    classtype:policy-violation;
    sid:9000002;
    rev:1;
)

# Rileva DNS verso domini DGA (generazione algoritmica)
alert dns any any -> any any (
    msg:"Possible DGA domain - long random subdomain";
    dns.query;
    pcre:"/^[a-z0-9]{15,}\.(?:com|net|org|ru|cn)$/i";
    classtype:bad-unknown;
    sid:9000003;
    rev:1;
)

# Rileva tentativi di SQL Injection via HTTP
alert http any any -> $HOME_NET any (
    msg:"SQL Injection Attempt - UNION SELECT";
    http.uri;
    content:"UNION";
    nocase;
    content:"SELECT";
    nocase;
    distance:0;
    classtype:web-application-attack;
    sid:9000004;
    rev:1;
)

# Rileva scan Nmap
alert tcp any any -> $HOME_NET any (
    msg:"Nmap Scan Detected - SYN Scan";
    flags:S;
    threshold:type both, track by_src, count 20, seconds 5;
    classtype:network-scan;
    sid:9000005;
    rev:1;
)

Salva le tue regole custom in /etc/suricata/rules/local.rules e aggiungile al config:

# In suricata.yaml
rule-files:
  - /var/lib/suricata/rules/suricata.rules
  - /etc/suricata/rules/local.rules  # ← aggiungi questa

Modalità IPS: bloccare il traffico

Per passare da IDS a IPS, devi mettere Suricata in modalità NFQUEUE su Linux:

# Installa le dipendenze
sudo apt install libnetfilter-queue-dev -y

# Reindirizza il traffico verso Suricata
sudo iptables -I FORWARD -j NFQUEUE --queue-num 0
sudo iptables -I INPUT -j NFQUEUE --queue-num 0

# Avvia Suricata in modalità IPS
sudo suricata -c /etc/suricata/suricata.yaml -q 0

Nelle regole, cambia alert con drop per bloccare il traffico:

drop ip any any -> 185.220.101.47 any (
    msg:"BLOCK - C2 noto";
    sid:9000010;
    rev:1;
)

Integrazione con Elastic Stack

Il file eve.json di Suricata è perfetto per l’ingestione su Elasticsearch:

# Installa Filebeat
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.x-amd64.deb
sudo dpkg -i filebeat-8.x-amd64.deb

# Configura Filebeat per Suricata
sudo filebeat modules enable suricata

# Configura /etc/filebeat/modules.d/suricata.yml
- module: suricata
  eve:
    enabled: true
    var.paths: ["/var/log/suricata/eve.json"]
# Configura l'output verso Elasticsearch
sudo nano /etc/filebeat/filebeat.yml
output.elasticsearch:
  hosts: ["localhost:9200"]

setup.kibana:
  host: "localhost:5601"
# Carica i dashboard Kibana preconfigurati per Suricata
sudo filebeat setup --dashboards
sudo systemctl start filebeat

In Kibana avrai dashboard pronti con: top alert, paesi di origine degli attacchi, protocolli più colpiti, trend temporale.


Tuning: ridurre i falsi positivi

Il nemico del Blue Team non è solo l’attaccante — sono i falsi positivi che ti fanno ignorare gli alert reali.

# Sopprime alert per IP interni fidati
# In /etc/suricata/threshold.conf:
suppress gen_id 1, sig_id 2013028, track by_src, ip 192.168.1.0/24

# Sopprime alert ripetitivi (threshold)
# Logga solo 1 alert ogni 60 secondi per lo stesso IP sorgente
threshold gen_id 1, sig_id 9000005, type threshold, track by_src, count 1, seconds 60

Conclusione

Suricata è uno strumento potente che può trasformare la tua visibilità sulla rete da zero a quasi completa in poche ore. L’investimento iniziale è nella configurazione e nel tuning — ma una volta rodato, ti fornisce un livello di alerting che nessun firewall classico può darti.

Inizia in modalità IDS, studia i tuoi log, scrivi regole basate sulla tua realtà specifica, e passa a IPS solo quando hai fiducia nelle tue regole. Il traffico di rete non mente. 📡