2025-11-06 - 2026-11-06

Overview

84 Active Pull Requests
106 Active Issues
Excluding merges, 1 author has pushed 1 commit to main and 82 commits to all branches. On main, 3 files have changed and there have been 1112 additions and 0 deletions.

2 Releases published by 1 user

Published v1.0.0-rc2 2026-10-27 21:04:59 +01:00

Published v1.0.0-rc1 2026-10-20 17:56:57 +02:00

81 Pull requests merged by 1 user

Merged #189 README: sections, compose examples, env var table (closes #188) 2026-11-06 00:06:25 +01:00

Merged #186 rproxy tests give a loaded host time before their limits run out (closes #185) 2026-11-05 23:17:17 +01:00

Merged #184 rproxy and servewaf replace the one-process smallwebwaf (closes #172, closes #165) 2026-11-05 13:15:06 +01:00

Merged #181 rproxy, the proxy in front of each app, asks servewaf and fails open (closes #171) 2026-11-05 06:32:09 +01:00

Merged #183 servewaf always answers rproxy well within its time limit (closes #182) 2026-11-05 05:48:50 +01:00

Merged #180 servewaf answers rproxy's question about each request and takes its report (closes #170) 2026-11-05 00:32:09 +01:00

Merged #179 Default request limits per minute, hour and day, sized for API use (closes #176) 2026-11-04 23:02:40 +01:00

Merged #164 Health check test uses addresses nothing can connect to (closes #158) 2026-10-27 21:00:17 +01:00

Merged #162 New defaults for the request and byte limits (closes #161) 2026-10-27 19:28:10 +01:00

Merged #160 next into main 2026-10-26 13:11:05 +01:00

Merged #159 SPEC, README and docs rewritten from scratch (closes #154, closes #155, closes #156) 2026-10-26 03:06:28 +01:00

Merged #40 Milestones 1 and 2: proxy with timeouts and size limits, rate limits, country lists and the image 2026-10-22 19:51:30 +02:00

Merged #152 README and SPEC name every offence that has a client checked (closes #151) 2026-10-20 17:46:17 +02:00

Merged #153 A ban in bans.json that ends at or before its start is refused, as other malformed entries are (closes #150) 2026-10-20 17:42:02 +02:00

Merged #142 smallwebwaf starts with SWWAF_STATE_DIR given as a file on a new volume (closes #137) 2026-10-20 16:54:35 +02:00

Merged #148 An answer from the app without a Content-Type reaches the client without one (closes #127) 2026-10-20 16:41:19 +02:00

Merged #145 README and SPEC say a client too slow to send its request line and headers may get an error answer (closes #138) 2026-10-20 16:32:09 +02:00

Merged #149 A path holding a character Go escapes reaches the app as the client sent it (closes #126) 2026-10-20 16:09:48 +02:00

Merged #147 An upgrade the app accepts under another protocol name is answered 502 (closes #131) 2026-10-20 15:36:31 +02:00

Merged #146 README and SPEC say what docker stop does to requests in progress when the app exits at once (closes #139) 2026-10-20 15:28:31 +02:00

Merged #144 A client that stops sending with little of its body left after the app has answered is timed out (closes #136) 2026-10-20 15:09:16 +02:00

Merged #134 script/gitea-requests, and the gitea refusals it confirms named in SPEC.md (closes #30) 2026-10-20 13:39:06 +02:00

Merged #143 A ban's earlier_bans counts a ban dropped after an admin's ban (closes #128) 2026-10-20 12:59:54 +02:00

Merged #135 A client that stops sending after the app answers is timed out 2026-10-20 11:47:15 +02:00

Merged #141 The image build rides out a brief 503 from Ubuntu's snapshot server (closes #132) 2026-10-20 11:38:00 +02:00

Merged #133 A request that waited for its lookup is counted when it goes on 2026-10-14 19:41:54 +02:00

Merged #125 Path rules and trap paths match the path decoded once too 2026-10-14 18:20:32 +02:00

Merged #122 Core Rule Set reads request bodies up to SWWAF_WAF_BODY_LIMIT 2026-10-08 12:59:14 +02:00

Merged #121 The Core Rule Set, run by Coraza, on each request's method, URL and headers 2026-10-08 09:37:14 +02:00

Merged #120 Tests that wait for a lookup answer give it an hour 2026-10-08 08:14:46 +02:00

