Come configurare un IPS su Fedora 17

TL;DR
In questa guida passo-passo configuri Suricata come IPS su Fedora 17 usando Vuurmuur per inoltrare il traffico a Suricata tramite NFQUEUE. Copre installazione, test in modalità IDS, passaggio a IPS inline, regole di esempio per il blocco e checklist operativa.
Introduzione
Vuurmuur è un gestore di firewall per Linux. Traduce una sintassi di regole leggibile dall’umano nelle corrette chiamate iptables. Offre visualizzazione log, shaping del traffico, terminazione di connessioni e altre funzionalità utili.
Suricata è un motore IDS/IPS relativamente moderno. È multithreaded per migliori prestazioni, supporta modalità IDS e IPS, può estrarre file da stream HTTP e offre molte altre funzionalità.
Fedora 17 include nei repository sia Vuurmuur sia Suricata. Questa guida mostra come ottenere un IPS funzionante usando solo i pacchetti Fedora.
Prerequisiti
- Accesso root o sudo su una macchina Fedora 17.
- Interfaccia di rete principale (nell’esempio: eth0).
- Connettività Internet per scaricare le regole IDS/IPS.
Importante: Fedora 17 è una versione datata. Valuta il passaggio a una versione supportata per produzione.
1) Installare Vuurmuur e Suricata
Esegui come root:
yum install suricata Vuurmuur-daemon Vuurmuur-tui
2) Eseguire Suricata in modalità IDS (test passivo)
Un IPS può bloccare traffico se mal configurato. Per questo è consigliato prima testare in modalità IDS (passiva).
Scarichiamo le regole Emerging Threats ottimizzate per Suricata e mettiamole in /etc/suricata/rules/:
cd /etc/suricata/
curl -O https://rules.emergingthreatspro.com/open/suricata/emerging.rules.tar.gz
tar xzvf emerging.rules.tar.gz
ln -s /etc/suricata/rules/reference.config /etc/suricata/reference.config
ln -s /etc/suricata/rules/classification.config /etc/suricata/classification.config
cp /etc/suricata/rules/suricata-1.2-prior-open.yaml /etc/suricata/suricata.yaml
Testa Suricata con l’interfaccia di prova (sostituisci eth0 con l’interfaccia corretta):
suricata -c /etc/suricata/suricata.yaml -i eth0
Lascia Suricata in esecuzione per qualche minuto e controlla /var/log/suricata/stats.log e /var/log/suricata/http.log per confermare che l’ispezione funzioni. Genera traffico aprendo un browser e visitando alcuni siti.
3) Passare a Suricata in modalità IPS (inline)
Per permettere a Suricata di bloccare il traffico, iptables deve inoltrare pacchetti a Suricata tramite NFQUEUE. Usiamo Vuurmuur per gestire le regole del firewall.
Apri la configurazione grafica di Vuurmuur (vuurmuur_conf). Vai alla sezione “Rules” (Regole) e aggiungi una regola iniziale che accetta tutto e abiliti il logging:
accept service any from any to any log
L’aspetto della regola è mostrato nello screenshot.
Poi, per poter avviare il servizio Vuurmuur, aggiungi un’interfaccia nella configurazione.
Vai a “Interfaces” (Interfacce) e aggiungi una nuova interfaccia; nel campo Device inserisci “eth0”:
Quando hai finito, esci da vuurmuur_conf.
Per far funzionare correttamente il logging di Vuurmuur è necessario adattare la configurazione di rsyslog. Modifica /etc/rsyslog.conf e aggiungi la riga:
*.debug /var/log/debug
Poi riavvia rsyslog:
service rsyslog restart
Avvia Vuurmuur:
service vuurmuur start
Assicurati che Vuurmuur venga avviato automaticamente al boot:
systemctl enable vuurmuur.service
Apri di nuovo vuurmuur_conf e vai al logviewer per verificare che il traffico passi:
Se tutto è regolare, procediamo a inoltrare il traffico a Suricata per l’ispezione profonda.
Inoltrare tutto a Suricata (NFQUEUE)
Cambia la regola Vuurmuur precedente in:
nfqueue service any from any to any
La regola apparirà così nello strumento:
Questa regola invierà tutto il traffico a Suricata. Applica le modifiche in vuurmuur_conf; questo aggiornerà automaticamente il firewall. Il logviewer mostrerà l’inoltro verso NFQUEUE.
Avvia Suricata in modalità inline con la coda 0:
suricata -c /etc/suricata/suricata.yaml -q0
Apri il browser e verifica che il traffico scorra. Controlla /var/log/suricata/stats.log e /var/log/suricata/http.log per confermare il funzionamento.
Esempio parziale di stats.log generato durante il test:
-------------------------------------------------------------------
Date: 10/8/2012 -- 17:20:08 (uptime: 0d, 01h 39m 02s)
-------------------------------------------------------------------
Counter | TM Name | Value
-------------------------------------------------------------------
decoder.pkts | Decode1 | 3147
decoder.bytes | Decode1 | 1453192
decoder.ipv4 | Decode1 | 3147
decoder.ipv6 | Decode1 | 0
... (output abbreviato)
detect.alert | Detect | 0
Esempio parziale di http.log:
10/08/2012-17:24:02.447292 www.howtoforge.com [] / [] Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 [] 192.168.122.48:48396 -> 188.40.16.205:80
10/08/2012-17:24:02.544458 static.howtoforge.com [] /misc/drupal.css [] Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 [] 192.168.122.48:52942 -> 178.63.27.110:80
Chiudi Suricata in esecuzione con Ctrl-C e modifica /etc/sysconfig/suricata per avviarlo da servizio. Imposta OPTIONS come segue:
OPTIONS="-q 0 -D --pidfile /var/run/suricata.pid"
Poi avvia Suricata come servizio e abilitalo al boot:
service suricata start
systemctl enable suricata.service
4) Bloccare (droppare) traffico con Suricata
Finora niente è stato droppato. Le regole scaricate di default usano la azione “alert”, quindi non bloccano.
Modifica /etc/suricata/suricata.yaml e nella sezione stream imposta inline su yes. Questo abilita la riassemblaggio dei flussi in modalità IPS:
stream:
memcap: 32mb
checksum_validation: yes # reject wrong csums
inline: yes
Aggiungi poi local.rules alla lista dei file di regole caricati:
default-rule-path: /etc/suricata/rules/
rule-files:
- local.rules
- emerging-ftp.rules
- emerging-policy.rules
Crea il file /etc/suricata/rules/local.rules e aggiungi, su una singola riga, una regola di drop d’esempio che blocchi richieste contenenti “facebook.com”:
drop tcp any any -> any any (msg:"facebook is blocked"; content:"facebook.com"; http_header; nocase; classtype:policy-violation; sid:1;)
Riavvia Suricata:
service suricata restart
Ora prova ad aprire http://www.facebook.com/ con il browser: la richiesta dovrebbe andare in timeout.
Il file /var/log/suricata/fast.log mostrerà voci di drop come queste:
10/06/2012-11:40:49.018377 [Drop] [] [1:1:0] facebook is blocked [] [Classification: Potential Corporate Privacy Violation] [Priority: 1] {TCP} 192.168.122.48:57113 -> 173.252.100.16:80
10/06/2012-11:40:49.020955 [Drop] [] [1:1:0] facebook is blocked [] [Classification: Potential Corporate Privacy Violation] [Priority: 1] {TCP} 192.168.122.48:57114 -> 173.252.100.16:80
Importante: questa regola è solo un esempio. In produzione gestisci le regole con cura per evitare falsi positivi e interruzioni del servizio.
Checklist operativa rapida (ruoli)
- Amministratore di sistema:
- Installare pacchetti e assicurare avvio servizi (rsyslog, vuurmuur, suricata).
- Verificare che Vuurmuur gestisca l’interfaccia corretta.
- Network engineer:
- Confermare che NFQUEUE instradi il traffico desiderato.
- Monitorare latenza e utilizzo CPU/memoria.
- Analista sicurezza:
- Testare le regole in IDS prima di abilitare il drop.
- Scrivere regole locali e validare sid/descrizioni.
Approcci alternativi e quando usarli
- Usare iptables/nfqueue manualmente: utile per ambienti senza Vuurmuur o per scripts di automazione.
- Snort in modalità inline: alternativa a Suricata se si preferisce l’ecosistema Snort; valuta costi di manutenzione delle regole.
- Offload su dispositivo dedicato: in reti ad alto traffico considera un’appliance o bilanciamento per evitare che l’IPS diventi collo di bottiglia.
Modello mentale e buone pratiche
- Fase 1: Test in IDS (registrazione) — osserva e taratura le regole.
- Fase 2: Modalità inline su una porzione limitata di traffico — monitoraggio intensivo.
- Fase 3: Estensione graduale e automatizzazione delle regole approvate.
Regola pratica: prima di droppare, assicurati che ogni regola abbia una contromisura per il falso positivo (es. whitelist o bypass su IP critici).
Breve playbook di deploy (SOP)
- Installare pacchetti.
- Scaricare regole e configurare suricata.yaml.
- Avviare Suricata in IDS e raccogliere dati per almeno 24 ore.
- Creare local.rules e testarle in IDS.
- Abilitare inline e campionare il traffico su sottoreti non critiche.
- Monitorare logs e metriche; rollback se si osservano interruzioni.
Quando un IPS può fallire (controesempi)
- Alte latenze se il server Suricata è sottodimensionato rispetto al throughput.
- False positive che bloccano servizi importanti se le regole non sono tarate.
- Problemi con traffico cifrato: l’ispezione HTTP richiede terminazione TLS o decrittazione a monte.
Note di compatibilità e migrazione
- Fedora 17 è datato: per ambienti di produzione privilegia versioni supportate o distribuzioni enterprise.
- Suricata evolve: verifica la compatibilità delle regole e dei file di configurazione quando esegui l’upgrade.
Glossario (1 linea ciascuno)
- IPS: Intrusion Prevention System, blocca le minacce in linea.
- IDS: Intrusion Detection System, rileva e segnala anomalie.
- NFQUEUE: meccanismo del kernel Linux per passare pacchetti all’userland.
- Vuurmuur: gestore di firewall che semplifica iptables.
- Suricata: motore IDS/IPS open source multithreaded.
Ulteriori letture consigliate
- Suricata User Guide
- Rule management con oinkmaster
- Vuurmuur user guide
Riepilogo
Questa guida mostra come portare Suricata da IDS a IPS su Fedora 17 usando Vuurmuur per inoltrare il traffico a NFQUEUE. Inizia sempre in modalità IDS per tarare le regole, quindi abilita l’inline reassembly e testa regole di drop con cautela. Monitora log e metriche e prepara un piano di rollback.
Importante: testa ogni modifica in un ambiente di staging e valuta l’aggiornamento a una release di Fedora supportata per produzione.
Materiali simili

Design essenziale per app: esperienza utente

Gestire la cronologia di YouTube in modo sicuro

Leggere e organizzare fumetti sul PC

Risolvi errore 'Something Went Wrong' su Prime Video

Gestire chiamate senza uscire dalle app con Call PopOut
