david dominguez 😺

Suricata - Intro

Apr 28, 2026

Why did I build a Suricata signature?


Idk man, its just a random switchup from the rest of all my other projects to experiment and learn something new. I’m sure I will explore more but I just wanted to start with something fresh and play around, it’s fun to push my own limits to see what I can pick up and learn within an hour or two. This is essentially just the documentation of my experience for that hour or two of learning.

What is Suricata anyway?


Suricata itself is an open source engine that provides support as an Intrusion Detection System (IDS), Intrusion Prevention System (IPS), and Network Security Monitoring platform. There is readily available documentation that I read through during my learning. A lot of what I’m describing during this post can be found freely via Suricata documentation.

Suricata v SIEM


Building a Suricata signature is targeted to network traffic, and nothing else. SIEM detections can range from any aspect, from network to endpoint to cloud.

SIEM detections in general are only good based on how concise you can scope it to threat actor activity, but this is contingent on good data/logs coming into the SIEM. Additionally, SIEMs cost money not only from an operational, day to day human perspective, but also from a licensing perspective, which typically isn’t a small cost many companies or organizations can readily invest.

Considering the Suricata engine is open source, these signatures can be considered more universally available for organizations to leverage and take advantage of them.

Signature Structure


To be clear, the way I describe the signature structure is similar to how Suricata docs mention it at a higher level, and I would also like to use this to explain it more. The way I’ll explain it is trying via questions to get you to dig more and identify the relevant information you need for your signature. For more information and details, see the Suricata documentation on rule structure here

The structure is dependent upon a few key sections:

  1. Action: What do you want this signature to do if your criteria matches against network traffic? Do you want it to build an alert? Drop the packet? Your answer will dictate what action you put here.
  2. Header: Now you want to start to dig. What is it, from a very broad perspective, do you want this signature to capture? You’ll need to define protocol, source and destination IPs, ports, and direction. Are you targeting SMTP traffic, or HTTP traffic? Are you targeting traffic against a very specific IP? Are you trying to highlight outbound or bidirectional traffic?
  3. Rule Options: These are very broad and include various fields you can include here, but one main thing I want to call attention to is that this is where you get very specific from a signature standpoint. Dig deep into making sure that you exhaust as many options as possible to scope down the traffic you’re trying to identify against, here.

My Signature


alert http any any <> 146.190.62.39 80 (msg:ā€connecting to httpforever.comā€; content:ā€GETā€; http.host; content:ā€httpforever.comā€;sid:2;)

Upfront, this is what I built within my hour or so of just messing around, reading over documentation, and just getting a feel for what to do and how to build the signature.

Let me break it out into the three parts so you get my gist and my reading over the signature.

alert

This is my action. I want the overall end result to be an alert if my criteria matches.

http any any <> 146.190.62.39 80

These are my headers I’m looking for. Let me break it down a bit more:

(msg:ā€connecting to httpforever.comā€; content:ā€GETā€; http.host; content:ā€httpforever.comā€;sid:2;)

These are my rule options. Similarly, let me break it down a bit more:

How I performed testing


wiresharkpcap

I captured a pcap via Wireshark to test it out, and connected my machine to httpforever.com - not linking in case you don’t want to go visit, but feel free.

sudo apt install suricata

Then I used the following above command to install suricata on my machine.

suricata -r httpforeverconnection.pcap -S httpforever.rules -l ~/Desktop/

Then used the above command to test my signature. Similarly to my signature, I’ll break down the command:

fastlog

Then after it ran I just read the fast.log which is the summary result of what events matched the signature. For the full event information, you’ll want to check eve.json.

References


I don’t claim to be any expert in building Suricata signatures, and owe all credit to a few places:

Feel free to message me if something on this post is wrong. As this was a fun learning exercise, I have tried my best to validate my learning against documentation.