alleyviperandroot 5bdfd99c4d feat(anis): auto-provision ANIS Community Edition on fresh installs (Phase 4)
Changed the ANIS_URL default from the docker-internal
"http://argus-anis:8090" to the public Community Edition hub
(https://anis.weboria.eu). That internal default was dead on arrival for
every real deployment path: neither docker/docker-compose.yml nor
distribution/docker-compose.yml bundles its own ANIS container (confirmed
via grep — only the dev-only docker-compose.local-sandbox.yml does, and
it already sets ANIS_URL explicitly, so it's unaffected by this change),
so a fresh install using either client-facing compose file previously got
ANIS_ENABLED=false and an empty/unreachable ANIS_URL with no working
threat intelligence out of the box.

An empty license key already grants the "community" tier server-side
(confirmed against ANIS's own RegisterInstance handler in a prior
grounding pass) — no signup or key needed, so defaulting
enabled=true/url=<public hub>/key=empty is a genuine zero-friction
default, not a placeholder pointing at something that doesn't work.
ANIS_ENABLED flipped from :-false to :-true in both compose files'
inline fallback (not just the .env.example docs) since a compose-level
explicit "false" string takes precedence over the Go binary's own
compiled default and previously masked it.

Updated distribution/.env.example and configs/env.example to match.

Live-verified against a genuinely fresh sandbox install (temporarily
unset the sandbox compose's own ANIS_URL override to actually exercise
the new default, reverted before committing — confirmed clean via `git
diff`): anis_settings bootstrapped to
enabled=true/url=https://anis.weboria.eu/license_key=''/bootstrapped=true
on first boot. Re-verified the sandbox's own explicit local override
(http://anis:8090, for its bundled ANIS container) still wins unaffected
after reverting.
2026-07-25 15:20:10 +00:00

ARGUS

Enterprise Web Security Platform

License Docker

Nginx ModSecurity OWASP CRS HTTP/3

A real-time security operations platform for the modern web edge.
Reverse proxy, Web Application Firewall, bot defense, DNS protection, and live threat investigation — in one appliance.

Features🚀 Installation🛠 Operations📚 API


Key Features

🛡️ Web Application Firewall

ModSecurity v3 with the OWASP Core Rule Set. Paranoia levels 14, per-host rule exceptions, detection-only or blocking modes.

🌐 Attack Origin Visualization

A live global map of inbound attacks — real-time arcs from source to your infrastructure, severity-coded, with instant drill-down into any event's full detail.

🔎 Incident Investigation

Pivot from any IP, log line, or dashboard event straight into that entity's complete history — affected hosts, triggered rules, geography, and live threat-intelligence reputation — without losing your place.

🤖 Bot & AI-Crawler Defense

Blocks known-bad bots and AI scrapers automatically, with a search-engine allowlist so legitimate crawlers are never affected. Escalating challenge modes (browser check, proof-of-work, visual CAPTCHA) for suspicious traffic.

🧬 DNS Security Engine

An embedded forwarding DNS resolver with real-time threat detection — DGA domains, DNS tunneling, fast-flux infrastructure, cache-poisoning attempts — and automatic mitigation via sinkholing.

🌍 GeoIP & Cloud-Provider Access Control

Allow or block traffic by country or hosting provider, with live visual feedback.

🔒 Automated SSL

Let's Encrypt with automatic renewal, including wildcard certificates via DNS-01 challenge (Cloudflare, DuckDNS, Dynu, and more).

Rate Limiting & Auto-Ban

Configurable per-IP/per-URI rate limits, automatic banning on repeated WAF violations, and optional community threat-intelligence-driven blocking.

👥 Full User Management

Role-based access, per-user session control, forced password resets, account lock/unlock, MFA, and a complete login history — everything a security team needs to administer access safely.

📊 Real-Time Operations Dashboard

Live traffic, security events, and system health, updated continuously — no manual refresh.

🔀 Load Balancing & Stream Proxying

Multiple backend servers with health checks, plus TCP/UDP stream proxying with optional SNI routing.

🔮 Modern Protocol Support

HTTP/3 (QUIC) and post-quantum-ready TLS (ML-KEM hybrid key exchange).


🚀 Installation

Requirements

  • A Linux host with Docker 24.0+ and the Docker Compose plugin (docker compose)
  • Ports 80/443 available for the reverse proxy, and 81 for the admin panel (all configurable)

One-line install

curl -fsSL https://raw.githubusercontent.com/alleyviper/argus/main/install.sh | bash

This downloads the deployment files, generates a secure database password, creates the required Docker network, pulls the production images, starts ARGUS, and prints your admin login at the end. Installs to ~/argus by default — set ARGUS_INSTALL_DIR first to change that.

Manual install

If you'd rather see every step:

mkdir -p ~/argus/docker-socket-proxy && cd ~/argus
curl -fsSL https://raw.githubusercontent.com/alleyviper/argus/main/docker-compose.yml -o docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/alleyviper/argus/main/.env.example -o .env
curl -fsSL https://raw.githubusercontent.com/alleyviper/argus/main/docker-socket-proxy/haproxy.cfg.template -o docker-socket-proxy/haproxy.cfg.template

# Generate a secure database password
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$(openssl rand -base64 24)/" .env

# ARGUS expects this network to already exist
docker network create argus-network

docker compose pull
docker compose up -d

Then log in at https://localhost:81 with admin / admin and change the password immediately — the one-line installer does this rotation for you automatically.

Do not expose the admin panel (port 81) to the internet. Keep it on your LAN/VPN, or put it behind its own proxy host with access lists and 2FA enabled.


🛠 Operations

Five scripts cover day-to-day operation — download them once alongside docker-compose.yml (the one-line installer already does this for you), then run from ~/argus (or wherever you installed):

Script Purpose
./update.sh Pull the latest images and restart, with a before/after version check
./healthcheck.sh Report the status of every component and the admin panel
./backup.sh [dir] Back up the database and application data into one archive
./restore.sh <archive> Restore a backup onto a fresh installation
./uninstall.sh [--remove-data] Stop ARGUS; data is kept unless you explicitly opt in to removing it

Upgrading

cd ~/argus
./update.sh

New versions are published to GHCR as soon as they're released — update.sh always pulls the current stable release. This is the only supported upgrade path; there is no separate migration step to run.

Backups

cd ~/argus
./backup.sh                 # writes argus-backup-<timestamp>.tar.gz to the current directory
./restore.sh <archive>      # onto a fresh installation only — see the script's own header

Resetting the admin password

docker compose exec api ./server reset-password

Add --username <name> to target a specific account, or --password '...' to set a known value instead of generating one. See docker compose exec api ./server reset-password --help for the rest of the options (clearing 2FA, etc.).

Threat intelligence integration (optional)

ARGUS can connect to ANIS, a separately-deployed threat-intelligence hub, to share confirmed attacker IPs and receive a community blocklist in return. It's off by default — set ANIS_ENABLED=true and ANIS_URL in .env to turn it on. See the comments in .env.example for the full set of options.


📚 API

ARGUS exposes a full REST API for automation. Authenticate with a JWT (POST /api/v1/auth/login) for interactive use, or an API token (Authorization: Bearer ng_<token>, created from the admin panel) for CI/CD and scripted access. Interactive API documentation is served at https://localhost:81/api/docs once ARGUS is running.


⚙️ Environment Variables

Variable Description Default
DB_PASSWORD Database password (generated by the installer)
TZ Timezone UTC
UI_PORT Admin panel port 81
NGINX_HTTP_PORT / NGINX_HTTPS_PORT Reverse-proxy listen ports 80 / 443
API_HOST_PORT Internal API port exposed to the host 9080
DNS_LISTEN_HOST DNS Security Engine bind address 127.0.0.1
ANIS_ENABLED / ANIS_URL Optional threat-intel hub integration false / (empty)

Full list with descriptions in .env.example.


📄 License

This is proprietary, commercial software — see LICENSE. Third-party open-source components retain their own licenses — see THIRD_PARTY_LICENSES and NOTICE.

💬 Support

GitHub Issues — bug reports and feature requests.


© 2025-2026 ARGUS — AI4SEC.
S
Description
Public installer for the ARGUS security appliance. No proprietary source code — installation scripts, docs, config templates, release notes, checksums.
Readme
148 KiB
Languages
Shell 100%