Skip to content

docs(ids): Suricata is live on Degens (VLAN 10) — close #89 - #244

Merged
Gerrrt merged 3 commits into
mainfrom
gerrrt/github-issue-89-812654
Sep 3, 2026
Merged

Gerrrt merged 3 commits into
mainfrom
gerrrt/github-issue-89-812654

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

Suricata now watches Degens (VLAN 10) as well as Skids, alert-only on both, one process per interface. This PR is docs only — the pipeline change (facility → interface label, per-interface rules and panels) merged in #242; this is the operational half done and written down.

Measured today (2026-09-02):

  • Degens enabled 16:30 PDT on Log Facility local2 → interface="igc0.10". First alert 2 s after "Engine started", labelled, sid 2210044 — the same signature that is 79% of Skids.
  • Unlabelled alerts since the Alloy restart: 0. Cross-segment double-count query: 0. SuricataHighPriorityAlert / SuricataAlertStorm: not firing.
  • §6 pipeline test passed: DNS rule fired on igc0.10, priority 3, filterlog still climbing. Test rules deleted afterwards.

What the second interface taught, now in the runbook:

  1. Restart on the interface left the Degens process stopped until started by hand, then rule loading took 35 s. A test URL visited in that window fires nothing and looks like a broken pipeline.
  2. A guest iPhone with iCloud Private Relay put no plaintext DNS or HTTP on igc0.10 at all — neither test rule can fire from it. A laptop's curl fired the DNS rule three times; the HTTP rule never fired (unexplained, noted).
  3. The engine's own alerts.log on morpheus is what separates "never fired" from "fired and lost".

Docs touched: security.md and observability.md no longer say "Skids only"; roadmap.md moves #89 to Done; enable-suricata.md §6 gains the callouts above and a "Measured on this network" subsection with the fortnight revisit of 2210044 dated 2026-09-16.

Closes #89

Test plan

  • make lint and make check-docs pass
  • sum by (interface) (count_over_time({app="suricata"}[10m])) shows igc0.10 and igc0.20, no unlabelled row
  • Alertmanager shows no active Suricata alerts
  • homelab-security $interface picker lists igc0.10

🤖 Generated with Claude Code

…nd interface taught (#89)

Degens went live at 16:30 PDT on 2026-09-02, alert-only, Log Facility local2,
so syslog.alloy labels it igc0.10. The first alert arrived two seconds after
the engine started, labelled, and was sid 2210044 — the same stream-timestamp
signature that is 79% of Skids. Zero unlabelled alerts since; the cross-
segment query returned 0, so the two processes do not double-count.

The pipeline test failed twice before it passed, and both failures are now in
the runbook because both looked exactly like a broken syslog path:

- "Restart" on the interface left the process stopped until started by hand,
  and loading 22k rules then took 35 s. A test visited in that window fires
  nothing.
- A guest iPhone with iCloud Private Relay put no plaintext DNS or HTTP on
  igc0.10 at all, so neither test rule could fire from it. §4's DoH caveat
  covered half of this. A laptop's curl fired the DNS rule (three lookups,
  one millisecond) and, unexplained, not the HTTP rule.

The engine's own alerts.log on morpheus is what separates "never fired" from
"fired and lost", and the runbook now says so.

security.md and observability.md stop saying "Skids only". roadmap.md moves
#89 to Done; the fortnight comparison of 2210044 is dated 2026-09-16 in the
runbook rather than holding the issue open.

Closes #89

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 2, 2026 23:42

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

A few newly added doc lines have grammatical/wording issues that should be corrected for clarity and accuracy before merge.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Updates the documentation to reflect that Suricata IDS is now running alert-only on both Skids (VLAN 20) and Degens (VLAN 10), and records the operational learnings from bringing up the second interface.

Changes:

  • Update security/observability docs to state Suricata runs on Skids + Degens with per-interface labeling.
  • Expand the Suricata enablement runbook with concrete “gotchas” (restart behavior, rule-load timing, Private Relay visibility) and a measured-baseline section.
  • Move issue #89 from “Monitoring” to “Done” in the roadmap with a brief postmortem-style summary.
File summaries
File Description
docs/security.md Updates current-state security posture to include Degens and per-interface labeling.
docs/runbooks/enable-suricata.md Adds per-interface verification callouts and measured observations for Degens enablement.
docs/roadmap.md Marks #89 done and summarizes the implementation/operational findings.
docs/observability.md Updates observability limits section to reflect two-interface Suricata deployment.
Review details
  • Files reviewed: 4/4 changed files
  • Comments generated: 3
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread docs/runbooks/enable-suricata.md Outdated
Comment on lines +545 to +548
> tunnels DNS *and* HTTP, so the phone that seems the obvious guest client
> produced no port-53 and no port-80 packet on `igc0.10` at all — measured with
> `tcpdump -i igc0.10 -n port 53 or port 80` on `morpheus`, which is the query
> that settles "is this device's traffic even visible". §4's caveat about DoH

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in e9b644e.

Comment thread docs/runbooks/enable-suricata.md Outdated
Comment on lines +573 to +575
two callouts above) — and the syslog path is not the suspect. A line there
and nothing in Loki is the syslog path, and §4's *Remote Syslog Contents*
check is where to go.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in e9b644e.

Comment thread docs/security.md Outdated
Comment on lines +30 to +31
**Intrusion detection is running** on **Skids (VLAN 20)** since 2026-08-21 and
on **Degens (VLAN 10)** since 2026-09-02, one Suricata process per interface.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in e9b644e.

Gerrrt and others added 2 commits September 3, 2026 01:00
"tcpdump" is a command, not a query; the alerts.log paragraph now says the
syslog path *is* the suspect rather than reading as if it were the result;
and "has been running ... since" for the two enable dates.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@Gerrrt
Gerrrt merged commit c4c1e15 into main Sep 3, 2026
3 checks passed
@Gerrrt
Gerrrt deleted the gerrrt/github-issue-89-812654 branch September 3, 2026 01:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Extend Suricata to Degens (VLAN 10)

2 participants