Snort 3 Intrusion Detecting System auf Ubuntu 22.04 installieren und konfigurieren

Snort ist ein Open Source Intrusion Prevention and Detection System (IDS) zur Abwehr von DDoS-Angriffen. Es verwendet eingebaute Regeln, die dabei helfen, bösartige Netzwerkaktivitäten zu definieren, und nutzt diese Regeln, um Pakete zu finden, die mit ihnen übereinstimmen, und generiert Warnungen für die Benutzer. Snort kann die neuesten Angriffe, Malware-Infektionen, kompromittierte Systeme und Verstöße gegen Netzwerkrichtlinien erkennen.

Funktionen

  • Überwachung des Datenverkehrs in Echtzeit.
  • Protokollierung von Paketen. Analyse von Protokollen.
  • Abgleich von Inhalten. OS-Fingerprinting.
  • Es kann in jeder Netzwerkumgebung installiert werden.
  • Erzeugt Protokolle.

In diesem Tutorial zeigen wir dir, wie du Snort unter Ubuntu 22.04 installierst.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 22.04 läuft.
  • Ein Root-Passwort ist auf dem Server konfiguriert.

Erforderliche Abhängigkeiten installieren

Bevor du beginnst, musst du einige Abhängigkeiten auf deinem Server installieren. Du kannst sie alle installieren, indem du den folgenden Befehl ausführst:

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

Sobald alle Abhängigkeiten installiert sind, kannst du mit dem nächsten Schritt fortfahren.

Snort DAQ installieren

Als Nächstes musst du die Datenerfassungsbibliothek auf deinem System installieren. Standardmäßig ist sie nicht im Standard-Repository von Ubuntu verfügbar. Daher musst du sie aus dem Quellcode kompilieren.

Lade zunächst die Snort DAQ mit dem folgenden Befehl von Git herunter:

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

Sobald der Download abgeschlossen ist, navigierst du in das heruntergeladene Verzeichnis und konfigurierst es mit dem folgenden Befehl:

cd libdaq
./bootstrap
./configure

Du solltest die folgende Ausgabe sehen:

    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

Als Nächstes installierst du es mit dem folgenden Befehl:

make
make install

Gperftools installieren

Lade zunächst die neueste Version von Gperftools mit dem folgenden Befehl herunter:

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

Sobald der Download abgeschlossen ist, entpacke die heruntergeladene Datei mit dem folgenden Befehl:

tar xzf gperftools-2.9.1.tar.gz

Gehe dann in das heruntergeladene Verzeichnis und kompiliere sie mit dem folgenden Befehl:

cd gperftools-2.9.1/
./configure

Installiere sie mit dem folgenden Befehl:

make
make install

Snort installieren

Als Nächstes lädst du die neueste Version von Snort mit dem folgenden Befehl herunter:

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

Entpacke die heruntergeladene Datei mit folgendem Befehl:

tar -xvzf 3.1.43.0.tar.gz

Navigiere in das entpackte Verzeichnis und konfiguriere es mit dem folgenden Befehl:

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

Du erhältst die folgende Ausgabe:

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

Wechsle dann in das Build-Verzeichnis und installiere Snort mit dem folgenden Befehl:

cd build
make
make install
ldconfig

Jetzt kannst du die Snort-Version mit folgendem Befehl überprüfen:

snort -V

Du erhältst die folgende Ausgabe:

   ,,_     -*> 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 konfigurieren

Als Erstes musst du deine Netzwerkschnittstelle auf den Promiscuous-Modus einstellen, damit sie den gesamten Netzwerkverkehr sehen kann, der an sie gesendet wird.

Dies kannst du mit dem folgenden Befehl einstellen:

ip link set dev eth0 promisc on

Du kannst ihn mit dem folgenden Befehl überprüfen:

ip add sh eth0

Als Nächstes musst du auch das Interface Offloading deaktivieren. Überprüfe zunächst mit dem folgenden Befehl, ob diese Funktion aktiviert ist oder nicht:

ethtool -k eth0 | grep receive-offload

Du erhältst die folgende Ausgabe:

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

Du kannst sie nun mit dem folgenden Befehl deaktivieren:

ethtool -K eth0 gro off lro off

Erstelle eine Systemd-Dienstdatei für Snort NIC

Als Nächstes musst du eine systemd-Dienstdatei für Snort NIC erstellen.

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

Füge die folgenden Zeilen hinzu:

[Unit]
Description=Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot
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

Speichere und schließe die Datei und lade dann den systemd-Daemon neu, um die Änderungen zu übernehmen:

