Skip to content

docs(prd): add PRD 0010 — Block attackers without locking out the operator - #59

Merged
ralyodio merged 1 commit into
masterfrom
docs/prd-0010-firewall-rules
Jul 28, 2026
Merged

docs(prd): add PRD 0010 — Block attackers without locking out the operator#59
ralyodio merged 1 commit into
masterfrom
docs/prd-0010-firewall-rules

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Specification for the firewall-rules core module, listed in PRD.md and not yet specified.

The first module that CHANGES the system rather than observing it, and that fact dominates the design. Every other module's worst failure is a missed detection. This one's worst failure is locking the operator out of their own server at 3am from a false positive.

Three hazards: self-lockout (the operator's own IP, the CI runner, the load balancer all look like traffic); shared addresses (blocking a CGNAT or corporate NAT range blocks everyone behind it); and rules that outlive their reason, accreting into an unreviewable ban list.

So: dry-run is the install default, the protected set is enforced at the point of WRITING a rule rather than deciding one — so no detector, however wrong, can produce a lockout — every rule carries a mandatory TTL, and everything lives in a dedicated chain so flush removes exactly what this module added and nothing else.

Spec only — no implementation in this PR.

…rator

The first module that CHANGES the system rather than observing it, and that fact dominates the design. Every other module's worst failure is a missed detection. This one's worst failure is locking the operator out of their own server at 3am from a false positive.

Three hazards: self-lockout (the operator's own IP, the CI runner, the load balancer all look like traffic); shared addresses (blocking a CGNAT or corporate NAT range blocks everyone behind it); and rules that outlive their reason, accreting into an unreviewable ban list.

So: dry-run is the install default, the protected set is enforced at the point of WRITING a rule rather than deciding one — so no detector, however wrong, can produce a lockout — every rule carries a mandatory TTL, and everything lives in a dedicated chain so flush removes exactly what this module added and nothing else.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ralyodio
ralyodio merged commit 80d50d3 into master Jul 28, 2026
6 checks passed
@ralyodio
ralyodio deleted the docs/prd-0010-firewall-rules branch July 28, 2026 17:44
@github-actions

Copy link
Copy Markdown

vu1nz Security Review

0 finding(s) in PR #?

No security issues found.

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.

1 participant