CoMo
Commodore
- Registriert
- Dez. 2015
- Beiträge
- 4.648
Hallo,
ich würde gerne für Freunde und Familie einen filternden DNS-Server betreiben. Öffentlich via Hostname erreichbar, kein VPN. Das Projekt hat sich die letzten Tage materialisiert, als ich bemerkt habe, dass AdGuard Home bei DoT / DoH / DoQ mit Client-ID's arbeiten kann https://github.com/AdguardTeam/AdGuardHome/wiki/Clients#clientid
Ich kann also für jeden Nutzer eine zufällige Client ID erstellen, mit der er sich quasi am Server authentifiziert. Anfragen ohne Client ID liefern nur ein
Die Client-IDs haben das Format
Mein AdGuard Home läuft also nun auf einem Netcup VPS direkt im Internet ohne Reverse Proxy. OS is DietPi und AdGuard und Unbound wurden über
Plain DNS ist deaktiviert, nur DoH / DoT / DoQ sind aktiv. Also Port 443 TCP und Port 853 TCP/UDP.
DNS-Technisch habe ich folgende Einträge angelegt:
A - <ipv4-adresse>
AAAA - <ipv6-adresse>
HTTPS: 1 . alpn="h2,h3" ipv4hint=<ipv4-adresse> ipv6hint=<ipv6-adresse>
SVCB: 1 . alpn="doq" port=853 ipv4hint=<ipv4-adresse> ipv6hint=<ipv6-adresse>
TLSA: _443._tcp.dns.<meinedomain>.de. IN TLSA 3 1 2 <sha512-hash>
TLSA: _443._tcp.dns.<meinedomain>.de. IN TLSA 3 1 1 <sha256-hash>
TLSA _853._tcp.dns.<meinedomain>.de. IN TLSA 3 1 2 <sha512-hash>
TLSA _853._tcp.dns.<meinedomain>.de. IN TLSA 3 1 1 <sha256-hash>
TLSA _853._udp.dns.<meinedomain>.de. IN TLSA 3 1 2 <sha512-hash>
TLSA _853._udp.dns.<meinedomain>.de. IN TLSA 3 1 1 <sha256-hash>
CAA 0 issue "letsencrypt.org"
CAA 0 issuewild "letsencrypt.org"
Da die Domains keine Emails sendet oder empfängt, habe ich auch Null-MX sowie SPF und DMARC-Einträge angelegt. SSHFP für den SSH-Zugang gibt es ebenfalls.
Mittels UFW sind nur die nötigen Ports freigegeben. SSH ist auf meine eigenen IP-Adressen beschränkt.
Das (Wildcard) Zertifikat habe ich mit Certbot erstellt und in die Datei unter
Das Webinterface ist ebenfalls erreichbar auf Port 443. Das lässt sich auch leider nicht unabhängig vom DoH-Server abschalten. Aber das Passwort ist lang und zufällig und Rate Limiting sperrt fehlversuche für 12 Stunden aus. Das ist erst mal ok, denke ich. In AdGuard Home v0.108 soll es dann eine Möglichkeit geben, das Webinterface zu deaktivieren.
Ich habe mich noch etwas in systemd Hardening eingelesen und der Unit noch folgende Optionen hinzugefügt:
Kann ich das so betreiben oder habe ich noch irgendwas wichtiges übersehen? Irgendwelche DNS-Einträge, weiteres Hardening etc?
Ein Problem ist mir aufgefallen. Da die Client IDs als Subdomain übergeben werden, kann ja zumindest der Bootstrap-DNS-Server die Clients IDs sehen. Das mag kein Problem sein mit ISP-DNS-Servern, aber der Router im Hotel WLAN könnte das loggen und damit die Client IDs exposen. Da gibt es für DoT / DoQ keine Lösung, nehme ich an? Aber ich kann die IDs ja jährlich oder so rotieren und neu verteilen.
ich würde gerne für Freunde und Familie einen filternden DNS-Server betreiben. Öffentlich via Hostname erreichbar, kein VPN. Das Projekt hat sich die letzten Tage materialisiert, als ich bemerkt habe, dass AdGuard Home bei DoT / DoH / DoQ mit Client-ID's arbeiten kann https://github.com/AdguardTeam/AdGuardHome/wiki/Clients#clientid
Ich kann also für jeden Nutzer eine zufällige Client ID erstellen, mit der er sich quasi am Server authentifiziert. Anfragen ohne Client ID liefern nur ein
REFUSED. Das habe ich mit dem Smartphone getestet und es funktioniert.Die Client-IDs haben das Format
username-40bit-random-stringMein AdGuard Home läuft also nun auf einem Netcup VPS direkt im Internet ohne Reverse Proxy. OS is DietPi und AdGuard und Unbound wurden über
dietpi-software installiert.Plain DNS ist deaktiviert, nur DoH / DoT / DoQ sind aktiv. Also Port 443 TCP und Port 853 TCP/UDP.
DNS-Technisch habe ich folgende Einträge angelegt:
A - <ipv4-adresse>
AAAA - <ipv6-adresse>
HTTPS: 1 . alpn="h2,h3" ipv4hint=<ipv4-adresse> ipv6hint=<ipv6-adresse>
SVCB: 1 . alpn="doq" port=853 ipv4hint=<ipv4-adresse> ipv6hint=<ipv6-adresse>
TLSA: _443._tcp.dns.<meinedomain>.de. IN TLSA 3 1 2 <sha512-hash>
TLSA: _443._tcp.dns.<meinedomain>.de. IN TLSA 3 1 1 <sha256-hash>
TLSA _853._tcp.dns.<meinedomain>.de. IN TLSA 3 1 2 <sha512-hash>
TLSA _853._tcp.dns.<meinedomain>.de. IN TLSA 3 1 1 <sha256-hash>
TLSA _853._udp.dns.<meinedomain>.de. IN TLSA 3 1 2 <sha512-hash>
TLSA _853._udp.dns.<meinedomain>.de. IN TLSA 3 1 1 <sha256-hash>
CAA 0 issue "letsencrypt.org"
CAA 0 issuewild "letsencrypt.org"
Da die Domains keine Emails sendet oder empfängt, habe ich auch Null-MX sowie SPF und DMARC-Einträge angelegt. SSHFP für den SSH-Zugang gibt es ebenfalls.
Mittels UFW sind nur die nötigen Ports freigegeben. SSH ist auf meine eigenen IP-Adressen beschränkt.
Das (Wildcard) Zertifikat habe ich mit Certbot erstellt und in die Datei unter
/etc/letsencrypt/renewal habe ich unterhalb von [renewalparams] noch ein reuse_key = true eingetragen. Das sollte dafür sorgen, dass der Public Key im TLSA Record sich auch bei Cert-Erneuerung nicht ändert, richtig?Das Webinterface ist ebenfalls erreichbar auf Port 443. Das lässt sich auch leider nicht unabhängig vom DoH-Server abschalten. Aber das Passwort ist lang und zufällig und Rate Limiting sperrt fehlversuche für 12 Stunden aus. Das ist erst mal ok, denke ich. In AdGuard Home v0.108 soll es dann eine Möglichkeit geben, das Webinterface zu deaktivieren.
Ich habe mich noch etwas in systemd Hardening eingelesen und der Unit noch folgende Optionen hinzugefügt:
Code:
[Service]
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/mnt/dietpi_userdata/adguardhome
PrivateTmp=true
PrivateDevices=true
MemoryDenyWriteExecute=true
ProtectControlGroups=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectProc=invisible
ProcSubset=pid
LockPersonality=true
RestrictRealtime=true
#SystemCallArchitectures=native
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK
RestrictSUIDSGID=true
SystemCallArchitectures=native musste ich wieder rausnehmen, damit hat der Dienst nicht mehr gestartet:
Code:
May 21 15:14:46 vps01 AdGuardHome[2172]: 2026/05/21 15:14:46.461191 [error] client_storage: refreshing arp container err="each arpdb failed: opening \"proc/net/arp\": open proc/net/arp: no such file or directory\ncmd arpdb: running command: unexpected exit code 255\ncmd arpdb: running command: unexpected exit code 1"
Kann ich das so betreiben oder habe ich noch irgendwas wichtiges übersehen? Irgendwelche DNS-Einträge, weiteres Hardening etc?
Ein Problem ist mir aufgefallen. Da die Client IDs als Subdomain übergeben werden, kann ja zumindest der Bootstrap-DNS-Server die Clients IDs sehen. Das mag kein Problem sein mit ISP-DNS-Servern, aber der Router im Hotel WLAN könnte das loggen und damit die Client IDs exposen. Da gibt es für DoT / DoQ keine Lösung, nehme ich an? Aber ich kann die IDs ja jährlich oder so rotieren und neu verteilen.
Zuletzt bearbeitet: