Segurança de Rede · 10 min read · Jan 10, 2026
Instalar e Configurar o Sistema de Detecção de Intrusões Snort 3 no Ubuntu 22.04

Snort é um Sistema de Prevenção e Detecção de Intrusões (IDS) de Código Aberto para se defender contra ataques DDoS. Ele usa regras internas que ajudam a definir atividades de rede maliciosas e usa essas regras para encontrar pacotes que correspondem a elas e gera alertas para os usuários. O Snort pode identificar os últimos ataques, infecções por malware, sistemas comprometidos e violações de políticas de rede.
Recursos
- Monitoramento de tráfego em tempo real.
- Registro de pacotes. Análise de protocolo.
- Correspondência de conteúdo. Impressão digital do SO.
- Pode ser instalado em qualquer ambiente de rede.
- Cria logs.
Neste tutorial, mostraremos como instalar o Snort no Ubuntu 22.04.
Pré-requisitos
- Um servidor executando Ubuntu 22.04.
- Uma senha de root configurada no servidor.
Instalar Dependências Necessárias
Antes de começar, você precisará instalar algumas dependências em seu servidor. Você pode instalar todas elas executando o seguinte 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 -yUma vez que todas as dependências estejam instaladas, você pode prosseguir para a próxima etapa.
Instalar Snort DAQ
Em seguida, você precisará instalar a biblioteca de Aquisição de Dados em seu sistema. Por padrão, ela não está disponível no repositório padrão do Ubuntu. Portanto, você precisará compilá-la a partir do código-fonte.
Primeiro, baixe o Snort DAQ do Git com o seguinte comando:
git clone https://github.com/snort3/libdaq.gitUma vez que o download esteja completo, navegue até o diretório baixado e configure-o com o seguinte comando:
cd libdaq
./bootstrap
./configureVocê deve ver a seguinte saída:
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...... : yesEm seguida, instale-o com o seguinte comando:
make
make installInstalar Gperftools
Primeiro, baixe a versão mais recente do Gperftools com o seguinte comando:
cd
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2.9.1.tar.gzUma vez que o download esteja completo, extraia o arquivo baixado com o seguinte comando:
tar xzf gperftools-2.9.1.tar.gzEm seguida, navegue até o diretório baixado e compile-o com o seguinte comando:
cd gperftools-2.9.1/
./configureEm seguida, instale-o com o seguinte comando:
make
make installInstalar Snort
Em seguida, baixe a versão mais recente do Snort com o seguinte comando:
cd
wget https://github.com/snort3/snort3/archive/refs/tags/3.1.43.0.tar.gzEm seguida, extraia o arquivo baixado com o seguinte comando:
tar -xvzf 3.1.43.0.tar.gzEm seguida, navegue até o diretório extraído e configure-o com o seguinte comando:
cd snort3-3.1.43.0
./configure_cmake.sh --prefix=/usr/local --enable-tcmallocVocê receberá a seguinte saída:
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/buildEm seguida, mude o diretório para o diretório de construção e instale o Snort com o seguinte comando:
cd build
make
make install
ldconfigAgora você pode verificar a versão do Snort usando o seguinte comando:
snort -VVocê receberá a seguinte saída:
,,_ -*> 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.5Configurar Snort
Primeiro, você precisará definir sua interface de rede em modo promíscuo para que ela possa ver todo o tráfego de rede enviado a ela.
Você pode configurá-la usando o seguinte comando:
ip link set dev eth0 promisc onAgora você pode verificar com o seguinte comando:
ip add sh eth0Em seguida, você também precisará desativar o Offloading da Interface. Primeiro, verifique se esse recurso está habilitado ou não usando o seguinte comando:
ethtool -k eth0 | grep receive-offloadVocê receberá a seguinte saída:
generic-receive-offload: on
large-receive-offload: off [fixed]Agora você pode desativá-lo usando o seguinte comando:
ethtool -K eth0 gro off lro offCriar um Arquivo de Serviço Systemd para o NIC do Snort
Em seguida, você precisará criar um arquivo de serviço systemd para o NIC do Snort.
nano /etc/systemd/system/snort3-nic.serviceAdicione as seguintes linhas:
[Unit]
Description=Definir o NIC do Snort 3 em modo promíscuo e desativar GRO, LRO na inicialização
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.targetSalve e feche o arquivo, em seguida, recarregue o daemon systemd para aplicar as alterações:
systemctl daemon-reloadEm seguida, inicie e habilite o Snort com o seguinte comando:
systemctl start snort3-nic.service
systemctl enable snort3-nic.serviceVocê pode verificar o status do Snort com o seguinte comando:
systemctl status snort3-nic.serviceVocê receberá a seguinte saída:
? snort3-nic.service - Definir o NIC do Snort 3 em modo promíscuo e desativar GRO, LRO na inicialização
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 Definir o NIC do Snort 3 em modo promíscuo e desativar GRO, LRO na inicialização...
Oct 11 16:24:15 ubuntu2204 systemd[1]: Finished Definir o NIC do Snort 3 em modo promíscuo e desativar GRO, LRO na inicialização.Instalar Regras do Snort
As regras são muito importantes para o mecanismo de detecção de intrusões do Snort. Primeiro, crie um diretório para armazenar todas as regras:
mkdir /usr/local/etc/rulesEm seguida, baixe as regras da comunidade com o seguinte comando:
wget -qO- https://www.snort.org/downloads/community/snort3-community-rules.tar.gz | tar xz -C /usr/local/etc/rules/Em seguida, edite o arquivo de configuração principal do Snort:
nano /usr/local/etc/snort/snort.luaDefina sua rede como mostrado abaixo:
HOME_NET = '192.168.56.124/32'
EXTERNAL_NET = '!$HOME_NET'Em seguida, defina o caminho das regras do Snort:
ips =
{
-- use isso para habilitar alertas de decodificador e inspetor
--enable_builtin_rules = true,
-- use include para arquivos de regras; certifique-se de definir seu caminho
-- note que arquivos de regras podem incluir outros arquivos de regras
-- (veja também as variáveis de caminho relacionadas no topo do snort_defaults.lua)
variables = default_variables,
rules = [[
include /usr/local/etc/rules/snort3-community-rules/snort3-community.rules
]]
}Salve e feche o arquivo quando terminar.
Instalar Snort OpenAppID
OpenAppID é um plugin que permite que o Snort detecte vários aplicativos, Facebook, Netflix, Twitter e Reddit, usados na rede.
Você pode baixá-lo com o seguinte comando:
wget https://www.snort.org/downloads/openappid/26425 -O OpenAppId-26425.tgzUma vez que o download esteja completo, extraia o arquivo baixado com o seguinte comando:
tar -xzvf OpenAppId-26425.tgzEm seguida, copie o arquivo binário do OpenAppID para o diretório do sistema:
cp -R odp /usr/local/lib/Em seguida, edite o arquivo de configuração do Snort e defina sua localização do OpenAppID:
nano /usr/local/etc/snort/snort.luaAltere as seguintes linhas:
appid =
{
app_detector_dir = '/usr/local/lib',
log_stats = true,
}Salve e feche o arquivo, em seguida, crie um diretório de log do Snort:
mkdir /var/log/snortFinalmente, verifique o arquivo de configuração do Snort com o seguinte comando:
snort -c /usr/local/etc/snort/snort.luaSe tudo estiver bem, você receberá a seguinte saída:
--------------------------------------------------
friendly 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 configurado para passivo.
Snort validou com sucesso a configuração (com 0 avisos).
o")~ Saindo do SnortCriar Regras Personalizadas do Snort
Você também pode criar suas próprias regras personalizadas conforme sua necessidade. Vamos criar uma regra personalizada para solicitações ICMP de entrada:
nano /usr/local/etc/rules/local.rulesAdicione a seguinte linha:
alert icmp any any -> $HOME_NET any (msg:"Teste de conexão ICMP"; sid:1000001; rev:1;)Em seguida, verifique as regras com o seguinte comando:
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rulesVocê receberá a seguinte saída:
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 configurado para passivo.
Snort validou com sucesso a configuração (com 0 avisos).
o")~ Saindo do SnortEm seguida, execute o seguinte comando para iniciar o Snort em sua interface de rede usando suas regras personalizadas:
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i eth0 -A alert_fast -s 65535 -k noneEm seguida, abra outra interface de terminal e faça ping em seu servidor. Você deve ver o erro ICMP no primeiro terminal:
10/11-16:45:23.848071 [] [1:1000001:1] "Teste de conexão ICMP" [] [Prioridade: 0] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:23.848071 [] [1:384:8] "PROTOCOL-ICMP PING" [] [Classificação: Atividade diversa] [Prioridade: 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" [] [Classificação: Atividade diversa] [Prioridade: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:24.323038 [] [1:1000001:1] "Teste de conexão ICMP" [] [Prioridade: 0] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:24.323038 [] [1:384:8] "PROTOCOL-ICMP PING" [] [Classificação: Atividade diversa] [Prioridade: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
^C sinal de interrupção capturado
== parando
10/11-16:45:25.353007 [] [1:366:11] "PROTOCOL-ICMP PING Unix" [] [Classificação: Atividade diversa] [Prioridade: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:25.353007 [] [1:1000001:1] "Teste de conexão ICMP" [] [Prioridade: 0] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:25.353007 [] [1:384:8] "PROTOCOL-ICMP PING" [**] [Classificação: Atividade diversa] [Prioridade: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18Criar um Arquivo de Serviço Systemd para o Snort
Em seguida, crie um arquivo de serviço systemd para gerenciar o Snort via systemd.
nano /etc/systemd/system/snort3.serviceAdicione as seguintes configurações:
[Unit]
Description=Daemon do 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.targetSalve e feche o arquivo, em seguida, recarregue o daemon systemd com o seguinte comando:
systemctl daemon-reloadEm seguida, inicie e habilite o serviço Snort com o seguinte comando:
systemctl enable --now snort3Agora você pode verificar o status do Snort usando o seguinte comando:
systemctl status snort3Você receberá a seguinte saída:
? snort3.service - Daemon do 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 configurado para passivo.
Oct 11 16:48:29 ubuntu2204 snort[95898]: Iniciando o processamento de pacotesConclusão
Parabéns! você instalou e configurou com sucesso o Snort 3 no Ubuntu 22.04. Agora você pode implementar o Snort em sua organização e protegê-la contra ataques DDoS. Sinta-se à vontade para me perguntar se você tiver alguma dúvida.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.