Безопасность · 9 min read · Jan 10, 2026

Установка и настройка системы обнаружения вторжений Snort 3 на Ubuntu 22.04

Snort — это система предотвращения и обнаружения вторжений с открытым исходным кодом (IDS), предназначенная для защиты от DDoS-атак. Она использует встроенные правила, которые помогают определить злонамеренную сетевую активность, и использует эти правила для поиска пакетов, соответствующих им, и генерирует оповещения для пользователей. Snort может идентифицировать последние атаки, инфекции вредоносным ПО, скомпрометированные системы и нарушения сетевой политики.

Особенности

  • Мониторинг трафика в реальном времени.
  • Логирование пакетов. Анализ протоколов.
  • Сопоставление содержимого. Определение ОС.
  • Может быть установлен в любой сетевой среде.
  • Создает логи.

В этом руководстве мы покажем вам, как установить Snort на Ubuntu 22.04.

Предварительные требования

  • Сервер с установленной Ubuntu 22.04.
  • Настроенный пароль root на сервере.

Установка необходимых зависимостей

Перед началом вам нужно будет установить некоторые зависимости на вашем сервере. Вы можете установить их все, выполнив следующую команду:

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 -y

После установки всех зависимостей вы можете перейти к следующему шагу.

Установка Snort DAQ

Далее вам нужно будет установить библиотеку Data Acquisition на вашу систему. По умолчанию она недоступна в стандартном репозитории Ubuntu. Поэтому вам нужно будет скомпилировать ее из исходников.

Сначала загрузите Snort DAQ из Git с помощью следующей команды:

git clone https://github.com/snort3/libdaq.git

После завершения загрузки перейдите в загруженный каталог и настройте его с помощью следующей команды:

cd libdaq  
./bootstrap  
./configure

Вы должны увидеть следующий вывод:

    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...... : yes

Далее установите его с помощью следующей команды:

make  
make install

Установка Gperftools

Сначала загрузите последнюю версию Gperftools с помощью следующей команды:

cd  
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2.9.1.tar.gz

После завершения загрузки извлеките загруженный файл с помощью следующей команды:

tar xzf gperftools-2.9.1.tar.gz

Далее перейдите в загруженный каталог и скомпилируйте его с помощью следующей команды:

cd gperftools-2.9.1/  
./configure

Далее установите его с помощью следующей команды:

make  
make install

Установка Snort

Далее загрузите последнюю версию Snort с помощью следующей команды:

cd  
wget https://github.com/snort3/snort3/archive/refs/tags/3.1.43.0.tar.gz

Далее извлеките загруженный файл с помощью следующей команды:

tar -xvzf 3.1.43.0.tar.gz

Далее перейдите в извлеченный каталог и настройте его с помощью следующей команды:

cd snort3-3.1.43.0  
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc

Вы получите следующий вывод:

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/build

Далее измените каталог на каталог сборки и установите Snort с помощью следующей команды:

cd build  
make  
make install  
ldconfig

Теперь вы можете проверить версию Snort, используя следующую команду:

snort -V

Вы получите следующий вывод:

   ,,_     -*> 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.5

Настройка Snort

Сначала вам нужно будет установить ваш сетевой интерфейс в режим промискуитета, чтобы он мог видеть весь сетевой трафик, отправляемый на него.

Вы можете установить его с помощью следующей команды:

ip link set dev eth0 promisc on

Теперь вы можете проверить это с помощью следующей команды:

ip add sh eth0

Далее вам также нужно будет отключить Offloading интерфейса. Сначала проверьте, включена ли эта функция, используя следующую команду:

ethtool -k eth0 | grep receive-offload

Вы получите следующий вывод:

generic-receive-offload: on
large-receive-offload: off [fixed]

Теперь вы можете отключить его с помощью следующей команды:

ethtool -K eth0 gro off lro off

Создание файла службы Systemd для Snort NIC

Далее вам нужно будет создать файл службы systemd для Snort NIC.

nano /etc/systemd/system/snort3-nic.service

Добавьте следующие строки:

[Unit]
Description=Установить Snort 3 NIC в режим промискуитета и отключить GRO, LRO при загрузке
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.target

Сохраните и закройте файл, затем перезагрузите демон systemd, чтобы применить изменения:

systemctl daemon-reload

Далее запустите и включите Snort с помощью следующей команды:

systemctl start snort3-nic.service  
systemctl enable snort3-nic.service

Вы можете проверить статус Snort с помощью следующей команды:

systemctl status snort3-nic.service

Вы получите следующий вывод:

? snort3-nic.service - Установить Snort 3 NIC в режим промискуитета и отключить GRO, LRO при загрузке
     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 Установить Snort 3 NIC в режим промискуитета и отключить GRO, LRO при загрузке...
