Shieldlist controller — ingestion, parsing, rules, sanctions, API and web interface
  • Go 73.4%
  • JavaScript 21.2%
  • CSS 4.3%
  • Shell 0.6%
  • HTML 0.3%
  • Other 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-16 17:16:37 +00:00
assets the Shieldlist icon 2026-08-16 16:33:41 +00:00
cmd/shieldlist-controller store: name the start index on bounded windows; facets memo scales with the window; lighter reload on a published set 2026-10-15 15:10:55 +00:00
docs spec: what the built releases lack of the settled text; a list blocks where the operator says; desk mails carry the lines; a lift wipes the slate; owners live in the store 2026-10-16 17:16:37 +00:00
internal api: covering readable with activity; me/exempt and network offenders admin-only; an owner's own reputation view bounded to its machines; a lift reserved to the administrator is refused out loud and audited; reporting.renew drives the controller's renewals 2026-10-16 17:16:37 +00:00
packaging a declaration that leaves packs: out runs the controller's default packs, as no declaration does — a file written to arm a machine took every rule away from it; packs: [] means none; the postinst names the account first 2026-09-28 14:49:22 +00:00
proto/shieldlist/v1 bans: what a repeat offender had to reach — the agent's need and prior bans received, kept and shown: "Repeat offender · 15/1m" where "60/1m" convicted nobody 2026-10-06 00:32:04 +00:00
scripts Comments say what the code does, not who asked or when 2026-10-14 14:39:20 +00:00
shipped Comments say what the code does, not who asked or when 2026-10-14 14:39:20 +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 console: the chosen ban colour is the ban colour everywhere 2026-09-07 13:55:06 +00:00
CONTRIBUTING.md The development suite is called dev, not beta 2026-08-26 21:01:20 +00:00
go.mod go.mod: the agent module at the commit that lets a report include the host 2026-10-14 17:02:56 +00:00
go.sum go.mod: the agent module at the commit that lets a report include the host 2026-10-14 17:02:56 +00:00
LICENSE Add AGPL-3.0-only licensing 2026-08-06 20:13:38 +00:00
Makefile deb: the binary carries the package version, build number included 2026-10-07 07:00:13 +00:00
README.md docs: the library is the package's, under /usr/share/shieldlist-controller — replaced by an upgrade, shadowed by name from the tree 2026-09-28 14:15:16 +00:00
THIRD_PARTY_LICENSES owner reports: the bounces read back, the desks that bounce left alone 2026-09-20 10:18:23 +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 — reports the offenders to a reputation database and to the abuse desks of the networks they come from, reads what the desks answer, and shows it all in a console and through an API. Log ingestion and fleet-wide detection 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, puts the free rule library under /usr/share/shieldlist-controller (six packs, given to every machine that enrols without a declaration, in test), writes a starter tree under /etc/shieldlist/controller (local listeners), and enables the service; shieldlist-controller init does the same by hand, never replacing a file. 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), github.com/emersion/go-imap (MIT). 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, DuckAssistBot), OpenAI (OAI-SearchBot, ChatGPT-User, GPTBot), Anthropic (Claude-User, Claude-SearchBot, ClaudeBot), Perplexity (Perplexity-User, PerplexityBot), Mistral AI (MistralAI-User, MistralAI-Index; and its outbound addresses, for MCP connectors), Google's user-triggered fetchers, PrestaShop (CloudSync), Cloudflare, Fastly, Ahrefs, Automattic (Jetpack), UptimeRobot, Pingdom, Stripe (webhooks).
  • Abuse reports: the X-ARF export and the mails to the networks' abuse desks follow the XARF specification (v4) by the XARF Project, MIT licence — xarf.org. The abuse desks are found through the free Abusix Abuse Contact DB (one DNS query per network, drawn from the RIRs' records; each mail acknowledges it, as they ask); then, when the operator keeps them locally, the registries' own databases — the RIPE Database (data of the RIPE NCC, under the RIPE Database Terms and Conditions) and the AFRINIC database (data of AFRINIC, under its Database Terms and Conditions), fetched as their published dumps, personal data removed by the registries — and, failing that, the registries' own RDAP service via rdap.org. The delivery failures are read over IMAP with go-imap by Simon Ser (MIT).
  • 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.