So installierst du Suricata IDS auf Ubuntu 22.04

Suricata ist eine freie und quelloffene Software zur Netzwerkanalyse und Bedrohungserkennung, die von OSIF entwickelt wurde. Sie kann als Intrusion Detection System (IDS) und als Intrusion Prevention System (IPS) eingesetzt werden. Es verwendet einen Regelsatz und eine Signatursprache, um Bedrohungen zu erkennen und zu verhindern. Es ist eine Alternative zu Snort und kann aus der Sicherheitsperspektive einen guten Einblick in das Geschehen in deinem Netzwerk geben.

In diesem Tutorial zeige ich dir, wie du Suricata auf einem Ubuntu 22.04 Server installierst.

Voraussetzungen

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

Erste Schritte

Bevor du beginnst, solltest du deine Systempakete auf die neueste Version aktualisieren. Du kannst alle Pakete aktualisieren, indem du den folgenden Befehl ausführst:

apt update -y
apt upgrade -y

Sobald alle Pakete aktualisiert sind, führst du den folgenden Befehl aus, um alle erforderlichen Abhängigkeiten zu installieren:

apt install libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev libcap-ng0 make libmagic-dev libjansson-dev libjansson4 pkg-config libnspr4-dev libnss3-dev liblz4-dev rustc cargo python3-pip python3-distutils
apt install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0

Wenn du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Suricata aus der Quelle installieren

Lade zunächst die neueste Version von Suricata mit folgendem Befehl herunter:

wget https://www.openinfosecfoundation.org/download/suricata-6.0.8.tar.gz

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

tar xzf suricata-6.0.8.tar.gz

Als Nächstes navigierst du zu dem entpackten Verzeichnis und konfigurierst es mit dem folgenden Befehl:

cd suricata-6.0.8
./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var

Du erhältst die folgende Ausgabe:

  Host:                                    x86_64-pc-linux-gnu
  Compiler:                                gcc (exec name) / g++ (real)
  GCC Protect enabled:                     no
  GCC march native enabled:                yes
  GCC Profile enabled:                     no
  Position Independent Executable enabled: no
  CFLAGS                                   -g -O2 -std=c11 -march=native -I${srcdir}/../rust/gen -I${srcdir}/../rust/dist
  PCAP_CFLAGS                               -I/usr/include
  SECCFLAGS                                

To build and install run 'make' and 'make install'.

You can run 'make install-conf' if you want to install initial configuration
files to /etc/suricata/. Running 'make install-full' will install configuration
and rules and provide you a ready-to-run suricata.

To install Suricata into /usr/bin/suricata, have the config in
/etc/suricata and use /var/log/suricata as log dir, use:
./configure --prefix=/usr/ --sysconfdir=/etc/ --localstatedir=/var/

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

make
make install-full

Du erhältst die folgende Ausgabe:

You can now start suricata by running as root something like:
  /usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0

If a library like libhtp.so is not found, you can run suricata with:
  LD_LIBRARY_PATH=/usr/lib /usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0

The Emerging Threats Open rules are now installed. Rules can be
updated and managed with the suricata-update tool.

For more information please see:
  https://suricata.readthedocs.io/en/latest/rule-management/index.html

make[1]: Leaving directory '/root/suricata-6.0.8'

Suricata aus dem Ubuntu-Repository installieren

Du kannst Suricata auch aus dem Ubuntu Repository installieren. Installiere zunächst alle Abhängigkeiten mit dem folgenden Befehl:

apt install gnupg2 software-properties-common curl wget git unzip -y

Als Nächstes fügst du das Suricata-Repository mit dem folgenden Befehl hinzu:

add-apt-repository ppa:oisf/suricata-stable --yes

Aktualisiere den Cache des Repositorys mit dem folgenden Befehl:

apt update

Verifiziere das Suricata-Paket mit dem folgenden Befehl:

apt-cache policy suricata

Du erhältst die folgende Ausgabe:

suricata:
  Installed: (none)
  Candidate: 1:6.0.4-3
  Version table:
     1:6.0.4-3 500
        500 http://us.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages

Zum Schluss installierst du Suricata mit dem folgenden Befehl:

apt install suricata jq

Jetzt kannst du die Suricata-Paketinformationen mit folgendem Befehl überprüfen:

suricata --build-info

