354 lines
8.2 KiB
Markdown
354 lines
8.2 KiB
Markdown
# Benachrichtigungen
|
|
|
|
AdGuard Shield kann Ereignisse an Ntfy, Discord, Slack, Gotify oder einen eigenen Webhook senden. Benachrichtigungen sind optional und werden über `adguard-shield.conf` gesteuert.
|
|
|
|
## Unterstützte Ereignisse
|
|
|
|
| Ereignis | Beschreibung |
|
|
|---|---|
|
|
| Service gestartet | Daemon wurde gestartet |
|
|
| Service gestoppt | Daemon wurde gestoppt |
|
|
| Automatische Sperre | Rate-Limit- oder Subdomain-Flood-Erkennung |
|
|
| Watchlist-Sperre | DNS-Flood-Watchlist-Treffer (permanent) |
|
|
| Manuelle Sperre | IP wurde manuell per `ban` gesperrt |
|
|
| GeoIP-Sperre | Ländersperre ausgelöst (wenn `GEOIP_NOTIFY=true`) |
|
|
| Blocklist-Sperre | Externe Blocklist (wenn `EXTERNAL_BLOCKLIST_NOTIFY=true`) |
|
|
| Freigabe | IP wurde entsperrt (manuell, abgelaufen oder durch Whitelist) |
|
|
| Bulk-Freigabe | `flush`, `geoip-flush` oder `blocklist-flush` |
|
|
|
|
## Grundkonfiguration
|
|
|
|
```bash
|
|
NOTIFY_ENABLED=true
|
|
NOTIFY_TYPE="ntfy" # ntfy, discord, slack, gotify oder generic
|
|
```
|
|
|
|
### Mögliche Typen
|
|
|
|
| Typ | Protokoll | Beschreibung |
|
|
|---|---|---|
|
|
| `ntfy` | HTTP POST | Push-Benachrichtigungen über ntfy.sh oder selbst gehostete Instanz |
|
|
| `discord` | Webhook | Discord-Kanal-Webhook |
|
|
| `slack` | Webhook | Slack Incoming Webhook |
|
|
| `gotify` | HTTP POST | Gotify-Server mit App-Token |
|
|
| `generic` | HTTP POST (JSON) | Eigener Webhook-Endpunkt |
|
|
|
|
Nach Änderungen:
|
|
|
|
```bash
|
|
sudo systemctl restart adguard-shield
|
|
```
|
|
|
|
---
|
|
|
|
## Ntfy
|
|
|
|
Ntfy ist der einfachste Einstieg, weil kein komplexer Webhook-Body benötigt wird.
|
|
|
|
### Konfiguration
|
|
|
|
```bash
|
|
NOTIFY_ENABLED=true
|
|
NOTIFY_TYPE="ntfy"
|
|
NTFY_SERVER_URL="https://ntfy.sh"
|
|
NTFY_TOPIC="adguard-shield"
|
|
NTFY_TOKEN=""
|
|
NTFY_PRIORITY="4"
|
|
```
|
|
|
|
### Eigene Ntfy-Instanz
|
|
|
|
```bash
|
|
NTFY_SERVER_URL="https://ntfy.example.com"
|
|
NTFY_TOPIC="dns-security"
|
|
NTFY_TOKEN="tk_geheimer_token"
|
|
```
|
|
|
|
### Prioritäten
|
|
|
|
| Wert | Bedeutung | Beschreibung |
|
|
|---:|---|---|
|
|
| `1` | Minimum | Keine Benachrichtigung auf dem Gerät |
|
|
| `2` | Niedrig | Leise Benachrichtigung |
|
|
| `3` | Standard | Normale Benachrichtigung |
|
|
| `4` | Hoch | Benachrichtigung mit Ton |
|
|
| `5` | Maximum | Dringende Benachrichtigung |
|
|
|
|
### Hinweise
|
|
|
|
- Bei `NOTIFY_TYPE="ntfy"` wird `NOTIFY_WEBHOOK_URL` nicht verwendet.
|
|
- Bei privaten Topics oder eigener Instanz ist ein Token empfehlenswert.
|
|
- Der Topic-Name sollte nicht öffentlich erratbar sein, um Fremdzugriff zu verhindern.
|
|
|
|
---
|
|
|
|
## Discord
|
|
|
|
### Konfiguration
|
|
|
|
```bash
|
|
NOTIFY_ENABLED=true
|
|
NOTIFY_TYPE="discord"
|
|
NOTIFY_WEBHOOK_URL="https://discord.com/api/webhooks/xxx/yyy"
|
|
```
|
|
|
|
### Webhook erstellen
|
|
|
|
1. Discord-Server öffnen.
|
|
2. Servereinstellungen > Integrationen > Webhooks.
|
|
3. Neuen Webhook erstellen.
|
|
4. Gewünschten Kanal auswählen.
|
|
5. URL kopieren und in `NOTIFY_WEBHOOK_URL` eintragen.
|
|
|
|
Discord erhält den Inhalt als `content`-Feld im JSON-Body.
|
|
|
|
---
|
|
|
|
## Slack
|
|
|
|
### Konfiguration
|
|
|
|
```bash
|
|
NOTIFY_ENABLED=true
|
|
NOTIFY_TYPE="slack"
|
|
NOTIFY_WEBHOOK_URL="https://hooks.slack.com/services/xxx/yyy/zzz"
|
|
```
|
|
|
|
### Webhook einrichten
|
|
|
|
1. Slack-App mit Incoming Webhooks erstellen oder vorhandene App verwenden.
|
|
2. Webhook für den gewünschten Channel aktivieren.
|
|
3. Webhook-URL in die Konfiguration kopieren.
|
|
|
|
Slack erhält den Inhalt als `text`-Feld im JSON-Body.
|
|
|
|
---
|
|
|
|
## Gotify
|
|
|
|
### Konfiguration
|
|
|
|
```bash
|
|
NOTIFY_ENABLED=true
|
|
NOTIFY_TYPE="gotify"
|
|
NOTIFY_WEBHOOK_URL="https://gotify.example.com/message?token=xxx"
|
|
```
|
|
|
|
### Token erstellen
|
|
|
|
1. Gotify-Weboberfläche öffnen.
|
|
2. Apps > App erstellen.
|
|
3. Token aus der App kopieren und in die URL einsetzen.
|
|
|
|
Gotify erhält `title`, `message` und `priority` als Formularwerte.
|
|
|
|
---
|
|
|
|
## Generic Webhook
|
|
|
|
Für eigene Automatisierung oder Anbindung an andere Systeme.
|
|
|
|
### Konfiguration
|
|
|
|
```bash
|
|
NOTIFY_ENABLED=true
|
|
NOTIFY_TYPE="generic"
|
|
NOTIFY_WEBHOOK_URL="https://example.com/adguard-shield-webhook"
|
|
```
|
|
|
|
### JSON-Payload
|
|
|
|
AdGuard Shield sendet einen `POST` mit folgendem JSON-Body:
|
|
|
|
```json
|
|
{
|
|
"title": "AdGuard Shield",
|
|
"message": "AdGuard Shield Ban auf dns1\n---\nIP: 192.168.1.50\nHostname: client.local\nGrund: 45x example.com in 60s via DNS, Rate-Limit\nDauer: 1h 0m [Stufe 1/5]\n\nAbuseIPDB: https://www.abuseipdb.com/check/192.168.1.50",
|
|
"client": "192.168.1.50",
|
|
"action": "ban"
|
|
}
|
|
```
|
|
|
|
### Mögliche `action`-Werte
|
|
|
|
| Aktion | Bedeutung |
|
|
|---|---|
|
|
| `ban` | Sperre wurde gesetzt |
|
|
| `unban` | Sperre wurde aufgehoben |
|
|
| `manual-flush` | Bulk-Freigabe aller Sperren |
|
|
| `geoip-flush` | Bulk-Freigabe aller GeoIP-Sperren |
|
|
| `external-blocklist-flush` | Bulk-Freigabe aller externen Blocklist-Sperren |
|
|
| `service_start` | Service wurde gestartet |
|
|
| `service_stop` | Service wurde gestoppt |
|
|
|
|
---
|
|
|
|
## Separate Steuerung für Module
|
|
|
|
### Externe Blocklist
|
|
|
|
```bash
|
|
EXTERNAL_BLOCKLIST_NOTIFY=false
|
|
```
|
|
|
|
**Warum separat?** Eine große Blocklist kann beim ersten Sync hunderte oder tausende IPs sperren. Wenn jede Sperre eine Nachricht erzeugt, wird der Benachrichtigungskanal unbrauchbar.
|
|
|
|
| Listengröße | Empfehlung |
|
|
|---|---|
|
|
| Große Listen (>100 IPs) | `EXTERNAL_BLOCKLIST_NOTIFY=false` (Standard) |
|
|
| Kleine, kuratierte Listen (<50 IPs) | `EXTERNAL_BLOCKLIST_NOTIFY=true` möglich |
|
|
|
|
### GeoIP
|
|
|
|
```bash
|
|
GEOIP_NOTIFY=true
|
|
```
|
|
|
|
Wenn GeoIP aktiv ist, aber keine Nachrichten für GeoIP-Sperren gesendet werden sollen:
|
|
|
|
```bash
|
|
GEOIP_NOTIFY=false
|
|
```
|
|
|
|
---
|
|
|
|
## Bulk-Freigaben
|
|
|
|
Diese Befehle können viele IPs auf einmal freigeben:
|
|
|
|
```bash
|
|
sudo /opt/adguard-shield/adguard-shield flush
|
|
sudo /opt/adguard-shield/adguard-shield geoip-flush
|
|
sudo /opt/adguard-shield/adguard-shield blocklist-flush
|
|
```
|
|
|
|
AdGuard Shield sendet dafür **nicht** eine Nachricht pro IP, sondern eine zusammenfassende Meldung mit der Anzahl der freigegebenen Sperren.
|
|
|
|
---
|
|
|
|
## AbuseIPDB-Hinweis in Nachrichten
|
|
|
|
Bei permanenten Monitor-Sperren kann AdGuard Shield zusätzlich an AbuseIPDB melden.
|
|
|
|
**Voraussetzungen:**
|
|
|
|
```bash
|
|
ABUSEIPDB_ENABLED=true
|
|
ABUSEIPDB_API_KEY="..."
|
|
```
|
|
|
|
**Verhalten:**
|
|
|
|
- Wenn eine AbuseIPDB-Meldung ausgelöst wurde, enthält die Ban-Nachricht einen entsprechenden Hinweis.
|
|
- Jede Ban- und Unban-Nachricht enthält einen Link zur AbuseIPDB-Check-Seite der IP.
|
|
- AbuseIPDB wird nicht für GeoIP- oder externe Blocklist-Sperren verwendet.
|
|
|
|
---
|
|
|
|
## Beispielinhalte
|
|
|
|
### Service gestartet
|
|
|
|
```text
|
|
AdGuard Shield v1.0.0 wurde auf dns1 gestartet.
|
|
```
|
|
|
|
### Service gestoppt
|
|
|
|
```text
|
|
AdGuard Shield v1.0.0 wurde auf dns1 gestoppt.
|
|
```
|
|
|
|
### Rate-Limit-Sperre
|
|
|
|
```text
|
|
AdGuard Shield Ban auf dns1
|
|
---
|
|
IP: 192.0.2.50
|
|
Hostname: client.example.com
|
|
Grund: 45x example.com in 60s via DNS, Rate-Limit
|
|
Dauer: 1h 0m [Stufe 1/5]
|
|
|
|
AbuseIPDB: https://www.abuseipdb.com/check/192.0.2.50
|
|
```
|
|
|
|
### Watchlist-Sperre
|
|
|
|
```text
|
|
AdGuard Shield Ban auf dns1
|
|
IP wurde an AbuseIPDB gemeldet
|
|
---
|
|
IP: 192.0.2.51
|
|
Hostname: unknown
|
|
Grund: 75x microsoft.com in 60s via DoH, DNS-Flood-Watchlist
|
|
Dauer: PERMANENT
|
|
|
|
AbuseIPDB: https://www.abuseipdb.com/check/192.0.2.51
|
|
```
|
|
|
|
### GeoIP-Sperre
|
|
|
|
```text
|
|
AdGuard Shield GeoIP-Sperre auf dns1
|
|
---
|
|
IP: 203.0.113.10
|
|
Land: BR
|
|
Modus: Blocklist
|
|
Dauer: PERMANENT
|
|
|
|
AbuseIPDB: https://www.abuseipdb.com/check/203.0.113.10
|
|
```
|
|
|
|
### Freigabe
|
|
|
|
```text
|
|
AdGuard Shield Freigabe auf dns1
|
|
---
|
|
IP: 192.0.2.50
|
|
Hostname: client.example.com
|
|
|
|
AbuseIPDB: https://www.abuseipdb.com/check/192.0.2.50
|
|
```
|
|
|
|
### Bulk-Freigabe
|
|
|
|
```text
|
|
AdGuard Shield Bulk-Freigabe auf dns1
|
|
---
|
|
Freigegebene IPs: 28
|
|
Aktion: Manual-Flush
|
|
```
|
|
|
|
---
|
|
|
|
## Fehlersuche
|
|
|
|
Wenn keine Benachrichtigung ankommt:
|
|
|
|
```bash
|
|
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100
|
|
sudo journalctl -u adguard-shield --no-pager -n 100
|
|
```
|
|
|
|
### Checkliste
|
|
|
|
| Prüfpunkt | Was zu prüfen ist |
|
|
|---|---|
|
|
| Aktiviert | `NOTIFY_ENABLED=true` gesetzt? |
|
|
| Typ | `NOTIFY_TYPE` korrekt geschrieben? |
|
|
| Ziel | Webhook-URL oder Ntfy-Topic gesetzt? |
|
|
| Token | Token gültig und nicht abgelaufen? |
|
|
| Netzwerk | Server kann ausgehende HTTPS-Verbindungen aufbauen? |
|
|
| Firewall | Keine Firewall blockiert ausgehende Verbindungen? |
|
|
| Modul-Schalter | `EXTERNAL_BLOCKLIST_NOTIFY` oder `GEOIP_NOTIFY` separat deaktiviert? |
|
|
|
|
Bei `generic` kannst du testweise einen lokalen HTTP-Empfänger oder einen Request-Inspector verwenden, um den gesendeten Payload zu sehen.
|
|
|
|
---
|
|
|
|
## Datenschutz
|
|
|
|
Benachrichtigungen können IP-Adressen, Domainnamen und Hostnamen enthalten. Sende sie nur an Dienste, denen du vertraust.
|
|
|
|
Für öffentliche oder geteilte Kanäle ist eine eigene Ntfy- oder Gotify-Instanz mit privatem Topic oft die bessere Wahl als ein öffentlicher Kanal.
|