Merged #118 Trap paths, and the error burst banning a client refused too often 2026-10-08 06:44:56 +02:00

Merged #117 CrowdSec decision list fetched, kept, and its clients banned until the decision ends 2026-10-08 05:15:07 +02:00

Merged #114 Ban notes name the reputation sources that listed the client 2026-10-08 03:08:01 +02:00

Merged #113 SWWAF_IPV6_GROUP_PREFIX, SWWAF_MAX_TRACKED_CLIENTS and SWWAF_LOG_LEVEL 2026-10-08 02:14:13 +02:00

Merged #111 AbuseIPDB scores for clients that committed an offence, within a daily budget 2026-10-07 22:47:07 +02:00

Merged #110 DNS blocklists asked in the background, verdicts kept 2026-10-07 21:09:52 +02:00

Merged #108 Blocklists and an AS percentage file fetched by URL 2026-10-07 19:09:41 +02:00

Merged #107 Anomaly thresholds: alerts for unusual traffic, nothing refused 2026-10-07 16:12:21 +02:00

Merged #103 Lower limits for listed AS numbers and countries 2026-10-07 14:22:02 +02:00

Merged #102 Byte limits per client over a minute, an hour and a day 2026-10-07 13:13:07 +02:00

Merged #100 make tidy, and make check failing on an untidy go.mod or go.sum 2026-10-07 10:30:47 +02:00

Merged #98 Look clients up in the IPinfo Lite file with SWWAF_LOOKUP_SOURCE=file 2026-10-07 10:04:11 +02:00

Merged #97 AS number and country looked up for every client 2026-10-07 08:46:02 +02:00

Merged #96 Instance name on process log lines and every metric 2026-10-07 06:48:09 +02:00

Merged #94 Alerts to Slack and ntfy, each destination with its own queue 2026-10-07 05:54:35 +02:00

Merged #93 Alerts to a JSON webhook, with a cooldown and an hourly summary 2026-10-07 04:21:24 +02:00

Merged #92 Admin endpoints for bans and clients on the single listener 2026-10-07 01:13:17 +02:00

Merged #89 Settings given as files: the _FILE form of every setting 2026-10-07 00:01:20 +02:00

Merged #88 Bans an admin makes or lifts: the admin cause, a reason, lifted bans kept 2026-10-06 23:09:53 +02:00

Merged #84 Send every log line to a syslog server as well 2026-10-06 22:02:36 +02:00

Merged #83 Rule files, and bans for a clear sign of attack 2026-10-06 20:38:36 +02:00

Merged #80 Leave SWWAF_RATE_LIMIT_EXEMPT_PATHS out of the request rate limits 2026-10-06 18:47:14 +02:00

Merged #82 Log the rest of the request log's fields 2026-10-06 17:26:24 +02:00

Merged #75 Take in an admin's edits of the state files while running 2026-10-06 14:18:14 +02:00

Merged #81 Observe mode: log what would be refused, refuse nothing 2026-10-06 13:04:44 +02:00

Merged #76 Serve Prometheus metrics behind SWWAF_METRICS_TOKEN 2026-10-06 11:40:28 +02:00

Merged #74 Run the GeoJS lookup tests on a clock the test controls 2026-10-06 09:12:50 +02:00

Merged #72 Keep the bans, the clients and GeoJS's answers in state files 2026-10-06 08:31:53 +02:00

Merged #69 Ban the netblock of a client that breaks a rate limit, in memory 2026-10-06 05:29:04 +02:00

Merged #71 The header size and the idle time as settings 2026-10-06 05:05:32 +02:00

Merged #67 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 04:13:36 +02:00

Merged #66 Network lists: always allowed, exempt from rate limits, always refused 2026-10-06 02:36:28 +02:00

Merged #62 Derive the proxy tests' short timeout setting from the timeout 2026-10-04 11:50:09 +02:00

Merged #60 Quiet the useradd and Perl warnings in the image build 2026-10-04 11:38:15 +02:00

Merged #59 Spend less of make test writing the image and waiting 2026-10-04 11:13:33 +02:00

Merged #57 The image apps build FROM, with its health check 2026-10-04 10:05:31 +02:00

Merged #54 Country allow and deny lists, looked up through GeoJS 2026-10-04 08:29:42 +02:00

Merged #55 Proxy timing tests outlast a hold-up of the test process 2026-10-04 07:53:19 +02:00