Du solltest die folgende Ausgabe erhalten:

This is Suricata version 6.0.8 RELEASE
Features: NFQ PCAP_SET_BUFF AF_PACKET HAVE_PACKET_FANOUT LIBCAP_NG LIBNET1.1 HAVE_HTP_URI_NORMALIZE_HOOK PCRE_JIT HAVE_NSS HAVE_LIBJANSSON TLS TLS_C11 MAGIC RUST 
SIMD support: SSE_3 
Atomic intrinsics: 1 2 4 8 16 byte(s)
64-bits, Little-endian architecture
GCC version 11.2.0, C version 201112
compiled with _FORTIFY_SOURCE=2
L1 cache line size (CLS)=64
thread local storage method: _Thread_local
compiled with LibHTP v0.5.41, linked against LibHTP v0.5.41

Suricata Configuration:
  AF_PACKET support:                       yes
  eBPF support:                            no
  XDP support:                             no
  PF_RING support:                         no
  NFQueue support:                         yes
  NFLOG support:                           no
  IPFW support:                            no
  Netmap support:                          no 
  DAG enabled:                             no
  Napatech enabled:                        no
  WinDivert enabled:                       no

  Unix socket enabled:                     yes
  Detection enabled:                       yes

Suricata konfigurieren

Als nächstes bearbeitest du die Suricata-Konfigurationsdatei und definierst deine Netzwerkschnittstelle und dein Netzwerk:

nano /etc/suricata/suricata.yaml

Ändere die folgenden Zeilen:

    HOME_NET: "[10.0.2.0/24]"

    EXTERNAL_NET: "!$HOME_NET"

af-packet:
  - interface: eth0
#        - sip
    sip:
    enabled: no

Speichere und schließe die Datei und aktualisiere die Suricata-Konfiguration mit dem folgenden Befehl:

suricata-update

Überprüfe anschließend die Suricata-Konfigurationsdatei mit folgendem Befehl:

suricata -T -c /etc/suricata/suricata.yaml -v

Du erhältst die folgende Ausgabe:

18/10/2022 -- 13:45:14 -  - fast output device (regular) initialized: fast.log
18/10/2022 -- 13:45:14 -  - eve-log output device (regular) initialized: eve.json
18/10/2022 -- 13:45:14 -  - stats output device (regular) initialized: stats.log
18/10/2022 -- 13:45:14 -  - SSSE3 support not detected, disabling Hyperscan for SPM
18/10/2022 -- 13:45:16 -  - 1 rule files processed. 28624 rules successfully loaded, 0 rules failed
18/10/2022 -- 13:45:16 -  - Threshold config parsed: 0 rule(s) found
18/10/2022 -- 13:45:16 -  - 28627 signatures processed. 1219 are IP-only rules, 5166 are inspecting packet payload, 22038 inspect application layer, 108 are decoder event only
18/10/2022 -- 13:45:19 -  - Configuration provided was successfully loaded. Exiting.
18/10/2022 -- 13:45:19 -  - cleaning up signature grouping structure... complete

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

systemctl enable --now suricata

Du kannst den Suricata-Dienst auch mit dem folgenden Befehl überprüfen:

systemctl status suricata

Du solltest die folgende Ausgabe sehen:

? suricata.service - LSB: Next Generation IDS/IPS
     Loaded: loaded (/etc/init.d/suricata; generated)
     Active: active (running) since Tue 2022-10-18 13:38:52 UTC; 6min ago
       Docs: man:systemd-sysv-generator(8)
    Process: 16504 ExecStart=/etc/init.d/suricata start (code=exited, status=0/SUCCESS)
      Tasks: 7 (limit: 2242)
     Memory: 40.0M
        CPU: 4.073s
     CGroup: /system.slice/suricata.service
             ??16514 /usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid --af-packet -D -vvv

Oct 18 13:38:52 ubuntu2204 systemd[1]: Starting LSB: Next Generation IDS/IPS...
Oct 18 13:38:52 ubuntu2204 suricata[16504]: Starting suricata in IDS (af-packet) mode... done.
Oct 18 13:38:52 ubuntu2204 systemd[1]: Started LSB: Next Generation IDS/IPS.

Mit dem folgenden Befehl kannst du auch die verschiedenen Ausführungsmodi sehen:

suricata --list-runmodes

