check / check (push) Successful in 13m11s
`smallwebwaf servewaf` runs today's checks on the visitor's request each question carries, answers rproxy, and passes nothing to an app. rproxy reports every request servewaf answered. A report counts an allowed request's bytes and writes servewaf's second log line. The table holds a copy of what a report needs, never the request, so a report cannot reach a request being handled. Judgement call: a question's body is read before any check; over 64 KiB gets 400. Judgement call: a report's bytes and durations have ceilings, so they cannot overflow. Judgement call: a `close` disposition for SWWAF_BAN_RESPONSE=close. Model: opus-5-5
2.2 KiB
2.2 KiB
Admin endpoints
The endpoints under /_smallwebwaf/, what each takes and what each answers.
"Admin endpoints" in SPEC.md says which checks they go through
and how their tokens work.
GET /_smallwebwaf/healthz:200andok, to anyone.GET /_smallwebwaf/metrics: the metrics, forSWWAF_METRICS_TOKEN(seemetrics.md).GET /_smallwebwaf/bans: every ban held, underbans, each asbans.jsonlists it. NeedsSWWAF_ADMIN_TOKEN, as do the three below.POST /_smallwebwaf/bans: bans a netblock. The body is a JSON object ofnetblock,durationand, if you like,reason.netblockis a netblock such as203.0.113.0/24, or a client's address, which bans its IPv4 netblock (SWWAF_BAN_SCOPE_V4_PREFIX) or its IPv6 group.durationis a duration such as1hor7d, orpermanent. A bad body is answered400, saying what is wrong:- one that is not such an object, or has another field;
- one longer than 4 KiB;
- one that names an IPv4-mapped netblock, or an address with a zone.
DELETE /_smallwebwaf/bans/<client>: lifts every active ban covering the address<client>. It answers404when none is active.GET /_smallwebwaf/clients/<ip>: whatsmallwebwafknows of the client. Underclient, its counters and history asclients.jsonholds them, ornullwhenclients.jsondoes not hold it. Underbans, every ban covering the address, with its notes.
Examples
With SWWAF_ADMIN_TOKEN set, and the token in $TOKEN:
# Every ban.
curl -H "Authorization: Bearer $TOKEN" https://app.example/_smallwebwaf/bans
# Ban 203.0.113.0/24 for seven days.
curl -H "Authorization: Bearer $TOKEN" \
--json '{"netblock": "203.0.113.0/24", "duration": "7d", "reason": "probes for logins"}' \
https://app.example/_smallwebwaf/bans
# Lift the bans on 203.0.113.9.
curl -H "Authorization: Bearer $TOKEN" -X DELETE \
https://app.example/_smallwebwaf/bans/203.0.113.9
# What smallwebwaf knows of 203.0.113.9.
curl -H "Authorization: Bearer $TOKEN" \
https://app.example/_smallwebwaf/clients/203.0.113.9
servewaf
smallwebwaf servewaf answers these endpoints at its own address. No check runs
on those requests (see "servewaf" in SPEC.md).