Merged #52 Point the unreachable-app test at port 1 2026-10-04 06:39:09 +02:00

Merged #50 TestRequestTimeouts expects 504 when none of the body reached the app 2026-10-04 06:09:23 +02:00

Merged #48 Per-client request rate limits over a minute, an hour and a day 2026-10-04 04:24:35 +02:00

Merged #47 Add the MIT licence 2026-10-04 03:07:52 +02:00

Merged #46 Settle the spec's open points after milestones 1 and 2 2026-10-04 02:57:25 +02:00

Merged #42 Settle the open points of the Ubuntu and nixpkgs image 2026-10-04 02:42:58 +02:00

Merged #41 Deploy model: listen port, token files, state directory owner 2026-10-04 01:42:45 +02:00

Merged #39 Pass-through proxy with timeouts, size limits and a request log 2026-10-03 17:24:34 +02:00

Merged #31 Spec: SPEC.md and README.md to sneak's rulings, deploy model, milestones and Ubuntu base 2026-09-29 02:57:58 +02:00

Merged #37 Build the smallwebwaf image on Ubuntu 26.04 LTS with nixpkgs 2026-09-29 02:43:56 +02:00

Merged #35 SPEC follows milestones 1 and 2: build order, two size limits, GeoJS answers in memory 2026-09-29 02:10:35 +02:00

Merged #32 Deploy model: apps build FROM the smallwebwaf image, settings prefixed SWWAF_ 2026-09-29 01:48:48 +02:00

Merged #9 SPEC and README: owner rulings, issues 2 to 5, internet-ready defaults 2026-09-29 00:53:02 +02:00

3 Pull requests proposed by 1 user

Proposed #163 next into main 2026-10-27 19:33:20 +01:00

Proposed #187 deploy/gitea: Gitea behind traefik, rproxy and servewaf, with its test (closes #178) 2026-11-05 14:00:53 +01:00

Proposed #191 Install the image's Ubuntu packages from the normal mirrors (closes #190) 2026-11-05 21:27:34 +01:00

95 Issues closed from 2 users

Closed #188 README: rewrite on Fable into sections, with compose examples and an env var table 2026-11-06 00:06:25 +01:00

Closed #185 rproxy test of an answer cut off after its start fails under load 2026-11-05 23:17:17 +01:00

Closed #172 rproxy and servewaf replace the one-process smallwebwaf 2026-11-05 13:15:06 +01:00

Closed #165 Tiny per-app reverse proxy that asks a separate smallwebwaf whether to pass each request 2026-11-05 13:15:06 +01:00

Closed #171 rproxy: the proxy in front of each app that asks servewaf and fails open 2026-11-05 06:32:09 +01:00

Closed #182 servewaf always answers rproxy well within its time limit 2026-11-05 05:48:51 +01:00

Closed #170 servewaf: answer rproxy's question about each request, and take its report 2026-11-05 00:32:10 +01:00

Closed #176 Default request limits per minute, hour and day, sized for API use 2026-11-04 23:02:41 +01:00

Closed #177 Secrets in query strings never reach the log, ban notes or alerts 2026-11-04 21:09:24 +01:00

Closed #158 TestHealthCheck fails when another process takes the closed test server's port 2026-10-27 21:00:17 +01:00

Closed #161 defaults are insane 2026-10-27 19:28:10 +01:00

Closed #155 Rewrite README.md from scratch so a newcomer can follow it 2026-10-26 03:06:30 +01:00

Closed #154 use fable on xhigh to rewrite the readme for comprehensibility 2026-10-26 03:06:30 +01:00

Closed #156 Rewrite SPEC.md from scratch, short and plain 2026-10-26 03:06:29 +01:00

Closed #116 Body inspection by the Core Rule Set (SWWAF_WAF_BODY_LIMIT) 2026-10-22 19:51:37 +02:00

Closed #101 Anomaly thresholds: alerts for unusual traffic, nothing refused 2026-10-22 19:51:36 +02:00

Closed #104 Reputation: DNS blocklists 2026-10-22 19:51:36 +02:00

Closed #105 Reputation: AbuseIPDB 2026-10-22 19:51:36 +02:00

Closed #106 Reputation: the CrowdSec decision feed 2026-10-22 19:51:36 +02:00

Closed #29 Reputation: downloaded blocklists 2026-10-22 19:51:36 +02:00

