Install & Configure Suricata IDS on AlmaLinux 10

By Raman Kumar

Updated on Sep 29, 2025

Learn how to install, configure, and test Suricata IDS on AlmaLinux 10 with practical commands, sample rules, and best practices. Improve network security.

Introduction:

Protecting our network is no longer optional — it’s essential. An Intrusion Detection System (IDS) like Suricata helps us spot threats in real-time, analyze network traffic, and improve security posture. In this guide, we will walk through installing and configuring Suricata on AlmaLinux 10, using practical commands and best practices.

Suricata is an open-source, high-performance IDS/IPS and network security monitoring (NSM) engine. It can inspect live traffic, log network flows, and detect attacks using community-driven rule sets.

Prerequisites

Before we begin, ensure we have the following:

Install & Configure Suricata IDS on AlmaLinux 10

Step 1: Prepare Our AlmaLinux 10 System

Before we install anything, we update our server to ensure the latest security patches are applied.

sudo dnf update -y
sudo dnf install epel-release -y
sudo dnf install jq curl vim -y

Suricata depends on libraries and tools that work best when the system is up to date.

Step 2: Install Suricata

Suricata is available from the official OISF (Open Information Security Foundation) repository. We enable the repository and install the package:

sudo dnf install -y dnf-plugins-core
sudo dnf copr enable @oisf/suricata-8.0
sudo dnf install suricata -y

This gives us the latest stable release directly maintained by the Suricata team.

Step 3: Verify Installation

Let’s confirm Suricata is installed correctly:

suricata --build-info

This command prints the build information and confirms we are using the right version.

Step 4: Enable and Start the Suricata Service

Suricata runs as a systemd service on AlmaLinux. We enable it at boot and start it:

sudo systemctl enable suricata
sudo systemctl start suricata

When we see active (running) in the output, we know Suricata is live.

Step 5: Configure Network Interface

By default, Suricata monitors eth0. If our system uses a different interface, we edit the configuration file:

sudo vim /etc/suricata/suricata.yaml

Find the section:

af-packet:
  - interface: eth0

Replace eth0 with the correct interface name, which we can check using:

ip addr

Step 6: Update and Download Rules

Rules are what make Suricata useful. We fetch the latest Emerging Threats ruleset:

sudo suricata-update
sudo systemctl restart suricata

This ensures our IDS can detect modern threats, not just legacy signatures.

Step 7: Add and Test Sample Suricata Rules

We can create our own rules to detect simple attack patterns. This helps verify that Suricata is running properly.

Create a Custom Rule File

sudo mkdir /etc/suricata/rules
sudo nano /etc/suricata/rules/local.rules

Add these sample rules:

# Detect SSH brute-force attempts (multiple login failures)
alert tcp any any -> any 22 (msg:"Possible SSH Brute-Force"; flow:to_server,established; detection_filter:track by_src, count 5, seconds 60; classtype:attempted-admin; sid:1000001; rev:1;)

# Detect ICMP ping floods (too many pings in short time)
alert icmp any any -> any any (msg:"ICMP Ping Flood Detected"; itype:8; detection_filter:track by_src, count 20, seconds 10; classtype:attempted-dos; sid:1000002; rev:1;)

# Detect access to suspicious .exe files over HTTP
alert http any any -> any any (msg:"Suspicious EXE Download"; content:".exe"; nocase; http_uri; classtype:trojan-activity; sid:1000003; rev:1;)

Save and exit.

Enable the Local Rule File

Open the Suricata configuration file:

sudo nano /etc/suricata/suricata.yaml

Under the rule-files: section, add local.rules:

rule-files:
  - suricata.rules
  - local.rules

Restart Suricata to apply:

sudo systemctl restart suricata

Testing the Rules

SSH brute force test: Try multiple failed SSH login attempts from another machine:

ssh wronguser@<server-ip>

Repeat 5–6 times within a minute.

Ping flood test: From another host, send rapid pings:

ping -f <server-ip>

Suspicious download test: Request a file with .exe in the URL:

curl http://<server-ip>/malicious.exe

Check Suricata logs for alerts:

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

You should see entries like:

09/26/2025-08:30:55.123456  [**] [1:1000001:1] Possible SSH Brute-Force [**] ...

Adding these rules turns the tutorial into a hands-on experience and shows readers how Suricata catches real threats. It also encourages them to experiment with more complex detections and build security awareness.

Step 8: Tune Logging and Performance

Suricata generates multiple log files: fast.log, eve.json, and others. We can choose JSON output for better integration with SIEM tools by editing /etc/suricata/suricata.yaml and enabling eve-log.

For performance, we match the number of Suricata threads to CPU cores:

grep -c ^processor /proc/cpuinfo

Then adjust threads under the af-packet section accordingly.

Step 9: Enable Automatic Rule Updates

Keeping rules fresh is critical. We add a cron job to update them daily:

sudo crontab -e

Add:

0 3 * * * /usr/bin/suricata-update && systemctl restart suricata

This runs every night at 3 AM and keeps detection current.

Step 10: Monitor and Maintain

We regularly check logs and system resource usage:

sudo journalctl -u suricata -f
sudo tail -f /var/log/suricata/eve.json

This ensures our IDS stays healthy and continues protecting the network.

Final Thoughts

Installing Suricata on AlmaLinux 10 gives our infrastructure a serious security upgrade. With regular rule updates, proper tuning, and log monitoring, we gain real-time visibility into malicious activity on our network.