Shieldlist controller — ingestion, parsing, rules, sanctions, API and web interface
  • Go 70.3%
  • JavaScript 22.1%
  • CSS 5.9%
  • Shell 1.1%
  • HTML 0.3%
  • Other 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Robin 35415adbd7 The development suite is called dev, not beta
"beta" named a state of the product, not a channel, and the two kept
being taken for each other. stable carries the releases and is what the
documented sources line installs; dev carries the development builds.

Signed-off-by: Robin <git@lrob.net>
2026-08-26 21:01:20 +00:00
assets the Shieldlist icon 2026-08-16 16:33:41 +00:00
cmd/shieldlist-controller Hits history: persist on a tick, off the sync round trip 2026-08-25 16:50:03 +00:00
docs docs: the reporting switch (abuseipdb.enabled) 2026-08-24 10:08:45 +00:00
internal Check addresses: what the fleet does with them, one or a thousand 2026-08-26 19:18:04 +00:00
packaging The development suite is called dev, not beta 2026-08-26 21:01:20 +00:00
proto/shieldlist/v1 Prod and test, two axes: the console's filters, the chart's series, the hit flow, the word in the files 2026-08-22 23:06:21 +00:00
scripts log_file for the controller, logrotate in the package, cache sized from the machine's memory, fleet copies folded under their decision 2026-08-21 17:06:40 +00:00
.gitignore release: build products outside the repository, the agent's release script (notes, loud failures), the unit in the assets 2026-08-16 01:50:16 +00:00
buf.gen.yaml protocol v1 and the store 2026-08-15 15:19:54 +00:00
buf.yaml protocol v1 and the store 2026-08-15 15:19:54 +00:00
CLAUDE.md the controller starts: configuration tree, per-agent assembly, -t 2026-08-15 15:10:24 +00:00
CONTRIBUTING.md The development suite is called dev, not beta 2026-08-26 21:01:20 +00:00
go.mod Reporting switch and honest counters; settings reorganised; the map breathes on long windows 2026-08-23 23:03:53 +00:00
go.sum Reporting switch and honest counters; settings reorganised; the map breathes on long windows 2026-08-23 23:03:53 +00:00
LICENSE Add AGPL-3.0-only licensing 2026-08-06 20:13:38 +00:00
Makefile make vet: the gofmt barrier holds under dash (read -r _line); gofmt 2026-08-22 14:32:46 +00:00
README.md The development suite is called dev, not beta 2026-08-26 21:01:20 +00:00
THIRD_PARTY_LICENSES Man page shieldlist-controller.8, third-party licence notices, suite beta 2026-08-17 13:47:59 +00:00

shieldlist-controller

The central service for a fleet of Shieldlist agents: it assembles and pushes each machine's configuration, records the sanctions agents decide and redistributes them to the fleet, takes the operator's decisions — lift, exempt, settle a machine, edit a rule — and shows it all in a console and through an API. Log ingestion, fleet-wide detection and controller-side reporting come next (SPEC §10).

The product specification is docs/SPEC.md; the configuration reference — the agent's files, the controller's tree, the API and the console — is docs/CONFIG.md. The agent that runs on protected machines lives in shieldlist-agent; the wire protocol it implements is published here, in proto/shieldlist/v1/agent.proto.

Running it

shieldlist-controller -t -config /etc/shieldlist/controller   # validate the tree, every machine's assembly included
shieldlist-controller -config /etc/shieldlist/controller      # serve: agents on :17453, API and console on 127.0.0.1:17454
shieldlist-controller account -name you                        # the first person; api-token -name x for a script
shieldlist-controller token                                    # a join token; then `shield enrol <token>` on the machine

On Debian and its derivatives, from the APT repository (https://repo.lrob.net/apt/shieldlist/ — the key, the suites stable and dev, and the two lines to add are on that page; fingerprint B528 0C88 7016 8A94 40A9 05C4 3BB5 8113 CFAB 6DC5): apt install shieldlist-controller, or apt install ./shieldlist-controller_<version>_<arch>.deb from the release page (one per architecture). The package creates the shieldlist user, a starter tree under /etc/shieldlist/controller (local listeners, no rules yet), and enables the service. packaging/ holds the unit and the hand-install notes for other systems. shield -controller URL -token T drives the fleet from any machine.

Third-party software

The binaries link a handful of Go modules, each under its own licence: yaml.v3 (MIT/Apache-2.0), modernc.org/sqlite with libc, mathutil and memory (BSD-3), google.golang.org/protobuf (BSD-3), golang.org/x/sys, x/crypto and x/term (BSD-3), github.com/google/uuid (BSD-3), github.com/dustin/go-humanize (MIT), github.com/remyoudompheng/bigfft (BSD-3). Their licence texts are reproduced in THIRD_PARTY_LICENSES (regenerated by make third-party from what is actually linked) and shipped in the packages under /usr/share/doc/shieldlist-controller/. Shieldlist itself is free software under the GNU AGPL v3.

Contributing

See CONTRIBUTING.md. Go 1.25; make proto regenerates the protocol (buf, protoc-gen-go); the rule language is imported from the agent's public config package.

License

This project is licensed under the GNU Affero General Public License v3.0 — see the LICENSE file.

SPDX identifier: AGPL-3.0-only

Credits

Shieldlist stands on other people's work, credited here, on the console's Settings → About page, and in the wiki.

  • Map: Natural Earth country outlines (public domain), embedded — no tiles, no third party at run time.
  • Geolocation: with geoip: {source: dbip} the controller fetches the free DB-IP Lite country, ASN and (optionally) city databases monthly — IP Geolocation by DB-IP, CC BY 4.0.
  • Published blocklists (the console's catalogue, fetched only when turned on): malicious-ip by Romain Marcoux, an hourly aggregate of fifteen threat feeds, MIT licence.
  • Published allow lists (sources:, fetched only when turned on): the address ranges their publishers make public — Google (Googlebot, special crawlers), Microsoft (Bingbot), Apple (Applebot), DuckDuckGo (DuckDuckBot), OpenAI (OAI-SearchBot, ChatGPT-User, GPTBot), Cloudflare, Fastly, Ahrefs, Automattic (Jetpack), UptimeRobot, Pingdom, Stripe (webhooks).
  • Rules: parts of the rule packs are translated from the CrowdSec hub (MIT) and the bad-bots list is built from Mitchell Krogza's nginx-ultimate-bad-bot-blocker — both credited in the rules repository too.
  • Software: the Go modules listed under Third-party software.