Closed #25 The Core Rule Set, run by Coraza 2026-10-22 19:51:36 +02:00

Closed #109 Ban notes name the reputation sources that listed the client 2026-10-22 19:51:36 +02:00

Closed #21 Lower limits for listed AS numbers and countries 2026-10-22 19:51:36 +02:00

Closed #112 SWWAF_IPV6_GROUP_PREFIX, SWWAF_MAX_TRACKED_CLIENTS and SWWAF_LOG_LEVEL 2026-10-22 19:51:36 +02:00

Closed #115 Trap paths and the error burst 2026-10-22 19:51:36 +02:00

Closed #90 Alerts to Slack and ntfy 2026-10-22 19:51:35 +02:00

Closed #87 Settings given as files: the _FILE form of every setting 2026-10-22 19:51:35 +02:00

Closed #91 SWWAF_INSTANCE_NAME on process log lines and metrics 2026-10-22 19:51:35 +02:00

Closed #95 AS number and country looked up for every client 2026-10-22 19:51:35 +02:00

Closed #99 make tidy, and make check failing on an untidy go.mod or go.sum 2026-10-22 19:51:35 +02:00

Closed #86 Bans an admin makes or lifts: the admin cause, a reason, lifted bans kept 2026-10-22 19:51:35 +02:00

Closed #22 The IPinfo Lite file as a second lookup source 2026-10-22 19:51:35 +02:00

Closed #28 Remote log sending 2026-10-22 19:51:35 +02:00

Closed #27 Admin listener 2026-10-22 19:51:35 +02:00

Closed #26 Alerts: the queue and the JSON webhook 2026-10-22 19:51:35 +02:00

Closed #24 Rule files 2026-10-22 19:51:35 +02:00

Closed #20 Byte limits per client 2026-10-22 19:51:35 +02:00

Closed #77 Paths the request rate limits do not count (SWWAF_RATE_LIMIT_EXEMPT_PATHS) 2026-10-22 19:51:34 +02:00

Closed #79 The rest of the request log's fields 2026-10-22 19:51:34 +02:00

Closed #68 State files: take in an admin's edits while running 2026-10-22 19:51:34 +02:00

Closed #17 Keep state across restarts: GeoJS answers and rate counters on disk 2026-10-22 19:51:34 +02:00

Closed #18 Bans: the ban model of issue 2, with the notes of issue 4 2026-10-22 19:51:34 +02:00

Closed #23 Metrics endpoint 2026-10-22 19:51:34 +02:00

Closed #58 Image build warnings: useradd uid range, a Perl warning while installing, runsvinit at stop 2026-10-22 19:51:33 +02:00

Closed #43 Milestone 2, part 1: per-IP rate limits 2026-10-22 19:51:33 +02:00

Closed #44 Milestone 2, part 2: country allow and deny lists, with GeoJS lookup 2026-10-22 19:51:33 +02:00

Closed #45 Milestone 2, part 3: the image apps build FROM, with its health check 2026-10-22 19:51:33 +02:00

Closed #19 Network lists: always allowed, exempt from limits, always refused 2026-10-22 19:51:33 +02:00

Closed #70 The header size and the idle time as settings 2026-10-22 19:51:33 +02:00

Closed #65 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-22 19:51:33 +02:00

Closed #13 Milestone 1: pass-through proxy with read and write timeouts, size limits and a request log 2026-10-22 19:51:32 +02:00

Closed #33 Deploy model: points the spec leaves open, from the review of issue 12 2026-10-22 19:51:32 +02:00

Closed #15 LICENSE: sneak picks the licence 2026-10-22 19:51:32 +02:00

Closed #36 Spec after the milestones: points left open, from the review of issue 16 2026-10-22 19:51:32 +02:00

Closed #38 Ubuntu and nixpkgs image: points left open, from the review of issue 34 2026-10-22 19:51:32 +02:00

Closed #151 The README's AbuseIPDB section leaves out three of the offences that have a client checked 2026-10-20 17:46:18 +02:00

Closed #150 A ban edited into bans.json with expires before start makes the netblock's next limit ban already expired 2026-10-20 17:42:03 +02:00

Closed #56 make test runs past the 20-second target 2026-10-20 17:08:09 +02:00

Closed #53 Proxy timing tests can fail when the test process is held up for 300 ms 2026-10-20 17:08:08 +02:00