Du erhältst die folgende Ausgabe:

------------------------------------- Runmodes ------------------------------------------
| RunMode Type      | Custom Mode       | Description 
|----------------------------------------------------------------------------------------
| PCAP_DEV          | single            | Single threaded pcap live mode 
|                   ---------------------------------------------------------------------
|                   | autofp            | Multi threaded pcap live mode.  Packets from each flow are assigned to a single detect thread, unlike "pcap_live_auto" where packets from the same flow can be processed by any detect thread 
|                   ---------------------------------------------------------------------
|                   | workers           | Workers pcap live mode, each thread does all tasks from acquisition to logging 
|----------------------------------------------------------------------------------------
| PCAP_FILE         | single            | Single threaded pcap file mode 
|                   ---------------------------------------------------------------------
|                   | autofp            | Multi threaded pcap file mode.  Packets from each flow are assigned to a single detect thread, unlike "pcap-file-auto" where packets from the same flow can be processed by any detect thread 
|----------------------------------------------------------------------------------------
| PFRING(DISABLED)  | autofp            | Multi threaded pfring mode.  Packets from each flow are assigned to a single detect thread, unlike "pfring_auto" where packets from the same flow can be processed by any detect thread 
|                   ---------------------------------------------------------------------
|                   | single            | Single threaded pfring mode 
|                   ---------------------------------------------------------------------
|                   | workers           | Workers pfring mode, each thread does all tasks from acquisition to logging 
|----------------------------------------------------------------------------------------

Verify Suricata

Bevor du Suricata überprüfst, musst du die Packet Offload Funktionen auf der Netzwerkschnittstelle deaktivieren.

Du kannst sie mit dem folgenden Befehl deaktivieren:

ethtool -K eth0 gro off lro off

Als Nächstes stoppst du Suricata mit dem folgenden Befehl:

systemctl stop suricata
rm -rf /var/run/suricata.pid

Starte Suricata dann manuell mit folgendem Befehl:

suricata -D -c /etc/suricata/suricata.yaml -i eth0

Als Nächstes loggst du dich auf dem entfernten System ein und führst den Befehl hping3 aus, um einen einfachen DDoS-Angriff gegen den Suricata-Server durchzuführen:

hping3 -S -p 80 --flood --rand-source suricata-ip -I eth0 -c 50

Als Nächstes gehst du zurück zum Suricata-Server und überprüfst die Suricata-Logdatei:

tail -f /var/log/suricata/fast.log

Du solltest die folgende Ausgabe sehen:

10/18/2022-14:01:38.569298  [**] [1:2210008:2] SURICATA STREAM 3way handshake SYN resend different seq on SYN recv [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 157.32.37.21:59188 -> 209.23.10.188:80
10/18/2022-14:01:38.569304  [**] [1:2210004:2] SURICATA STREAM 3way handshake SYNACK resend with different ack [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 209.23.10.188:80 -> 157.32.37.21:59188
10/18/2022-14:01:38.569649  [**] [1:2210008:2] SURICATA STREAM 3way handshake SYN resend different seq on SYN recv [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 157.32.37.21:53343 -> 209.23.10.188:80
10/18/2022-14:01:38.569655  [**] [1:2210004:2] SURICATA STREAM 3way handshake SYNACK resend with different ack [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 209.23.10.188:80 -> 157.32.37.21:53343
10/18/2022-14:01:38.570762  [**] [1:2210008:2] SURICATA STREAM 3way handshake SYN resend different seq on SYN recv [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 157.32.37.21:62070 -> 209.23.10.188:80
10/18/2022-14:01:38.570770  [**] [1:2210004:2] SURICATA STREAM 3way handshake SYNACK resend with different ack [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 209.23.10.188:80 -> 157.32.37.21:62070
10/18/2022-14:01:38.571748  [**] [1:2210008:2] SURICATA STREAM 3way handshake SYN resend different seq on SYN recv [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 157.32.37.21:5001 -> 209.23.10.188:80

Fazit

In diesem Beitrag hast du gelernt, wie du Suricata auf Ubuntu 22.04 installierst. Jetzt kannst du Suricata in deinem Unternehmen einsetzen, um deine Server vor DDoS-Angriffen zu schützen. Wenn du noch Fragen hast, kannst du dich gerne an mich wenden.

Das könnte dich auch interessieren …