Sicurezza Rete · 10 min read · Jan 10, 2026
Installa e Configura il Sistema di Rilevamento Intrusioni Snort 3 su Ubuntu 22.04

Snort è un sistema di prevenzione e rilevamento intrusioni open source (IDS) per difendersi dagli attacchi DDoS. Utilizza regole integrate che aiutano a definire l’attività di rete malevola e utilizza queste regole per trovare pacchetti che corrispondono a esse e genera avvisi per gli utenti. Snort può identificare gli attacchi più recenti, le infezioni da malware, i sistemi compromessi e le violazioni delle politiche di rete.
Caratteristiche
- Monitoraggio del traffico in tempo reale.
- Registrazione dei pacchetti. Analisi del protocollo.
- Corrispondenza dei contenuti. Fingerprinting del sistema operativo.
- Può essere installato in qualsiasi ambiente di rete.
- Crea log.
In questo tutorial, ti mostreremo come installare Snort su Ubuntu 22.04.
Requisiti
- Un server che esegue Ubuntu 22.04.
- Una password di root configurata sul server.
Installa le Dipendenze Necessarie
Prima di iniziare, dovrai installare alcune dipendenze sul tuo server. Puoi installarle tutte eseguendo il seguente comando:
apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev libfl-dev -yUna volta installate tutte le dipendenze, puoi procedere al passaggio successivo.
Installa Snort DAQ
Successivamente, dovrai installare la libreria di acquisizione dati sul tuo sistema. Per impostazione predefinita, non è disponibile nel repository predefinito di Ubuntu. Quindi dovrai compilarla dal sorgente.
Per prima cosa, scarica Snort DAQ da Git con il seguente comando:
git clone https://github.com/snort3/libdaq.gitUna volta completato il download, naviga nella directory scaricata e configurala con il seguente comando:
cd libdaq
./bootstrap
./configureDovresti vedere il seguente output:
cc: gcc
cppflags:
am_cppflags: -fvisibility=hidden -Wall -Wmissing-declarations -Wpointer-arith -Wcast-align -Wcast-qual -Wformat -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings -Wextra -Wsign-compare -Wno-unused-parameter -fno-strict-aliasing -fdiagnostics-show-option
cflags: -g -O2
am_cflags: -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wnested-externs
ldflags:
am_ldflags:
libs:
code_coverage_enabled: no
code_coverage_cppflags:
code_coverage_cflags:
code_coverage_ldflags:
Build AFPacket DAQ module.. : yes
Build BPF DAQ module....... : yes
Build Divert DAQ module.... : no
Build Dump DAQ module...... : yes
Build FST DAQ module....... : yes
Build netmap DAQ module.... : no
Build NFQ DAQ module....... : yes
Build PCAP DAQ module...... : yes
Build Savefile DAQ module.. : yes
Build Trace DAQ module..... : yes
Build GWLB DAQ module...... : yesSuccessivamente, installalo con il seguente comando:
make
make installInstalla Gperftools
Per prima cosa, scarica l’ultima versione di Gperftools con il seguente comando:
cd
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2.9.1.tar.gzUna volta completato il download, estrai il file scaricato con il seguente comando:
tar xzf gperftools-2.9.1.tar.gzSuccessivamente, naviga nella directory scaricata e compila con il seguente comando:
cd gperftools-2.9.1/
./configureSuccessivamente, installalo con il seguente comando:
make
make installInstalla Snort
Successivamente, scarica l’ultima versione di Snort con il seguente comando:
cd
wget https://github.com/snort3/snort3/archive/refs/tags/3.1.43.0.tar.gzSuccessivamente, estrai il file scaricato con il seguente comando:
tar -xvzf 3.1.43.0.tar.gzSuccessivamente, naviga nella directory estratta e configurala con il seguente comando:
cd snort3-3.1.43.0
./configure_cmake.sh --prefix=/usr/local --enable-tcmallocOtterrai il seguente output:
snort version 3.1.43.0
Install options:
prefix: /usr/local
includes: /usr/local/include/snort
plugins: /usr/local/lib/snort
Compiler options:
CC: /usr/bin/cc
CXX: /usr/bin/c++
CFLAGS: -fvisibility=hidden -DNDEBUG -g -ggdb -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -O2 -g -DNDEBUG
CXXFLAGS: -fvisibility=hidden -DNDEBUG -g -ggdb -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -O2 -g -DNDEBUG
EXE_LDFLAGS:
MODULE_LDFLAGS:
Feature options:
DAQ Modules: Static (afpacket;bpf;dump;fst;gwlb;nfq;pcap;savefile;trace)
libatomic: System-provided
Hyperscan: OFF
ICONV: ON
Libunwind: ON
LZMA: ON
RPC DB: Built-in
SafeC: OFF
TCMalloc: ON
JEMalloc: OFF
UUID: ON
-------------------------------------------------------
-- Configuring done
-- Generating done
-- Build files have been written to: /root/snort3-3.1.43.0/buildSuccessivamente, cambia la directory nella directory di build e installa Snort con il seguente comando:
cd build
make
make install
ldconfigOra puoi verificare la versione di Snort utilizzando il seguente comando:
snort -VOtterrai il seguente output:
,,_ -*> Snort++ <*-
o" )~ Version 3.1.43.0
'''' By Martin Roesch & The Snort Team
http://snort.org/contact#team
Copyright (C) 2014-2022 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using DAQ version 3.0.9
Using LuaJIT version 2.1.0-beta3
Using OpenSSL 3.0.2 15 Mar 2022
Using libpcap version 1.10.1 (with TPACKET_V3)
Using PCRE version 8.39 2016-06-14
Using ZLIB version 1.2.11
Using LZMA version 5.2.5Configura Snort
Per prima cosa, dovrai impostare la tua interfaccia di rete in modalità promiscuo in modo che possa vedere tutto il traffico di rete inviato ad essa.
Puoi impostarlo utilizzando il seguente comando:
ip link set dev eth0 promisc onOra puoi verificarlo con il seguente comando:
ip add sh eth0Successivamente, dovrai anche disabilitare l’Offloading dell’Interfaccia. Per prima cosa, controlla se questa funzione è abilitata o meno utilizzando il seguente comando:
ethtool -k eth0 | grep receive-offloadOtterrai il seguente output:
generic-receive-offload: on
large-receive-offload: off [fixed]Ora puoi disabilitarlo utilizzando il seguente comando:
ethtool -K eth0 gro off lro offCrea un File di Servizio Systemd per Snort NIC
Successivamente, dovrai creare un file di servizio systemd per Snort NIC.
nano /etc/systemd/system/snort3-nic.serviceAggiungi le seguenti righe:
[Unit]
Description=Imposta Snort 3 NIC in modalità promiscuo e Disabilita GRO, LRO all'avvio
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dev eth0 promisc on
ExecStart=/usr/sbin/ethtool -K eth0 gro off lro off
TimeoutStartSec=0
RemainAfterExit=yes
[Install]
WantedBy=default.targetSalva e chiudi il file, quindi ricarica il demone systemd per applicare le modifiche:
systemctl daemon-reloadSuccessivamente, avvia e abilita Snort con il seguente comando:
systemctl start snort3-nic.service
systemctl enable snort3-nic.servicePuoi controllare lo stato di Snort con il seguente comando:
systemctl status snort3-nic.serviceOtterrai il seguente output:
? snort3-nic.service - Imposta Snort 3 NIC in modalità promiscuo e Disabilita GRO, LRO all'avvio
Loaded: loaded (/etc/systemd/system/snort3-nic.service; disabled; vendor preset: enabled)
Active: active (exited) since Tue 2022-10-11 16:24:15 UTC; 6s ago
Process: 95745 ExecStart=/usr/sbin/ip link set dev eth0 promisc on (code=exited, status=0/SUCCESS)
Process: 95746 ExecStart=/usr/sbin/ethtool -K eth0 gro off lro off (code=exited, status=0/SUCCESS)
Main PID: 95746 (code=exited, status=0/SUCCESS)
CPU: 11ms
Oct 11 16:24:15 ubuntu2204 systemd[1]: Starting Imposta Snort 3 NIC in modalità promiscuo e Disabilita GRO, LRO all'avvio...
Oct 11 16:24:15 ubuntu2204 systemd[1]: Finished Imposta Snort 3 NIC in modalità promiscuo e Disabilita GRO, LRO all'avvio.Installa le Regole di Snort
Le regole sono molto importanti per il motore di rilevamento intrusioni di Snort. Per prima cosa, crea una directory per memorizzare tutte le regole:
mkdir /usr/local/etc/rulesSuccessivamente, scarica le regole della community con il seguente comando:
wget -qO- https://www.snort.org/downloads/community/snort3-community-rules.tar.gz | tar xz -C /usr/local/etc/rules/Successivamente, modifica il file di configurazione principale di Snort:
nano /usr/local/etc/snort/snort.luaDefinisci la tua rete come mostrato di seguito:
HOME_NET = '192.168.56.124/32'
EXTERNAL_NET = '!$HOME_NET'Successivamente, definisci il percorso delle regole di Snort:
ips =
{
-- usa questo per abilitare gli avvisi del decodificatore e dell'ispezione
--enable_builtin_rules = true,
-- usa include per i file di regole; assicurati di impostare il tuo percorso
-- nota che i file di regole possono includere altri file di regole
-- (vedi anche le variabili di percorso correlate nella parte superiore di snort_defaults.lua)
variables = default_variables,
rules = [[
include /usr/local/etc/rules/snort3-community-rules/snort3-community.rules
]]
}Salva e chiudi il file quando hai finito.
Installa Snort OpenAppID
OpenAppID è un plugin che consente a Snort di rilevare varie applicazioni, Facebook, Netflix, Twitter e Reddit, utilizzate nella rete.
Puoi scaricarlo con il seguente comando:
wget https://www.snort.org/downloads/openappid/26425 -O OpenAppId-26425.tgzUna volta completato il download, estrai il file scaricato con il seguente comando:
tar -xzvf OpenAppId-26425.tgzSuccessivamente, copia il file binario di OpenAppID nella directory di sistema:
cp -R odp /usr/local/lib/Successivamente, modifica il file di configurazione di Snort e definisci la tua posizione di OpenAppID:
nano /usr/local/etc/snort/snort.luaCambia le seguenti righe:
appid =
{
app_detector_dir = '/usr/local/lib',
log_stats = true,
}Salva e chiudi il file, quindi crea una directory di log per Snort:
mkdir /var/log/snortInfine, verifica il file di configurazione di Snort con il seguente comando:
snort -c /usr/local/etc/snort/snort.luaSe tutto va bene, otterrai il seguente output:
--------------------------------------------------
fast pattern groups
src: 59
dst: 158
any: 4
to_server: 56
to_client: 39
--------------------------------------------------
search engine
instances: 316
patterns: 10282
pattern chars: 166369
num states: 112212
num match states: 9885
memory scale: MB
total memory: 3.42574
pattern memory: 0.550588
match list memory: 1.25256
transition memory: 1.58402
fast pattern only: 6822
--------------------------------------------------
pcap DAQ configurato per passivo.
Snort ha convalidato correttamente la configurazione (con 0 avvisi).
o")~ Snort in uscitaCrea Regole Personalizzate per Snort
Puoi anche creare le tue regole personalizzate secondo le tue esigenze. Creiamo una regola personalizzata per la richiesta ICMP in arrivo:
nano /usr/local/etc/rules/local.rulesAggiungi la seguente riga:
alert icmp any any -> $HOME_NET any (msg:"Test di connessione ICMP"; sid:1000001; rev:1;)Successivamente, verifica le regole con il seguente comando:
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rulesOtterrai il seguente output:
search engine
instances: 316
patterns: 10282
pattern chars: 166369
num states: 112212
num match states: 9885
memory scale: MB
total memory: 3.42574
pattern memory: 0.550588
match list memory: 1.25256
transition memory: 1.58402
fast pattern only: 6822
--------------------------------------------------
pcap DAQ configurato per passivo.
Snort ha convalidato correttamente la configurazione (con 0 avvisi).
o")~ Snort in uscitaSuccessivamente, esegui il seguente comando per avviare Snort sulla tua interfaccia di rete utilizzando le tue regole personalizzate:
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i eth0 -A alert_fast -s 65535 -k noneSuccessivamente, apri un’altra interfaccia del terminale e pinga il tuo server. Dovresti vedere l’errore ICMP nel primo terminale:
10/11-16:45:23.848071 [] [1:1000001:1] "Test di connessione ICMP" [] [Priority: 0] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:23.848071 [] [1:384:8] "PROTOCOL-ICMP PING" [] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:24.323038 [] [1:366:11] "PROTOCOL-ICMP PING Unix" [] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:24.323038 [] [1:1000001:1] "Test di connessione ICMP" [] [Priority: 0] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:24.323038 [] [1:384:8] "PROTOCOL-ICMP PING" [] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
^C catturato segnale int
== arresto
10/11-16:45:25.353007 [] [1:366:11] "PROTOCOL-ICMP PING Unix" [] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:25.353007 [] [1:1000001:1] "Test di connessione ICMP" [] [Priority: 0] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:25.353007 [] [1:384:8] "PROTOCOL-ICMP PING" [**] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18Crea un File di Servizio Systemd per Snort
Successivamente, crea un file di servizio systemd per gestire Snort tramite systemd.
nano /etc/systemd/system/snort3.serviceAggiungi le seguenti configurazioni:
[Unit]
Description=Demone Snort
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -i eth0 -m 0x1b -u root -g root
ExecStop=/bin/kill -9 $MAINPID
[Install]
WantedBy=multi-user.targetSalva e chiudi il file, quindi ricarica il demone systemd con il seguente comando:
systemctl daemon-reloadSuccessivamente, avvia e abilita il servizio Snort con il seguente comando:
systemctl enable --now snort3Ora puoi verificare lo stato di Snort utilizzando il seguente comando:
systemctl status snort3Otterrai il seguente output:
? snort3.service - Demone Snort
Loaded: loaded (/etc/systemd/system/snort3.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-10-11 16:48:28 UTC; 17s ago
Main PID: 95898 (snort)
Tasks: 2 (limit: 4579)
Memory: 233.6M
CPU: 2.007s
CGroup: /system.slice/snort3.service
??95898 /usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -i eth0 -m 0x1b -u root -g >
Oct 11 16:48:29 ubuntu2204 snort[95898]: num match states: 9885
Oct 11 16:48:29 ubuntu2204 snort[95898]: memory scale: MB
Oct 11 16:48:29 ubuntu2204 snort[95898]: total memory: 3.42574
Oct 11 16:48:29 ubuntu2204 snort[95898]: pattern memory: 0.550588
Oct 11 16:48:29 ubuntu2204 snort[95898]: match list memory: 1.25256
Oct 11 16:48:29 ubuntu2204 snort[95898]: transition memory: 1.58402
Oct 11 16:48:29 ubuntu2204 snort[95898]: fast pattern only: 6822
Oct 11 16:48:29 ubuntu2204 snort[95898]: --------------------------------------------------
Oct 11 16:48:29 ubuntu2204 snort[95898]: pcap DAQ configurato per passivo.
Oct 11 16:48:29 ubuntu2204 snort[95898]: Inizio del processamento dei pacchettiConclusione
Congratulazioni! hai installato e configurato con successo Snort 3 su Ubuntu 22.04. Ora puoi implementare Snort nella tua organizzazione e proteggerla dagli attacchi DDoS. Sentiti libero di chiedermi se hai domande.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.