Closed #49 TestRequestTimeouts can answer 504 instead of 408 when the client stops sending 2026-10-20 17:08:08 +02:00

Closed #119 TestBanNotes can fail when the test process is held up past the lookup timeout 2026-10-20 17:08:08 +02:00

Closed #85 Default rule file: a probe sent percent-encoded gets past its path rules 2026-10-20 17:08:07 +02:00

Closed #137 SWWAF_STATE_DIR given as a file: the run script gives the default directory to the smallwebwaf user, and the start fails 2026-10-20 16:54:35 +02:00

Closed #127 An answer from the app without a Content-Type can reach the client with one Go guessed 2026-10-20 16:41:20 +02:00

Closed #138 A client too slow to send its request line is answered 400, not left without an answer 2026-10-20 16:32:09 +02:00

Closed #126 A path holding a character Go escapes reaches the app re-encoded, with an encoded slash turned into a slash 2026-10-20 16:09:48 +02:00

Closed #131 An upgrade the app accepts under another protocol name is answered 200 with an empty body 2026-10-20 15:36:31 +02:00

Closed #139 docker stop: requests in progress get 502 at once when the app exits on SIGTERM, not five seconds to finish 2026-10-20 15:28:32 +02:00

Closed #136 A client that stops sending with little of its body left after the app has answered is never timed out 2026-10-20 15:09:17 +02:00

Closed #30 Gitea requests the Core Rule Set may refuse at the defaults, to be checked against a running gitea when milestone 1 is built 2026-10-20 13:39:06 +02:00

Closed #128 A ban's earlier_bans undercounts once a ban after an admin's ban is dropped 2026-10-20 12:59:56 +02:00

Closed #130 A client that stops sending its body after the app has answered is never timed out 2026-10-20 11:47:16 +02:00

Closed #132 The image build fails on a brief 503 from Ubuntu's snapshot server: apt gets no retries 2026-10-20 11:38:00 +02:00

Closed #123 Run the image as an operator would, in front of a small test backend, and file the defects found 2026-10-14 20:24:55 +02:00

Closed #129 Requests waiting for a client's first lookup are counted at the time they arrived, and one can wipe another's count 2026-10-14 19:41:54 +02:00

Closed #124 Read the request filtering, rate limiting and proxy code for correctness, and file the defects found 2026-10-14 18:18:48 +02:00

Closed #78 Observe mode: log what would be refused, refuse nothing 2026-10-06 13:04:44 +02:00

Closed #73 A GeoJS lookup test measures real time and can fail under load 2026-10-06 09:12:51 +02:00

Closed #63 Pin actions/checkout at a newer release: the runner's copy of the pinned one is broken 2026-10-06 00:55:39 +02:00

Closed #61 Proxy tests: the short timeout's setting is written apart from the timeout 2026-10-04 11:50:09 +02:00

Closed #14 Milestone 2: per-IP rate limits and country allow and deny lists, ready for production 2026-10-04 10:05:38 +02:00

Closed #51 TestAnswers502WhenTheAppCannotBeReached can reach another test's server 2026-10-04 06:39:09 +02:00

Closed #34 Spec: the smallwebwaf image is built on the latest Ubuntu LTS with nixpkgs installed 2026-09-29 02:43:56 +02:00

Closed #16 SPEC.md follows milestones 1 and 2: build order, one size limit per direction, GeoJS answers in memory 2026-09-29 02:10:35 +02:00

Closed #12 Deploy model: apps build FROM the smallwebwaf image, with smallwebwaf on :8080 in front of the app on 127.0.0.1:8081 2026-09-29 01:48:48 +02:00

Closed #6 SPEC update: fold the seven resolutions, issues 2 to 5 and the internet-ready directive (issue 7) into SPEC.md 2026-09-29 00:53:54 +02:00

Closed #11 how about we use geojs (free json geoip api) instead of a local database file? maybe a config flag for it? 2026-09-29 00:53:27 +02:00

Closed #8 requirement: very simple way to entirely block a list of countries, or to allow only certain countries 2026-09-29 00:53:27 +02:00

Closed #7 SPEC: internet-ready out of the box, with 2026 real-world defaults and minimal required configuration 2026-09-29 00:53:27 +02:00

Closed #4 Ban info 2026-09-29 00:53:27 +02:00

