Skip to content

Threat Intel Scrany (TIS)

TIS collects threat-intelligence indicators (IPv4/IPv6 addresses and networks, domain names, URLs) from public and commercial feeds, keeps them in Postgres, and serves them as ready-to-use blocklists for firewalls, routers and DNS resolvers (BIND/Unbound RPZ, zone files, hosts files).

It is operated through a web GUI at /app, an interactive CLI (in the browser via ttyd at /cli) and a token-secured REST API (browsable at /api). Client machines pull their blocklists with tis-pull.sh from cron.

How it works

flowchart LR
    feeds["Threat feeds<br/>(plain, hosts, JSON, CSV)"] -->|scheduled fetch| worker
    push["tis-push.sh / POST /import"] -->|push| api
    admin["Admin<br/>(CLI at /cli, API)"] --> api
    subgraph tis-worker
        worker["Scheduler + Fetcher"]
        api["REST API :3000"]
    end
    worker --> db[("Postgres<br/>tis-db")]
    api --> db
    api <--> cache[("Redis<br/>tis-cache")]
    worker <-.->|schedule resync| cache
    api -->|/cli proxy| cli["tis-cli<br/>(ttyd + CLI)"]
    cli --> db
    clients["Customer machines<br/>tis-pull.sh"] -->|GET /export...| api
  • Sources describe where indicators come from: a feed fetched on a schedule, an import-only source fed by tis-push.sh, or a hand-curated manual source.
  • Indicators are stored per source, normalised (CIDRs split into address + netmask, domains lowercased) and expire when a feed stops listing them, unless they are permanent.
  • Groups bundle sources with their own whitelist and blacklist, so a customer's machines pull one group instead of a list of source IDs.
  • Exports merge and deduplicate indicators in the requested format, applying whitelists.
  • Tokens authenticate API clients; roles and ACL patterns decide what each token can reach.

Where to go next

I want to… Page
install or upgrade TIS Installation & Deployment
change settings (retention, Redis, OIDC, …) Configuration
add a feed or a manual blocklist Sources, Indicators
serve one customer several sources at once Groups
understand the output formats and whitelisting Export
give someone API access Tokens & ACL
call the API API Reference
manage everything in the browser Web GUI
look up a CLI command CLI Reference
deploy blocklists to a server with cron Client Scripts
work on the code Development

Glossary

Term Meaning
Indicator One blockable value: ipv4, ipv6 (with netmask), fqdn, url or json.
Source Origin of indicators; unique name (slug). Feed, import-only or manual.
Private source Excluded from the public export; reachable only through per-source, multi-source or group exports.
Permanent indicator Never removed by retention pruning.
Group Named set of sources + group whitelist/blacklist, exported together.
Whitelist Values never exported (IPs/CIDRs, domain globs such as *.example.com).
Blacklist Values a group always exports, on top of its sources.
Pruning Daily job soft-deleting indicators not seen for daysRetention days.
RPZ DNS Response Policy Zone – a zone file BIND/Unbound use to block names.
TID Threat Intel Daemon – the worker process (scheduler + API).