Files
adguard-shield/docs/befehle.md
2026-05-01 01:17:05 +02:00

907 lines
22 KiB
Markdown

# Befehle & Nutzung
AdGuard Shield wird in der Go-Version über ein einzelnes Binary bedient:
```bash
/opt/adguard-shield/adguard-shield
```
Dieses Binary ist Daemon, CLI, Installer, Updater, Uninstaller und Report-Generator. Dadurch gibt es keine getrennten Shell-Skripte mehr.
## Grundform
```bash
sudo /opt/adguard-shield/adguard-shield <befehl>
```
Wenn du eine andere Konfigurationsdatei verwenden möchtest, muss `-config` direkt vor dem Befehl stehen:
```bash
sudo /opt/adguard-shield/adguard-shield -config /pfad/zur/adguard-shield.conf status
```
### Standardpfade
| Datei | Pfad |
|---|---|
| Binary | `/opt/adguard-shield/adguard-shield` |
| Konfiguration | `/opt/adguard-shield/adguard-shield.conf` |
| SQLite-Datenbank | `/var/lib/adguard-shield/adguard-shield.db` |
| Logdatei | `/var/log/adguard-shield.log` |
| PID-Datei | `/var/run/adguard-shield.pid` |
## Schnellübersicht
```bash
# Version anzeigen
/opt/adguard-shield/adguard-shield version
# Installation und Update
sudo ./adguard-shield install
sudo ./adguard-shield update
sudo ./adguard-shield install-status
sudo /opt/adguard-shield/adguard-shield uninstall --keep-config
# Service-Management über systemd
sudo systemctl start adguard-shield
sudo systemctl stop adguard-shield
sudo systemctl restart adguard-shield
sudo systemctl status adguard-shield
# Diagnose und Monitoring
sudo /opt/adguard-shield/adguard-shield test
sudo /opt/adguard-shield/adguard-shield status
sudo /opt/adguard-shield/adguard-shield live
sudo /opt/adguard-shield/adguard-shield history 100
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100
# Manuelle Eingriffe
sudo /opt/adguard-shield/adguard-shield ban 192.168.1.100
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100
sudo /opt/adguard-shield/adguard-shield flush
```
---
## Installation
Das installierte Binary landet standardmäßig unter:
```text
/opt/adguard-shield/adguard-shield
```
### Standardinstallation
```bash
chmod +x ./adguard-shield
sudo ./adguard-shield install
```
Am Ende fragt der Installer, ob AdGuard Shield direkt gestartet oder neu gestartet werden soll.
### Installationsoptionen
| Option | Beschreibung |
|---|---|
| `--config-source <pfad>` | Bestehende Konfigurationsdatei als Vorlage übernehmen |
| `--skip-deps` | Automatische Paketprüfung und -installation überspringen |
| `--no-enable` | systemd-Autostart nicht aktivieren |
| `--install-dir <pfad>` | Abweichendes Installationsverzeichnis verwenden |
**Beispiele:**
```bash
# Konfiguration aus anderem Pfad übernehmen
sudo ./adguard-shield install --config-source ./adguard-shield.conf
# Ohne Paketprüfung installieren
sudo ./adguard-shield install --skip-deps
# In anderes Verzeichnis installieren
sudo ./adguard-shield install --install-dir /opt/adguard-shield-test
```
### Was der Installer macht
Der Installer führt diese Schritte automatisch durch:
| Schritt | Beschreibung |
|---:|---|
| 1 | Linux- und Root-Prüfung |
| 2 | Prüfung auf alte Shell-Artefakte |
| 3 | Installation fehlender Abhängigkeiten über `apt-get` (sofern möglich) |
| 4 | Anlage von Installations- und State-Verzeichnissen |
| 5 | Kopieren des Binarys nach `/opt/adguard-shield/` |
| 6 | Anlage oder Migration der Konfiguration |
| 7 | Schreiben der systemd-Unit |
| 8 | `systemctl daemon-reload` |
| 9 | Optional: Autostart aktivieren |
| 10 | Nachfrage: Service direkt starten oder neu starten |
### Benötigte Systembefehle
| Befehl | Paket (Debian/Ubuntu) | Zweck |
|---|---|---|
| `iptables` | `iptables` | IPv4-Firewall |
| `ip6tables` | `iptables` | IPv6-Firewall |
| `ipset` | `ipset` | IP-Set-Verwaltung für performante Sperren |
| `systemctl` | `systemd` | Service-Management |
Auf Debian/Ubuntu installiert der Installer passende Pakete automatisch, sofern `apt-get` verfügbar ist und `--skip-deps` nicht gesetzt wurde.
---
## Update
Ein Update wird immer mit dem **neuen** Binary ausgeführt, nicht mit dem bereits installierten alten Binary:
```bash
chmod +x ./adguard-shield
sudo ./adguard-shield update
```
Am Ende fragt der Updater, ob AdGuard Shield direkt neu gestartet werden soll.
### Update mit expliziter Konfigurationsquelle
```bash
sudo ./adguard-shield update --config-source ./adguard-shield.conf
```
### Was beim Update passiert
- Die Installation wird wie bei `install` aktualisiert
- Vorhandene Konfiguration bleibt erhalten
- Neue Konfigurationsparameter werden ergänzt
- Bei einer Migration wird `adguard-shield.conf.old` geschrieben
- Die systemd-Unit wird neu geschrieben und systemd neu geladen
Weitere Details stehen in der [Update-Anleitung](update.md).
---
## Installationsstatus
```bash
sudo ./adguard-shield install-status
```
Zeigt eine Übersicht mit:
- Installationspfad und Binary-Status
- Installierte Version
- Konfiguration vorhanden
- systemd-Service vorhanden und Status
- Autostart aktiv
- Gefundene Legacy-Artefakte
Für ein anderes Installationsverzeichnis:
```bash
sudo ./adguard-shield install-status --install-dir /opt/adguard-shield-test
```
---
## Deinstallation
```bash
# Vollständige Deinstallation
sudo /opt/adguard-shield/adguard-shield uninstall
# Deinstallation mit Konfigurationserhalt
sudo /opt/adguard-shield/adguard-shield uninstall --keep-config
```
**Was bei der Deinstallation passiert:**
| Schritt | Beschreibung |
|---:|---|
| 1 | Service stoppen |
| 2 | Autostart deaktivieren |
| 3 | Shield-Firewall-Struktur entfernen (Chain, ipsets) |
| 4 | systemd-Unit löschen |
| 5 | systemd neu laden |
| 6 | Installationsverzeichnis, State und Log entfernen |
Mit `--keep-config` bleiben Konfigurationsdaten erhalten. Das ist sinnvoll, wenn du neu installieren oder migrieren möchtest.
---
## Alte Shell-Installation
Die Go-Version darf nicht parallel zur alten Shell-Version laufen. Der Installer bricht ab, wenn er alte Artefakte findet, zum Beispiel:
```text
/opt/adguard-shield/adguard-shield.sh
/opt/adguard-shield/iptables-helper.sh
/opt/adguard-shield/external-blocklist-worker.sh
/opt/adguard-shield/geoip-worker.sh
/etc/systemd/system/adguard-shield-watchdog.timer
```
**Empfohlener Ablauf:**
1. Bestehende `/opt/adguard-shield/adguard-shield.conf` sichern.
2. Alte Shell-Version mit deren Uninstaller entfernen und die Konfiguration behalten.
3. Go-Binary erneut installieren.
4. Konfiguration prüfen.
5. Zuerst `dry-run`, dann produktiven Service starten.
Weitere Details stehen in der [Update-Anleitung](update.md).
---
## systemd-Service
Im produktiven Betrieb sollte AdGuard Shield über systemd laufen:
```bash
sudo systemctl start adguard-shield # Service starten
sudo systemctl stop adguard-shield # Service stoppen
sudo systemctl restart adguard-shield # Service neu starten
sudo systemctl status adguard-shield # Status anzeigen
```
### Autostart
```bash
sudo systemctl enable adguard-shield # Autostart aktivieren
sudo systemctl disable adguard-shield # Autostart deaktivieren
```
### Nach manuellen Änderungen an der Unit
```bash
sudo systemctl daemon-reload
```
### Startbefehl der Unit
Die systemd-Unit startet den Daemon mit:
```bash
/opt/adguard-shield/adguard-shield -config /opt/adguard-shield/adguard-shield.conf run
```
Die Go-Version nutzt `Restart=on-failure` mit `RestartSec=30s`. Einen separaten Watchdog-Service oder Watchdog-Timer gibt es nicht mehr.
---
## Daemon direkt starten
Für Debugging oder Dry-Run kann der Daemon im Vordergrund gestartet werden:
```bash
# Normaler Vordergrundlauf
sudo /opt/adguard-shield/adguard-shield run
# Alias für run
sudo /opt/adguard-shield/adguard-shield start
# Analysieren ohne echte Sperren
sudo /opt/adguard-shield/adguard-shield dry-run
```
### Daemon über PID-Datei stoppen
```bash
sudo /opt/adguard-shield/adguard-shield stop
```
Für den Alltag gilt: Nutze `systemctl`. Der direkte Vordergrundlauf endet, sobald die Shell beendet wird oder du `Strg+C` drückst.
---
## API-Test
```bash
sudo /opt/adguard-shield/adguard-shield test
```
Der `test`-Befehl prüft die Verbindung zur AdGuard-Home-API:
| Prüfung | Was getestet wird |
|---|---|
| Netzwerk | Ist `ADGUARD_URL` erreichbar? |
| TLS | Funktioniert HTTPS/TLS? |
| Authentifizierung | Stimmen `ADGUARD_USER` und `ADGUARD_PASS`? |
| Querylog | Liefert AdGuard Home Querylog-Daten? |
**Bei Erfolg:**
```text
Verbindung erfolgreich. 123 Querylog-Einträge gefunden.
```
Wenn der Test fehlschlägt, zuerst die Konfiguration und die AdGuard-Home-Weboberfläche prüfen.
---
## Status
```bash
sudo /opt/adguard-shield/adguard-shield status
```
Zeigt eine Übersicht des aktuellen Zustands:
- Verwendete Konfigurationsdatei
- Firewall-Backend, -Modus und Chain
- GeoIP-Aktivierung, Modus und Länderliste
- Externe Blocklist (aktiv/inaktiv, Anzahl URLs)
- Externe Whitelist (aktiv/inaktiv, Anzahl URLs)
- Aktive Sperren mit IP, Quelle, Grund und Ablaufzeit
Bei sehr vielen aktiven Sperren werden nur die ersten 50 angezeigt. Für Details nutze `history` oder frage SQLite direkt ab.
---
## Live-Ansicht
```bash
sudo /opt/adguard-shield/adguard-shield live
```
Die `live`-Ansicht ist das beste Werkzeug, wenn du verstehen möchtest, was gerade passiert. Sie zeigt in Echtzeit:
| Bereich | Inhalt |
|---|---|
| Query-Poller | API-Einträge, Zeitfenster und Rate-Limit-Status |
| Top-Kombinationen | Häufigste Client/Domain-Paare |
| Subdomain-Flood | Aktuelle Subdomain-Flood-Kandidaten |
| Letzte Queries | Die neuesten Querylog-Einträge |
| Aktive Sperren | Alle derzeit gesperrten IPs |
| Externe Listen | Status von Blocklist und Whitelist |
| GeoIP | GeoIP-Konfiguration und Status |
| Offense-Cleanup | Progressive-Ban-Status |
| Systemereignisse | Aktuelle Logeinträge |
### Optionen
| Option | Beschreibung | Beispiel |
|---|---|---|
| `--interval <sek>` | Aktualisierungsintervall in Sekunden | `live --interval 2` |
| `--top <n>` | Anzahl der Top-Einträge | `live --top 20` |
| `--recent <n>` | Anzahl letzter Queries und Logs | `live --recent 25` |
| `--logs <level>` | Log-Level anzeigen (`debug`, `info`, `warn`, `error`, `off`) | `live --logs debug` |
| `--once` | Einmaligen Snapshot ausgeben, nicht fortlaufend | `live --once` |
### Alias
```bash
sudo /opt/adguard-shield/adguard-shield watch
```
---
## History
```bash
# Letzte 50 Einträge (Standard)
sudo /opt/adguard-shield/adguard-shield history
# Letzte 200 Einträge
sudo /opt/adguard-shield/adguard-shield history 200
```
Die History kommt aus der SQLite-Tabelle `ban_history`.
### Ausgabeformat
```text
Zeit | Aktion | Client-IP | Domain | Anzahl | Dauer | Protokoll | Grund
```
### Aktionstypen
| Aktion | Bedeutung |
|---|---|
| `BAN` | Echte Sperre gesetzt |
| `UNBAN` | Sperre aufgehoben |
| `DRY` | Im Dry-Run erkannt, aber nicht gesperrt |
### Sperrgründe
| Grund | Bedeutung |
|---|---|
| `rate-limit` | Gleiche Domain zu oft angefragt |
| `subdomain-flood` | Zu viele eindeutige Subdomains einer Basisdomain |
| `dns-flood-watchlist` | Watchlist-Treffer mit sofortigem Permanent-Ban |
| `external-blocklist` | Sperre aus externer Blocklist |
| `geoip` | GeoIP-Länderfilter |
| `manual` | Manueller Ban oder Unban |
| `manual-flush` | Freigabe durch `flush` |
| `expired` | Temporäre Sperre abgelaufen |
| `external-whitelist` | Freigabe durch externe Whitelist |
| `geoip-flush` | Freigabe aller GeoIP-Sperren |
| `external-blocklist-flush` | Freigabe aller Blocklist-Sperren |
---
## Logs
AdGuard Shield schreibt Daemon-Ereignisse in `LOG_FILE`, standardmäßig:
```text
/var/log/adguard-shield.log
```
### CLI-Befehle
```bash
# Letzte INFO/WARN/ERROR-Einträge
sudo /opt/adguard-shield/adguard-shield logs
# Letzte 100 Warnungen und Fehler
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100
# Kurzform (Level als Argument)
sudo /opt/adguard-shield/adguard-shield logs debug
# Laufende Ansicht (wie tail -f)
sudo /opt/adguard-shield/adguard-shield logs-follow --level info
```
### Erlaubte Log-Level
| Level | Beschreibung |
|---|---|
| `DEBUG` | Detaillierte Informationen für Fehlersuche |
| `INFO` | Normale Betriebsmeldungen (Start, Sperren, Freigaben) |
| `WARN` | Warnungen (z.B. API-Fehler, fehlende Dateien) |
| `ERROR` | Fehler, die den Betrieb beeinträchtigen |
### systemd-Journal
```bash
sudo journalctl -u adguard-shield -f
sudo journalctl -u adguard-shield --no-pager -n 100
```
**Hinweis:** Query-Inhalte werden nicht dauerhaft in die Logdatei geschrieben. Für Query-nahe Diagnose ist die `live`-Ansicht gedacht.
---
## Manuelle Sperren und Freigaben
### IP permanent sperren
```bash
sudo /opt/adguard-shield/adguard-shield ban 192.168.1.100
```
Legt eine manuelle permanente Sperre an. Die IP wird sofort in die Firewall eingetragen.
### IP entsperren
```bash
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100
```
Entfernt die IP aus Firewall und Datenbank. Funktioniert für alle Sperrtypen (automatisch, manuell, GeoIP, Blocklist).
### Alle Sperren aufheben
```bash
sudo /opt/adguard-shield/adguard-shield flush
```
Hebt alle aktiven Sperren auf. Bei aktivierten Benachrichtigungen wird eine zusammenfassende Meldung gesendet, nicht eine Nachricht pro IP.
**Wichtig:** Whitelist-Regeln gelten auch für manuelle Sperren. Eine IP aus `WHITELIST` oder externer Whitelist wird nicht gesperrt.
---
## Progressive Sperren und Offenses
### Offense-Status anzeigen
```bash
sudo /opt/adguard-shield/adguard-shield offense-status
```
Zeigt die Gesamtzahl der Offense-Zähler, davon abgelaufene, und die Konfiguration.
### Abgelaufene Zähler entfernen
```bash
sudo /opt/adguard-shield/adguard-shield offense-cleanup
```
### Alle Offense-Zähler zurücksetzen
```bash
sudo /opt/adguard-shield/adguard-shield reset-offenses
```
### Zähler für eine IP zurücksetzen
```bash
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100
```
### Typischer Ablauf nach Fehlkonfiguration
Wenn ein Client fälschlicherweise eskaliert wurde:
```bash
# Sperre aufheben
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100
# Offense-Zähler zurücksetzen
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100
# IP dauerhaft in Whitelist aufnehmen (in adguard-shield.conf)
# WHITELIST="127.0.0.1,::1,192.168.1.100"
sudo systemctl restart adguard-shield
```
---
## Firewall-Befehle
### Chain und ipsets anlegen
```bash
sudo /opt/adguard-shield/adguard-shield firewall-create
```
### Status anzeigen
```bash
sudo /opt/adguard-shield/adguard-shield firewall-status
```
Zeigt die aktuelle Firewall-Struktur: Chain, ipsets und eingehängte Regeln.
### ipsets leeren
```bash
sudo /opt/adguard-shield/adguard-shield firewall-flush
```
Entfernt alle IPs aus den ipsets. Die Firewall-Struktur (Chain, Regeln) bleibt bestehen.
### Chain und ipsets vollständig entfernen
```bash
sudo /opt/adguard-shield/adguard-shield firewall-remove
```
### Firewall-Regeln sichern
```bash
sudo /opt/adguard-shield/adguard-shield firewall-save
```
Speichert die aktuellen Regeln nach:
```text
/var/lib/adguard-shield/iptables-rules.v4
/var/lib/adguard-shield/iptables-rules.v6
```
### Gesicherte Regeln wiederherstellen
```bash
sudo /opt/adguard-shield/adguard-shield firewall-restore
```
**Hinweis:** Normalerweise musst du diese Befehle nicht manuell ausführen. Der Daemon erstellt die Firewall beim Start und schreibt aktive Sperren aus SQLite wieder hinein. Welche Host-Chain genutzt wird, hängt von `FIREWALL_MODE` ab. Details stehen in [Docker-Installationen](docker.md).
---
## Externe Whitelist
### Status anzeigen
```bash
sudo /opt/adguard-shield/adguard-shield whitelist-status
```
### Sofort synchronisieren
```bash
sudo /opt/adguard-shield/adguard-shield whitelist-sync
```
### Aufgelöste externe Whitelist entfernen
```bash
sudo /opt/adguard-shield/adguard-shield whitelist-flush
```
### Hinweise
- Die externe Whitelist kann IPs, CIDR-Netze und Hostnamen enthalten.
- Hostnamen werden per DNS aufgelöst und als IPs in SQLite gespeichert.
- Eine gewhitelistete IP wird nicht gesperrt.
- Wird eine bereits gesperrte IP später gewhitelistet, wird sie automatisch freigegeben.
- Die dauerhafte Synchronisation läuft im Daemon im konfigurierten Intervall.
- `whitelist-sync` erzwingt nur einen einzelnen, sofortigen Lauf.
---
## Externe Blocklist
### Status anzeigen
```bash
sudo /opt/adguard-shield/adguard-shield blocklist-status
```
### Sofort synchronisieren
```bash
sudo /opt/adguard-shield/adguard-shield blocklist-sync
```
### Alle Sperren aus externer Blocklist aufheben
```bash
sudo /opt/adguard-shield/adguard-shield blocklist-flush
```
### Hinweise
- Die externe Blocklist kann IPs, CIDR-Netze und Hostnamen enthalten.
- Hostnamen werden per DNS aufgelöst.
- IPs aus der Whitelist werden übersprungen.
- Bei `EXTERNAL_BLOCKLIST_AUTO_UNBAN=true` hebt der Daemon Blocklist-Sperren automatisch auf, sobald sie nicht mehr in der externen Liste vorkommen.
---
## GeoIP
### Status anzeigen
```bash
sudo /opt/adguard-shield/adguard-shield geoip-status
```
### Einzelne IP nachschlagen
```bash
sudo /opt/adguard-shield/adguard-shield geoip-lookup 8.8.8.8
```
**Ausgabe:**
```text
IP: 8.8.8.8 -> Land: US
```
### Aktuelle Clients prüfen
```bash
sudo /opt/adguard-shield/adguard-shield geoip-sync
```
Liest das aktuelle Querylog und prüft alle darin enthaltenen Client-IPs einmalig gegen die GeoIP-Regeln.
### Alle GeoIP-Sperren aufheben
```bash
sudo /opt/adguard-shield/adguard-shield geoip-flush
```
### Cache leeren
```bash
sudo /opt/adguard-shield/adguard-shield geoip-flush-cache
```
### Hinweise
- GeoIP-Sperren sind permanent, werden aber bei Konfigurationsänderungen automatisch neu bewertet.
- Die Ländercodes verwenden ISO 3166-1 Alpha-2 (siehe [ISO-3166-1-Kodierliste auf Wikipedia](https://de.wikipedia.org/wiki/ISO-3166-1-Kodierliste)).
---
## Reports
### Konfiguration und Cron-Status anzeigen
```bash
sudo /opt/adguard-shield/adguard-shield report-status
```
### HTML-Report in Datei schreiben
```bash
sudo /opt/adguard-shield/adguard-shield report-generate html /tmp/adguard-shield-report.html
```
### Text-Report auf stdout ausgeben
```bash
sudo /opt/adguard-shield/adguard-shield report-generate txt
```
### Testmail senden
```bash
sudo /opt/adguard-shield/adguard-shield report-test
```
Sendet eine einfache Testmail. Erst wenn diese funktioniert, lohnt sich die Fehlersuche am eigentlichen Report.
### Aktuellen Report erzeugen und versenden
```bash
sudo /opt/adguard-shield/adguard-shield report-send
```
### Cron-Job installieren
```bash
sudo /opt/adguard-shield/adguard-shield report-install
```
Erstellt die Datei `/etc/cron.d/adguard-shield-report` mit dem konfigurierten Intervall und der Versandzeit.
### Cron-Job entfernen
```bash
sudo /opt/adguard-shield/adguard-shield report-remove
```
Details zum Report-System stehen in [E-Mail Report](report.md).
---
## Dry-Run
```bash
sudo /opt/adguard-shield/adguard-shield dry-run
```
Der Dry-Run ist der sicherste Weg, neue Konfigurationen zu prüfen, bevor sie produktiv gehen.
### Verhalten im Dry-Run
| Was passiert | Was nicht passiert |
|---|---|
| Querylogs werden normal gelesen | Keine aktiven Bans werden angelegt |
| Rate-Limit, Subdomain-Flood, Watchlist werden ausgewertet | Keine Firewall-Regeln werden gesetzt |
| GeoIP und externe Blocklist werden geprüft | Keine Benachrichtigungen werden gesendet |
| Mögliche Sperren werden als `DRY` in die History geschrieben | |
### Typischer Ablauf nach größeren Änderungen
```bash
# Dry-Run starten (Strg+C zum Beenden)
sudo /opt/adguard-shield/adguard-shield dry-run
# Ergebnisse prüfen
sudo /opt/adguard-shield/adguard-shield history 50
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 80
```
---
## Version
```bash
/opt/adguard-shield/adguard-shield version
```
Zeigt die installierte Version an. Aliase: `--version`, `-v`.
---
## Typische Betriebsabläufe
### Nach Konfigurationsänderung
```bash
sudo systemctl restart adguard-shield
sudo /opt/adguard-shield/adguard-shield status
sudo /opt/adguard-shield/adguard-shield logs --level info --limit 80
```
### Falsch gesperrte IP freigeben
```bash
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100
```
Danach die IP dauerhaft in `WHITELIST` oder eine externe Whitelist aufnehmen.
### Externe Listen neu laden
```bash
sudo /opt/adguard-shield/adguard-shield whitelist-sync
sudo /opt/adguard-shield/adguard-shield blocklist-sync
sudo /opt/adguard-shield/adguard-shield status
```
### Firewall neu aufbauen
```bash
sudo /opt/adguard-shield/adguard-shield firewall-remove
sudo /opt/adguard-shield/adguard-shield firewall-create
sudo systemctl restart adguard-shield
```
Nach dem Neustart schreibt der Daemon aktive Sperren aus SQLite wieder in die Firewall.
### Service-Problem eingrenzen
```bash
sudo systemctl status adguard-shield
sudo journalctl -u adguard-shield --no-pager -n 100
sudo /opt/adguard-shield/adguard-shield test
sudo /opt/adguard-shield/adguard-shield logs --level debug --limit 100
```
---
## DNS-Abfragen zum Testen
Die folgenden Befehle sind **ausschließlich für kontrollierte Tests gegen deinen eigenen DNS-Server** gedacht. Ersetze `203.0.113.50` durch deine eigene DNS-Server-IP und `example.com` durch eine Testdomain.
**Nicht gegen fremde DNS-Server, fremde Dienste oder fremde Infrastruktur verwenden.**
### Voraussetzungen auf dem Testclient
| Protokoll | Paket | Installationsbefehl |
|---|---|---|
| Klassisches DNS | `dnsutils` | `sudo apt install dnsutils` |
| DNS-over-HTTPS | `curl` | `sudo apt install curl` |
| DNS-over-TLS | `knot-dnsutils` | `sudo apt install knot-dnsutils` |
### Klassisches DNS: Rate-Limit testen
Gleiche Domain mehrfach abfragen (40 parallele Anfragen):
```bash
for i in {1..40}; do \
dig @203.0.113.50 example.com +short +cookie=$(openssl rand -hex 8) > /dev/null & \
done; wait
```
### Klassisches DNS: Subdomain-Flood testen
Viele zufällige Subdomains abfragen (60 parallele Anfragen):
```bash
for i in {1..60}; do \
dig @203.0.113.50 $(openssl rand -hex 6).example.com +short > /dev/null & \
done; wait
```
### DNS-over-HTTPS testen
```bash
for i in {1..40}; do \
curl -s -H "accept: application/dns-json" \
"https://203.0.113.50/dns-query?name=example.com&type=A" > /dev/null & \
done; wait
```
Bei selbstsigniertem Zertifikat auf dem eigenen Testserver kann für diesen lokalen Test `-k` ergänzt werden.
### DNS-over-TLS testen
```bash
for i in {1..40}; do \
kdig @203.0.113.50 example.com +tls +short > /dev/null & \
done; wait
```
Die Beispielzahlen liegen bewusst nahe an den Standardlimits `RATE_LIMIT_MAX_REQUESTS=30` und `SUBDOMAIN_FLOOD_MAX_UNIQUE=50`.
---
## Eingebaute Hilfe
```bash
/opt/adguard-shield/adguard-shield --help
```
Bei unbekannten Befehlen gibt das Binary die Usage-Ausgabe aus.