Closed #5 Limits and timeouts 2026-09-29 00:53:02 +02:00

Closed #3 Nonsense 2026-09-29 00:53:02 +02:00

Closed #2 spec updates 2026-09-29 00:53:02 +02:00

Closed #10 Easier administration: five proposals to pick from 2026-09-28 11:27:10 +02:00

Closed #1 Land the initial README and SPEC per the owner's design rulings 2026-09-21 09:42:48 +02:00

106 Issues created by 2 users

Opened #1 Land the initial README and SPEC per the owner's design rulings 2026-09-21 09:40:32 +02:00

Opened #2 spec updates 2026-09-21 22:36:12 +02:00

Opened #3 Nonsense 2026-09-21 22:37:49 +02:00

Opened #4 Ban info 2026-09-21 22:39:30 +02:00

Opened #5 Limits and timeouts 2026-09-21 22:40:59 +02:00

Opened #6 SPEC update: fold the seven resolutions, issues 2 to 5 and the internet-ready directive (issue 7) into SPEC.md 2026-09-22 15:31:52 +02:00

Opened #7 SPEC: internet-ready out of the box, with 2026 real-world defaults and minimal required configuration 2026-09-23 13:44:29 +02:00

Opened #8 requirement: very simple way to entirely block a list of countries, or to allow only certain countries 2026-09-23 14:45:49 +02:00

Opened #10 Easier administration: five proposals to pick from 2026-09-23 14:52:55 +02:00

Opened #11 how about we use geojs (free json geoip api) instead of a local database file? maybe a config flag for it? 2026-09-23 14:56:01 +02:00

Opened #12 Deploy model: apps build FROM the smallwebwaf image, with smallwebwaf on :8080 in front of the app on 127.0.0.1:8081 2026-09-24 12:09:15 +02:00

Opened #13 Milestone 1: pass-through proxy with read and write timeouts, size limits and a request log 2026-09-25 10:34:34 +02:00

Opened #14 Milestone 2: per-IP rate limits and country allow and deny lists, ready for production 2026-09-25 10:34:38 +02:00

Opened #15 LICENSE: sneak picks the licence 2026-09-25 10:39:43 +02:00

Opened #16 SPEC.md follows milestones 1 and 2: build order, one size limit per direction, GeoJS answers in memory 2026-09-25 11:01:47 +02:00

Opened #17 Keep state across restarts: GeoJS answers and rate counters on disk 2026-09-25 11:01:47 +02:00

Opened #18 Bans: the ban model of issue 2, with the notes of issue 4 2026-09-25 11:01:48 +02:00

Opened #19 Network lists: always allowed, exempt from limits, always refused 2026-09-25 11:01:48 +02:00

Opened #20 Byte limits per client 2026-09-25 11:01:48 +02:00

Opened #21 Lower limits for listed AS numbers and countries 2026-09-25 11:01:48 +02:00

Opened #22 The IPinfo Lite file as a second lookup source 2026-09-25 11:01:48 +02:00

Opened #23 Metrics endpoint 2026-09-25 11:01:48 +02:00

Opened #24 Rule files 2026-09-25 11:01:48 +02:00

Opened #25 The Core Rule Set, run by Coraza 2026-09-25 11:01:48 +02:00

Opened #26 Alerts: the queue and the JSON webhook 2026-09-25 11:01:48 +02:00

Opened #27 Admin listener 2026-09-25 11:01:48 +02:00

Opened #28 Remote log sending 2026-09-25 11:01:48 +02:00

Opened #29 Reputation: downloaded blocklists 2026-09-25 11:01:49 +02:00

Opened #30 Gitea requests the Core Rule Set may refuse at the defaults, to be checked against a running gitea when milestone 1 is built 2026-09-29 00:41:05 +02:00

Opened #33 Deploy model: points the spec leaves open, from the review of issue 12 2026-09-29 01:49:01 +02:00

Opened #34 Spec: the smallwebwaf image is built on the latest Ubuntu LTS with nixpkgs installed 2026-09-29 01:54:49 +02:00

Opened #36 Spec after the milestones: points left open, from the review of issue 16 2026-09-29 02:10:49 +02:00

Opened #38 Ubuntu and nixpkgs image: points left open, from the review of issue 34 2026-09-29 02:44:07 +02:00

Opened #43 Milestone 2, part 1: per-IP rate limits 2026-10-04 02:44:50 +02:00