systemctl daemon-reload

Starte und aktiviere Snort mit dem folgenden Befehl:

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

Du kannst den Status von Snort mit dem folgenden Befehl überprüfen:

systemctl status snort3-nic.service

Du erhältst die folgende Ausgabe:

? snort3-nic.service - Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot
     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 Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot...
Oct 11 16:24:15 ubuntu2204 systemd[1]: Finished Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot.

Snort-Regeln installieren

Regeln sind sehr wichtig für Snorts Intrusion Detection Engine. Erstelle zunächst ein Verzeichnis, in dem alle Regeln gespeichert werden:

mkdir /usr/local/etc/rules

Als Nächstes lädst du die Community-Regeln mit dem folgenden Befehl herunter:

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

Als Nächstes bearbeitest du die Hauptkonfigurationsdatei von Snort:

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

Definiere dein Netzwerk wie unten gezeigt:

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

Als Nächstes legst du den Pfad für deine Snort-Regeln fest:

ips =
{
    -- use this to enable decoder and inspector alerts
    --enable_builtin_rules = true,

    -- use include for rules files; be sure to set your path
    -- note that rules files can include other rules files
    -- (see also related path vars at the top of snort_defaults.lua)

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

}

Speichere und schließe die Datei, wenn du fertig bist.

Installiere Snort OpenAppID

OpenAppID ist ein Plugin, mit dem Snort verschiedene Anwendungen wie Facebook, Netflix, Twitter und Reddit, die im Netzwerk verwendet werden, erkennen kann.

Du kannst es mit dem folgenden Befehl herunterladen:

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

Sobald der Download abgeschlossen ist, extrahiere die heruntergeladene Datei mit dem folgenden Befehl:

tar -xzvf OpenAppId-26425.tgz

Als Nächstes kopierst du die OpenAppID-Binärdatei in das Systemverzeichnis:

cp -R odp /usr/local/lib/

Als Nächstes bearbeitest du die Snort-Konfigurationsdatei und definierst deinen OpenAppID-Speicherort:

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

Ändere die folgenden Zeilen:

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

}

Speichere und schließe die Datei und erstelle dann ein Snort-Protokollverzeichnis:

mkdir /var/log/snort

Überprüfe abschließend die Snort-Konfigurationsdatei mit dem folgenden Befehl:

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

Wenn alles in Ordnung ist, erhältst du die folgende Ausgabe:

--------------------------------------------------
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 successfully validated the configuration (with 0 warnings).
o")~   Snort exiting

Benutzerdefinierte Snort-Regeln erstellen

Du kannst auch deine eigenen Regeln nach deinen Bedürfnissen erstellen. Lass uns eine benutzerdefinierte Regel für eingehende ICMP-Anfragen erstellen:

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

Füge die folgende Zeile ein:

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

Als Nächstes überprüfst du die Regeln mit dem folgenden Befehl:

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

Du erhältst die folgende Ausgabe:

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 successfully validated the configuration (with 0 warnings).
o")~   Snort exiting

Als Nächstes führst du den folgenden Befehl aus, um Snort auf deiner Netzwerkschnittstelle mit deinen benutzerdefinierten Regeln zu starten:

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

Öffne als Nächstes eine andere Terminalschnittstelle und pinge deinen Server an. Du solltest den ICMP-Fehler auf dem ersten Terminal sehen:

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

Erstelle eine Systemd-Dienstdatei für Snort

Als Nächstes erstellst du eine systemd-Dienstdatei, um den Snort über systemd zu verwalten.

nano /etc/systemd/system/snort3.service

Füge die folgenden Konfigurationen hinzu:

[Unit]
Description=Snort Daemon
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

Speichere und schließe die Datei und lade dann den systemd-Daemon mit dem folgenden Befehl neu:

systemctl daemon-reload

Starte und aktiviere den Snort-Dienst mit dem folgenden Befehl:

systemctl enable --now snort3

Jetzt kannst du den Status von Snort mit folgendem Befehl überprüfen:

systemctl status snort3

Du erhältst die folgende Ausgabe:

? snort3.service - Snort Daemon
     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

Schlussfolgerung

Glückwunsch! Du hast Snort 3 unter Ubuntu 22.04 erfolgreich installiert und konfiguriert. Jetzt kannst du Snort in deinem Unternehmen einsetzen und es vor DDoS-Angriffen schützen. Wenn du noch Fragen hast, kannst du dich gerne an mich wenden.

Das könnte dich auch interessieren …