Writing suricata and snort rules
Skill meltedinhex/analyst-ai-pack/skills/writing-suricata-and-snort-rules
Writes and validates Suricata/Snort IDS rules for network-based malware detection, covering rule anatomy, content/pcre matching, flow and threshold options, and common mistakes that cause false positives or no matches. Activates for requests to write a Suricata rule, create Snort signatures, or build network detection rules from IOCs or C2 patterns.From its SKILL.md
npx -y skills add meltedinhex/analyst-ai-pack --skill writing-suricata-and-snort-rulesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 19 stars19 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
2.8 KB, 488 tokens by cl100k_base, as published. Nobody here has run it
Writing Suricata and Snort Rules
When to Use
- You need to author IDS rules to detect C2 traffic, malware downloads, or exploit attempts from observed network indicators.
- You want to validate rule syntax and avoid the patterns that cause false positives or silent non-matching.
Do not use broad content matches on common substrings that will flood alerts — anchor with
flow direction, ports, offsets, and uniqueness. This skill builds and lints rules; deploy them
through your IDS change process.
Prerequisites
- The indicators to detect (URI, host header, TLS SNI/JA3, byte pattern) and a target IDS (Suricata or Snort).
Workflow
Step 1: Draft the rule
Choose action, protocol, addresses/ports, direction, and a unique msg, sid, and rev. Add
content/pcre matches anchored with http.uri, tls.sni, flow:established,to_server, and
offsets/depths.
Step 2: Lint the rule
python scripts/analyst.py lint rules.rules
Checks for required fields (msg, sid, rev, classtype), balanced quotes/parentheses,
non-anchored overly short content, and duplicate SIDs.
Step 3: Tune to reduce noise
Add threshold/detection_filter, flowbits, and specific buffers (http.host, dns.query)
to scope matches.
Step 4: Document and stage
Record what each rule detects and stage it for testing against a pcap before production.
Validation
- Every rule has
msg, a uniquesid, and arev. contentmatches are anchored (buffer/offset/flow) rather than free-floating short strings.- Rules parse without unbalanced quotes/parentheses.
Pitfalls
- Free-floating
content:"GET"style matches creating massive false positives. - Duplicate or reused SIDs causing rule-load conflicts.
- Forgetting
flow:establishedand matching on unrelated traffic directions.
References
- See
references/api-reference.mdfor the linter. - Suricata and Snort rule docs (linked in frontmatter).
What ships with it: 3 files
4.3 KB alongside SKILL.md, 1 of them executable
references/
- api-reference.md1.1 KB
scripts/
- analyst.pyruns2.8 KB
- LICENSE340 B