Opened #44 Milestone 2, part 2: country allow and deny lists, with GeoJS lookup 2026-10-04 02:44:50 +02:00

Opened #45 Milestone 2, part 3: the image apps build FROM, with its health check 2026-10-04 02:44:50 +02:00

Opened #49 TestRequestTimeouts can answer 504 instead of 408 when the client stops sending 2026-10-04 03:36:30 +02:00

Opened #51 TestAnswers502WhenTheAppCannotBeReached can reach another test's server 2026-10-04 05:06:25 +02:00

Opened #53 Proxy timing tests can fail when the test process is held up for 300 ms 2026-10-04 06:43:53 +02:00

Opened #56 make test runs past the 20-second target 2026-10-04 07:53:37 +02:00

Opened #58 Image build warnings: useradd uid range, a Perl warning while installing, runsvinit at stop 2026-10-04 10:06:09 +02:00

Opened #61 Proxy tests: the short timeout's setting is written apart from the timeout 2026-10-04 11:13:49 +02:00

Opened #63 Pin actions/checkout at a newer release: the runner's copy of the pinned one is broken 2026-10-06 00:50:46 +02:00

Opened #65 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 01:30:45 +02:00

Opened #68 State files: take in an admin's edits while running 2026-10-06 02:47:45 +02:00

Opened #70 The header size and the idle time as settings 2026-10-06 03:53:13 +02:00

Opened #73 A GeoJS lookup test measures real time and can fail under load 2026-10-06 08:32:05 +02:00

Opened #77 Paths the request rate limits do not count (SWWAF_RATE_LIMIT_EXEMPT_PATHS) 2026-10-06 11:41:05 +02:00

Opened #78 Observe mode: log what would be refused, refuse nothing 2026-10-06 11:41:05 +02:00

Opened #79 The rest of the request log's fields 2026-10-06 11:41:19 +02:00

Opened #85 Default rule file: a probe sent percent-encoded gets past its path rules 2026-10-06 18:16:27 +02:00

Opened #86 Bans an admin makes or lifts: the admin cause, a reason, lifted bans kept 2026-10-06 20:40:39 +02:00

Opened #87 Settings given as files: the _FILE form of every setting 2026-10-06 20:40:53 +02:00

Opened #90 Alerts to Slack and ntfy 2026-10-07 00:02:11 +02:00

Opened #91 SWWAF_INSTANCE_NAME on process log lines and metrics 2026-10-07 00:02:29 +02:00

Opened #95 AS number and country looked up for every client 2026-10-07 05:55:25 +02:00

Opened #99 make tidy, and make check failing on an untidy go.mod or go.sum 2026-10-07 09:39:54 +02:00

Opened #101 Anomaly thresholds: alerts for unusual traffic, nothing refused 2026-10-07 11:01:23 +02:00

Opened #104 Reputation: DNS blocklists 2026-10-07 14:23:10 +02:00

Opened #105 Reputation: AbuseIPDB 2026-10-07 14:23:11 +02:00

Opened #106 Reputation: the CrowdSec decision feed 2026-10-07 14:23:11 +02:00

Opened #109 Ban notes name the reputation sources that listed the client 2026-10-07 17:13:33 +02:00

Opened #112 SWWAF_IPV6_GROUP_PREFIX, SWWAF_MAX_TRACKED_CLIENTS and SWWAF_LOG_LEVEL 2026-10-07 22:47:30 +02:00

Opened #115 Trap paths and the error burst 2026-10-08 03:08:34 +02:00

Opened #116 Body inspection by the Core Rule Set (SWWAF_WAF_BODY_LIMIT) 2026-10-08 03:38:47 +02:00

Opened #119 TestBanNotes can fail when the test process is held up past the lookup timeout 2026-10-08 06:51:54 +02:00

Opened #123 Run the image as an operator would, in front of a small test backend, and file the defects found 2026-10-14 17:26:42 +02:00

Opened #124 Read the request filtering, rate limiting and proxy code for correctness, and file the defects found 2026-10-14 17:26:43 +02:00

Opened #126 A path holding a character Go escapes reaches the app re-encoded, with an encoded slash turned into a slash 2026-10-14 18:13:36 +02:00

Opened #127 An answer from the app without a Content-Type can reach the client with one Go guessed 2026-10-14 18:13:37 +02:00

