Owner directive (sneak, 2026-09-21, chat, verbatim): "repo is sneak/smallwebwaf - readme in addition to the proposed feature list and simple spec should have an intro that explains the what (simple performant logging WAF for self-hosters) and the why (protection against misbehaving scrapers and bias against countries/ASNs that are common abuse sources). it should of course support reading from a directory of WAF rules that can be easily edited, like regex to detect common scanning/penetration/etc."
Prior rulings from the same session, all already applied to the draft spec: env-var configuration; sits between traefik and one docker service; per-minute/hour/day request and byte limits per client; netblock whitelist bypassing limits; webhook/slack/ntfy alerting on attacks and anomaly thresholds; temporary blocks and permanent bans for repeat offenders; RBL/IP-reputation integration; AS number lookups; threshold bias against listed ASNs and countries; NO SQLite — all state in memory, persisted as formatted hand-editable JSON written atomically, loaded once at startup, never read per-request; structured JSONL request logging to stdout with timings and all standard web log fields; env var to additionally ship logs to remote syslog or RELP; Prometheus metrics endpoint.
Definition of done:
README.md with an intro stating the what (simple performant logging WAF for self-hosters) and the why (protection against misbehaving scrapers; bias against countries and ASNs that are common abuse sources), the proposed feature list, and the simple spec (or a link to SPEC.md carrying it).
SPEC.md covering every ruling above, including a directory of easily-editable WAF rule files (e.g. regex to detect common scanning/penetration probes) read at startup, with its env var.
EVALUATION.md (the survey of existing tools and why none fit) committed for the record.
Open design questions stated in SPEC.md for the owner: overlapping ASN/country percentages lowest-wins vs multiplied; country percentage per-client vs whole-country cap; bans shared across the fleet or per-instance; which lookup database; banned clients get 403 vs dropped connection.
Committed and pushed to this repo.
model: claude-fable-5
Owner directive (sneak, 2026-09-21, chat, verbatim): "repo is sneak/smallwebwaf - readme in addition to the proposed feature list and simple spec should have an intro that explains the what (simple performant logging WAF for self-hosters) and the why (protection against misbehaving scrapers and bias against countries/ASNs that are common abuse sources). it should of course support reading from a directory of WAF rules that can be easily edited, like regex to detect common scanning/penetration/etc."
Prior rulings from the same session, all already applied to the draft spec: env-var configuration; sits between traefik and one docker service; per-minute/hour/day request and byte limits per client; netblock whitelist bypassing limits; webhook/slack/ntfy alerting on attacks and anomaly thresholds; temporary blocks and permanent bans for repeat offenders; RBL/IP-reputation integration; AS number lookups; threshold bias against listed ASNs and countries; NO SQLite — all state in memory, persisted as formatted hand-editable JSON written atomically, loaded once at startup, never read per-request; structured JSONL request logging to stdout with timings and all standard web log fields; env var to additionally ship logs to remote syslog or RELP; Prometheus metrics endpoint.
Definition of done:
- README.md with an intro stating the what (simple performant logging WAF for self-hosters) and the why (protection against misbehaving scrapers; bias against countries and ASNs that are common abuse sources), the proposed feature list, and the simple spec (or a link to SPEC.md carrying it).
- SPEC.md covering every ruling above, including a directory of easily-editable WAF rule files (e.g. regex to detect common scanning/penetration probes) read at startup, with its env var.
- EVALUATION.md (the survey of existing tools and why none fit) committed for the record.
- Open design questions stated in SPEC.md for the owner: overlapping ASN/country percentages lowest-wins vs multiplied; country percentage per-client vs whole-country cap; bans shared across the fleet or per-instance; which lookup database; banned clients get 403 vs dropped connection.
- Committed and pushed to this repo.
model: claude-fable-5
https://git.eeqj.de/sneak/smallwebwaf/src/branch/main/SPEC.md : full design with the rulings applied (in-memory state with atomic JSON files, JSONL request log, remote syslog/RELP, Prometheus endpoint) and the new rule file directory (RULES_DIR, one regex rule per line, examples included)
Open questions for the owner are kept at the end of SPEC.md: combining percentages, per-client versus whole-country meaning of a country percentage, per-sidecar versus fleet-wide bans, lookup database source, upaas second-container support, remote log library, ban response code.
Disclosures:
Markdown is hand-wrapped; the repo has no make fmt yet.
Commit is authored with the git identity configured on the host.
Model: fable-5-1
Docs landed on `main` in https://git.eeqj.de/sneak/smallwebwaf/commit/a0d2c21346d9e0bf1ee93eaa43cddd3bbd7e641d
- https://git.eeqj.de/sneak/smallwebwaf/src/branch/main/README.md : what and why, proposed feature list, short spec summary linking to `SPEC.md`
- https://git.eeqj.de/sneak/smallwebwaf/src/branch/main/SPEC.md : full design with the rulings applied (in-memory state with atomic JSON files, JSONL request log, remote syslog/RELP, Prometheus endpoint) and the new rule file directory (`RULES_DIR`, one regex rule per line, examples included)
- https://git.eeqj.de/sneak/smallwebwaf/src/branch/main/EVALUATION.md : survey of existing tools and gaps
Open questions for the owner are kept at the end of `SPEC.md`: combining percentages, per-client versus whole-country meaning of a country percentage, per-sidecar versus fleet-wide bans, lookup database source, upaas second-container support, remote log library, ban response code.
Disclosures:
- Markdown is hand-wrapped; the repo has no `make fmt` yet.
- Commit is authored with the git identity configured on the host.
Model: fable-5-1
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Owner directive (sneak, 2026-09-21, chat, verbatim): "repo is sneak/smallwebwaf - readme in addition to the proposed feature list and simple spec should have an intro that explains the what (simple performant logging WAF for self-hosters) and the why (protection against misbehaving scrapers and bias against countries/ASNs that are common abuse sources). it should of course support reading from a directory of WAF rules that can be easily edited, like regex to detect common scanning/penetration/etc."
Prior rulings from the same session, all already applied to the draft spec: env-var configuration; sits between traefik and one docker service; per-minute/hour/day request and byte limits per client; netblock whitelist bypassing limits; webhook/slack/ntfy alerting on attacks and anomaly thresholds; temporary blocks and permanent bans for repeat offenders; RBL/IP-reputation integration; AS number lookups; threshold bias against listed ASNs and countries; NO SQLite — all state in memory, persisted as formatted hand-editable JSON written atomically, loaded once at startup, never read per-request; structured JSONL request logging to stdout with timings and all standard web log fields; env var to additionally ship logs to remote syslog or RELP; Prometheus metrics endpoint.
Definition of done:
model: claude-fable-5
Docs landed on
mainina0d2c21346SPEC.mdRULES_DIR, one regex rule per line, examples included)Open questions for the owner are kept at the end of
SPEC.md: combining percentages, per-client versus whole-country meaning of a country percentage, per-sidecar versus fleet-wide bans, lookup database source, upaas second-container support, remote log library, ban response code.Disclosures:
make fmtyet.Model: fable-5-1