151 lines
5.1 KiB
Plaintext
151 lines
5.1 KiB
Plaintext
###############################################################################
|
||
# AdGuard Shield - Konfigurationsdatei
|
||
# Schutz vor übermäßigen DNS-Anfragen einzelner Clients
|
||
###############################################################################
|
||
|
||
# --- AdGuard Home API Einstellungen ---
|
||
# URL der AdGuard Home Web-Oberfläche (ohne trailing slash)
|
||
ADGUARD_URL="https://dns1.domain.com"
|
||
|
||
# AdGuard Home Zugangsdaten (Web-UI Login)
|
||
ADGUARD_USER="admin"
|
||
ADGUARD_PASS='changeme'
|
||
|
||
# --- Rate-Limit Einstellungen ---
|
||
# Maximale Anfragen pro Domain pro Client innerhalb des Zeitfensters
|
||
RATE_LIMIT_MAX_REQUESTS=30
|
||
|
||
# Zeitfenster in Sekunden (60 = 1 Minute)
|
||
RATE_LIMIT_WINDOW=60
|
||
|
||
# Wie oft das Script die Logs prüft (in Sekunden)
|
||
CHECK_INTERVAL=10
|
||
|
||
# --- Subdomain-Flood-Erkennung (Random Subdomain Attack) ---
|
||
# Erkennt Bots/Clients die massenhaft zufällige Subdomains einer Domain abfragen
|
||
# Beispiel: abc123.microsoft.com, xyz456.microsoft.com, ...
|
||
# Dabei wird pro Client gezählt, wie viele EINDEUTIGE Subdomains einer
|
||
# Basisdomain (z.B. microsoft.com) im Zeitfenster aufgerufen werden.
|
||
|
||
# Subdomain-Flood-Erkennung aktivieren
|
||
SUBDOMAIN_FLOOD_ENABLED=true
|
||
|
||
# Maximale Anzahl eindeutiger Subdomains pro Basisdomain pro Client im Zeitfenster
|
||
# Beispiel: 50 = ein Client darf max. 50 verschiedene Subdomains von microsoft.com abfragen
|
||
SUBDOMAIN_FLOOD_MAX_UNIQUE=50
|
||
|
||
# Zeitfenster in Sekunden für die Subdomain-Flood-Erkennung (60 = 1 Minute)
|
||
SUBDOMAIN_FLOOD_WINDOW=60
|
||
|
||
# --- Sperr-Einstellungen ---
|
||
# Wie lange ein Client gesperrt wird (in Sekunden, 3600 = 1 Stunde)
|
||
BAN_DURATION=3600
|
||
|
||
# iptables Chain-Name für die Sperren
|
||
IPTABLES_CHAIN="ADGUARD_SHIELD"
|
||
|
||
# Welche Ports gesperrt werden sollen (IPv4 + IPv6)
|
||
# Port 53 = DNS (UDP + TCP)
|
||
# Port 443 = DNS-over-HTTPS (DoH)
|
||
# Port 853 = DNS-over-TLS (tls://...:853) / DNS-over-QUIC (quic://...:853)
|
||
# Hinweis: Das verwendete Protokoll (DNS/DoH/DoT/DoQ) wird automatisch
|
||
# aus der AdGuard Home API erkannt und in Logs/History angezeigt.
|
||
BLOCKED_PORTS="53 443 853"
|
||
|
||
# --- Whitelist ---
|
||
# IP-Adressen die NIEMALS gesperrt werden (kommagetrennt)
|
||
# Lokale Netze und wichtige Server hier eintragen
|
||
WHITELIST="127.0.0.1,::1"
|
||
|
||
# --- Logging ---
|
||
# Log-Datei Pfad
|
||
LOG_FILE="/var/log/adguard-shield.log"
|
||
|
||
# Log-Level: DEBUG, INFO, WARN, ERROR
|
||
LOG_LEVEL="INFO"
|
||
|
||
# Maximale Größe der Log-Datei in MB (danach wird rotiert)
|
||
LOG_MAX_SIZE_MB=50
|
||
|
||
# Ban-History Datei (protokolliert alle Sperren & Entsperrungen dauerhaft)
|
||
BAN_HISTORY_FILE="/var/log/adguard-shield-bans.log"
|
||
|
||
# --- Benachrichtigungen (optional) ---
|
||
# Aktiviert Benachrichtigungen bei Sperren/Entsperrungen
|
||
NOTIFY_ENABLED=false
|
||
|
||
# Benachrichtigungs-Typ: "ntfy", "discord", "slack", "gotify", "generic"
|
||
NOTIFY_TYPE="ntfy"
|
||
|
||
# Webhook-URL (nur für discord, slack, gotify, generic – bei ntfy nicht nötig)
|
||
# Discord: https://discord.com/api/webhooks/xxx/yyy
|
||
# Gotify: https://gotify.example.com/message?token=xxx
|
||
NOTIFY_WEBHOOK_URL=""
|
||
|
||
# --- Ntfy Einstellungen (nur bei NOTIFY_TYPE="ntfy") ---
|
||
# Server-URL der Ntfy-Instanz (ohne trailing slash)
|
||
NTFY_SERVER_URL="https://ntfy.sh"
|
||
|
||
# Topic-Name für die Benachrichtigungen
|
||
NTFY_TOPIC=""
|
||
|
||
# Optionaler Access-Token (leer lassen wenn nicht benötigt)
|
||
NTFY_TOKEN=""
|
||
|
||
# Priorität der Ntfy-Nachrichten (1=min, 3=default, 5=max)
|
||
NTFY_PRIORITY="4"
|
||
|
||
# --- Externe Blocklist (optional) ---
|
||
# Aktiviert den externen Blocklist-Worker
|
||
EXTERNAL_BLOCKLIST_ENABLED=false
|
||
|
||
# URL(s) zu externen Textdateien mit IP-Adressen (eine IP pro Zeile)
|
||
# Mehrere URLs kommagetrennt angeben
|
||
# Beispiel: "https://example.com/blocklist.txt,https://other.com/bad-ips.txt"
|
||
EXTERNAL_BLOCKLIST_URLS=""
|
||
|
||
# Wie oft die externe Blocklist geprüft wird (in Sekunden, 300 = 5 Minuten)
|
||
EXTERNAL_BLOCKLIST_INTERVAL=300
|
||
|
||
# Sperrdauer für externe Blocklist-IPs in Sekunden (0 = permanent bis IP aus Liste entfernt)
|
||
EXTERNAL_BLOCKLIST_BAN_DURATION=0
|
||
|
||
# Automatisch IPs entsperren die aus der externen Liste entfernt wurden?
|
||
EXTERNAL_BLOCKLIST_AUTO_UNBAN=true
|
||
|
||
# Lokaler Cache-Pfad für die heruntergeladene Blocklist
|
||
EXTERNAL_BLOCKLIST_CACHE_DIR="/var/lib/adguard-shield/external-blocklist"
|
||
|
||
# --- Progressive Sperren (Recidive) ---
|
||
# Wiederholungstäter werden stufenweise länger gesperrt (wie bei fail2ban)
|
||
# Aktiviert das progressive Sperrsystem
|
||
PROGRESSIVE_BAN_ENABLED=true
|
||
|
||
# Multiplikator pro Wiederholung (2 = Verdopplung der Sperrdauer)
|
||
# Stufe 1: BAN_DURATION × 1 (Standard-Sperrdauer)
|
||
# Stufe 2: BAN_DURATION × 2
|
||
# Stufe 3: BAN_DURATION × 4
|
||
# Stufe 4: BAN_DURATION × 8 ... usw.
|
||
PROGRESSIVE_BAN_MULTIPLIER=2
|
||
|
||
# Ab dieser Stufe wird die IP permanent gesperrt (0 = nie permanent sperren)
|
||
# Beispiel: 5 = nach dem 5. Vergehen wird die IP dauerhaft gesperrt
|
||
PROGRESSIVE_BAN_MAX_LEVEL=5
|
||
|
||
# Nach wie vielen Sekunden ohne erneutes Vergehen wird der Zähler zurückgesetzt
|
||
# (86400 = 24 Stunden, 604800 = 7 Tage)
|
||
PROGRESSIVE_BAN_RESET_AFTER=86400
|
||
|
||
# --- Erweiterte Einstellungen ---
|
||
# Pfad zur State-Datei (speichert aktive Sperren)
|
||
STATE_DIR="/var/lib/adguard-shield"
|
||
|
||
# Pfad zum PID-File
|
||
PID_FILE="/var/run/adguard-shield.pid"
|
||
|
||
# Anzahl der API-Einträge die pro Abfrage geholt werden (max 5000)
|
||
API_QUERY_LIMIT=500
|
||
|
||
# Dry-Run Modus: true = nur loggen, nicht sperren (zum Testen)
|
||
DRY_RUN=false
|