Opened #128 A ban's earlier_bans undercounts once a ban after an admin's ban is dropped 2026-10-14 18:13:37 +02:00

Opened #129 Requests waiting for a client's first lookup are counted at the time they arrived, and one can wipe another's count 2026-10-14 18:13:37 +02:00

Opened #130 A client that stops sending its body after the app has answered is never timed out 2026-10-14 18:13:37 +02:00

Opened #131 An upgrade the app accepts under another protocol name is answered 200 with an empty body 2026-10-14 18:13:37 +02:00

Opened #132 The image build fails on a brief 503 from Ubuntu's snapshot server: apt gets no retries 2026-10-14 18:17:34 +02:00

Opened #136 A client that stops sending with little of its body left after the app has answered is never timed out 2026-10-14 19:34:16 +02:00

Opened #137 SWWAF_STATE_DIR given as a file: the run script gives the default directory to the smallwebwaf user, and the start fails 2026-10-14 20:11:24 +02:00

Opened #138 A client too slow to send its request line is answered 400, not left without an answer 2026-10-14 20:11:24 +02:00

Opened #139 docker stop: requests in progress get 502 at once when the app exits on SIGTERM, not five seconds to finish 2026-10-14 20:11:24 +02:00

Opened #140 1.0: what stands between next and a release candidate 2026-10-14 20:25:08 +02:00

Opened #150 A ban edited into bans.json with expires before start makes the netblock's next limit ban already expired 2026-10-20 17:18:50 +02:00

Opened #151 The README's AbuseIPDB section leaves out three of the offences that have a client checked 2026-10-20 17:19:00 +02:00

Opened #154 use fable on xhigh to rewrite the readme for comprehensibility 2026-10-22 19:55:57 +02:00

Opened #155 Rewrite README.md from scratch so a newcomer can follow it 2026-10-22 20:00:34 +02:00

Opened #156 Rewrite SPEC.md from scratch, short and plain 2026-10-22 20:04:07 +02:00

Opened #158 TestHealthCheck fails when another process takes the closed test server's port 2026-10-22 20:38:43 +02:00

Opened #161 defaults are insane 2026-10-26 13:13:34 +01:00

Opened #165 Tiny per-app reverse proxy that asks a separate smallwebwaf whether to pass each request 2026-10-31 18:23:56 +01:00

Opened #166 Does today's one-process smallwebwaf stay beside rproxy and servewaf? 2026-11-02 00:12:10 +01:00

Opened #167 Does servewaf read request bodies? 2026-11-02 00:12:10 +01:00

Opened #168 What do the sites behind one servewaf share? 2026-11-02 00:12:10 +01:00

Opened #169 Run smallwebwaf in front of Gitea: the split built, defaults for API use, tokens out of the log 2026-11-04 19:58:49 +01:00

Opened #170 servewaf: answer rproxy's question about each request, and take its report 2026-11-04 20:09:56 +01:00

Opened #171 rproxy: the proxy in front of each app that asks servewaf and fails open 2026-11-04 20:09:56 +01:00

Opened #172 rproxy and servewaf replace the one-process smallwebwaf 2026-11-04 20:09:56 +01:00

Opened #173 Rename internal/proxy to internal/servewaf 2026-11-04 20:09:56 +01:00

Opened #174 Live request viewer in servewaf 2026-11-04 20:09:56 +01:00

Opened #175 Request tags, with throttling and blocking per tag 2026-11-04 20:09:56 +01:00

Opened #176 Default request limits per minute, hour and day, sized for API use 2026-11-04 20:09:56 +01:00

Opened #177 Secrets in query strings never reach the log, ban notes or alerts 2026-11-04 20:09:56 +01:00

Opened #178 deploy/gitea: Gitea behind traefik, rproxy and servewaf, with its test 2026-11-04 20:09:56 +01:00

Opened #182 servewaf always answers rproxy well within its time limit 2026-11-05 02:49:15 +01:00

Opened #185 rproxy test of an answer cut off after its start fails under load 2026-11-05 13:18:52 +01:00

Opened #188 README: rewrite on Fable into sections, with compose examples and an env var table 2026-11-05 20:47:19 +01:00

Opened #190 Install the image's Ubuntu packages from the normal mirrors, not a dated snapshot 2026-11-05 20:58:30 +01:00

Opened #192 audit the symbol names for idiocy 2026-11-06 04:40:58 +01:00