Oct 11 16:24:15 ubuntu2204 systemd[1]: Finished Установить Snort 3 NIC в режим промискуитета и отключить GRO, LRO при загрузке.

Установка правил Snort

Правила очень важны для движка обнаружения вторжений Snort. Сначала создайте каталог для хранения всех правил:

mkdir /usr/local/etc/rules

Далее загрузите правила сообщества с помощью следующей команды:

wget -qO- https://www.snort.org/downloads/community/snort3-community-rules.tar.gz | tar xz -C /usr/local/etc/rules/

Далее отредактируйте основной файл конфигурации Snort:

nano /usr/local/etc/snort/snort.lua

Определите вашу сеть, как показано ниже:

HOME_NET = '192.168.56.124/32'
EXTERNAL_NET = '!$HOME_NET'

Далее определите путь к вашим правилам Snort:

ips =
{
    -- используйте это для включения оповещений декодера и инспектора
    --enable_builtin_rules = true,

    -- используйте include для файлов правил; обязательно установите ваш путь
    -- обратите внимание, что файлы правил могут включать другие файлы правил
    -- (см. также связанные переменные пути в верхней части snort_defaults.lua)

    variables = default_variables,
    rules = [[
    include /usr/local/etc/rules/snort3-community-rules/snort3-community.rules
    ]]

}

Сохраните и закройте файл, когда закончите.

Установка Snort OpenAppID

OpenAppID — это плагин, который позволяет Snort обнаруживать различные приложения, такие как Facebook, Netflix, Twitter и Reddit, используемые в сети.

Вы можете загрузить его с помощью следующей команды:

wget https://www.snort.org/downloads/openappid/26425 -O OpenAppId-26425.tgz

После завершения загрузки извлеките загруженный файл с помощью следующей команды:

tar -xzvf OpenAppId-26425.tgz

Далее скопируйте бинарный файл OpenAppID в системный каталог:

cp -R odp /usr/local/lib/

Далее отредактируйте файл конфигурации Snort и определите ваше местоположение OpenAppID:

nano /usr/local/etc/snort/snort.lua

Измените следующие строки:

appid =
{
    app_detector_dir = '/usr/local/lib',
    log_stats = true,

}

Сохраните и закройте файл, затем создайте каталог логов Snort:

mkdir /var/log/snort

Наконец, проверьте файл конфигурации Snort с помощью следующей команды:

snort -c /usr/local/etc/snort/snort.lua

Если все в порядке, вы получите следующий вывод:

--------------------------------------------------
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 configured to passive.

Snort успешно проверил конфигурацию (с 0 предупреждениями).
o")~   Snort exiting

Создание пользовательских правил Snort

Вы также можете создать свои собственные пользовательские правила в соответствии с вашими требованиями. Давайте создадим пользовательское правило для входящего ICMP-запроса:

nano /usr/local/etc/rules/local.rules

Добавьте следующую строку:

alert icmp any any -> $HOME_NET any (msg:"ICMP connection test"; sid:1000001; rev:1;)

Далее проверьте правила с помощью следующей команды:

snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules

Вы получите следующий вывод:

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 configured to passive.

Snort успешно проверил конфигурацию (с 0 предупреждениями).
o")~   Snort exiting

Далее выполните следующую команду, чтобы запустить Snort на вашем сетевом интерфейсе, используя ваши пользовательские правила:

snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i eth0 -A alert_fast -s 65535 -k none

Далее откройте другой терминал и выполните ping на ваш сервер. Вы должны увидеть ICMP-ошибку в первом терминале:

10/11-16:45:23.848071 [] [1:1000001:1] "ICMP connection test" [] [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] "ICMP connection test" [] [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 caught int signal
== stopping
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] "ICMP connection test" [] [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.18

Создание файла службы Systemd для Snort

Далее создайте файл службы systemd для управления Snort через systemd.

nano /etc/systemd/system/snort3.service

Добавьте следующие конфигурации:

[Unit]
Description=Демон 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.target

Сохраните и закройте файл, затем перезагрузите демон systemd с помощью следующей команды:

systemctl daemon-reload

Далее запустите и включите службу Snort с помощью следующей команды:

systemctl enable --now snort3

Теперь вы можете проверить статус Snort с помощью следующей команды:

systemctl status snort3

Вы получите следующий вывод:

? snort3.service - Демон 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 configured to passive.
Oct 11 16:48:29 ubuntu2204 snort[95898]: Commencing packet processing

Заключение

Поздравляем! Вы успешно установили и настроили Snort 3 на Ubuntu 22.04. Теперь вы можете внедрить Snort в вашу организацию и защитить ее от DDoS-атак. Не стесняйтесь задавать мне вопросы, если у вас есть какие-либо.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.