A dynamic key-value IP allowlist for Nginx
Details
- External ID
- 46438836
- Source
- HN
- Company
- —
- Product
- A dynamic key-value IP allowlist for Nginx
- Website domain
- github.com
- Launched
- Dec. 30, 2025
- Cohort
- —
- Upvotes
- 5
- Upvotes percentile
- 0.10400763358778627
- Tags
- —
- Fetched at
- Sept. 7, 2026, 9:25 p.m.
- Updated at
- Sept. 7, 2026, 9:25 p.m.
Description
I am currently working on a larger project that needs a short-lived HTTP "auth" based on a separate, out-of-band authentication process. Since every allowed IP only needs to be allowed for a few minutes at a time on specific server names, I created this project to solve that. It should work with any Redis-compatible database. For the docker-compose example, I used valkey.This is mostly useful if you have multiple domains that you want to control access to. If you want to allow 1.1.1.1 to mywebsite.com and securesite.com, and 2.2.2.2 to securesite.com and anothersite.org for certain TTLs, you just need to set hash keys in your Redis-compatible database of choice like:1.1.1.1: - mywebsite.com: 1 (30 sec TTL) - securesite.com: 1 (15 sec TTL) 2.2.2.2: - securesite.com: 1 (3600 sec TTL) - anothersite.org: 1 (never expires) Since you can use any Redis-compatible database as the backend, per-entry TTLs are encouraged.An in-process cache can also be used, but is not enabled unless you pass --enable-l1-cache to kvauth. That makes successful auth_requests a lot faster since the program is not reaching out to the key/value database on every request.I didn't do any hardcore profiling on this but did enable the chi logger middleware to see how long requests generally took:kvauth-1 | 2025/12/30 21:32:28 "GET http://127.0.0.1:8888/kvauth HTTP/1.0" from 127.0.0.1:42038 - 401 0B in 300.462µs # disallowed requestnginx-1 | 192.168.65.1 - - [30/Dec/2025:21:32:28 +0000] "GET / HTTP/1.1" 401 179 "-" "curl/8.7.1"kvauth-1 | 2025/12/30 21:32:37 "GET http://127.0.0.1:8888/kvauth HTTP/1.0" from 127.0.0.1:40160 - 401 0B in 226.189µs # disallowed requestnginx-1 | 192.168.65.1 - - [30/Dec/2025:21:32:37 +0000] "GET / HTTP/1.1" 401 179 "-" "curl/8.7.1"# IP added to redis allowlistkvauth-1 | 2025/12/30 21:34:02 "GET http://127.0.0.1:8888/kvauth HTTP/1.0" from 127.0.0.1:54032 - 200 0B in 290.648µs # allowed, but had to reach out to valkeykvauth-1 | 2025/12/30 21:34:02 "GET http://127.0.0.1:8888/kvauth HTTP/1.0" from 127.0.0.1:54044 - 200 0B in 4.041µsnginx-1 | 192.168.65.1 - - [30/Dec/2025:21:34:02 +0000] "GET / HTTP/1.1" 200 111 "-" "curl/8.7.1"kvauth-1 | 2025/12/30 21:34:06 "GET http://127.0.0.1:8888/kvauth HTTP/1.0" from 127.0.0.1:51494 - 200 0B in 6.617µs # allowed, used cachekvauth-1 | 2025/12/30 21:34:06 "GET http://127.0.0.1:8888/kvauth HTTP/1.0" from 127.0.0.1:51496 - 200 0B in 3.313µsnginx-1 | 192.168.65.1 - - [30/Dec/2025:21:34:06 +0000] "GET / HTTP/1.1" 200 111 "-" "curl/8.7.1IP allowlisting isn't true authentication, and any production implementation of this project should use it as just a piece of the auth flow. This was made to solve the very specific problem of a dynamic IP allow list for NGINX.
Enrichment
- Theme
- self-hosted infrastructure and security tools
- Vertical
- Security
- Function
- Dev tools
- Audience
- Developer
- AI stance
- Not AI
- Project type
- Commercial product
- Normalized one-liner
- ip allowlist management for nginx
- Manually corrected
- False
Could you build this?
Yes This can be built easily with an Nginx OpenResty/Lua module or dynamic auth_request endpoint querying a Redis key-value store with TTLs.
Discussion
No comments on this launch.
Competitors
Other products that read as similar to this one — 74 launches clear the similarity bar, closest 8 shown.
Attention rank: #72 of 75 (itself plus its competitors, highest first — normalized so YC and Product Hunt are compared fairly).
Launched 62 days after the earliest competitor.
- Open Passkey · hn · 2026-04-19 · 10 upvotes · similarity 0.44
- Server Config Generator · ph · 2026-09-29 · 2 upvotes · similarity 0.40
- CipherStash Stack · hn · 2026-05-21 · 17 upvotes · similarity 0.40
- Browser-based Nginx config generator with live preview · hn · 2026-09-09 · 5 upvotes · similarity 0.40
- Arxid · hn · 2026-08-05 · 8 upvotes · similarity 0.39
- Minimal NIST/OWASP-compliant auth implementation for Cloudflare Workers · hn · 2026-02-09 · 33 upvotes · similarity 0.38
- jev-safety-gateway · github · 2026-09-24 · 10 upvotes · similarity 0.38
- D.NIX. · ph · 2026-09-20 · 2 upvotes · similarity 0.37
Other launches for this product
- No other launches for this product.
Same idea, different domain
Nobody's really built a dev tools tool for Sales yet.