Warum die Whitelist nicht funktioniert (und wie man es richtig macht)
Wer in OPNsense die Unbound-DNS-Blocklisten nutzt (z. B. Steven Black oder YoYo), kennt vermutlich das Problem: Man trägt eine Domain in die Whitelist ein — und sie wird trotzdem geblockt. Was auf den ersten Blick wie ein Bug aussieht, hat zwei konkrete Ursachen.
Das Problem: Einfache Domain-Einträge reichen nicht
Angenommen, man möchte beispiel-domain.com freigeben und trägt sie brav in das Feld Whitelist Domains unter Services → Unbound DNS → Blocklist ein. Das Ergebnis: Die Hauptdomain wird vielleicht durchgelassen, aber Subdomains wie track.beispiel-domain.com oder click.beispiel-domain.com bleiben weiterhin geblockt.
Ursache 1: CNAME-Bug
Es gibt einen bekannten Bug in der DNSBL-Implementierung: Wenn eine freigegebene Domain ein CNAME-Record ist, der auf eine geblockte Domain zeigt, wird sie trotzdem geblockt. Man müsste also zusätzlich die Zieldomain des CNAME-Records whitelisten — was mühsam und fehleranfällig ist.
Ursache 2: Subdomains werden nicht erfasst
Ein einfacher Eintrag wie beispiel-domain.com matcht eben nur genau diese Domain. Subdomains sind nicht automatisch eingeschlossen.
Die Lösung: Regex in der Whitelist
Was viele nicht wissen: Das Whitelist-Feld unterstützt reguläre Ausdrücke. Damit lässt sich eine Domain inklusive aller Subdomains auf einen Schlag freigeben.
Das Pattern dafür sieht so aus:
(.*)?(\.)?beispiel-domain.com
Dieser Ausdruck matcht sowohl beispiel-domain.com selbst als auch beliebige Subdomains wie track.beispiel-domain.com, click.beispiel-domain.com usw.
Wo wird das eingetragen?
Ganz normal im Feld Whitelist Domains unter Services → Unbound DNS → Blocklist. Pro Zeile ein Eintrag — entweder eine einfache Domain oder eben ein Regex-Pattern.
Fehlerdiagnose
Wenn ein Regex-Ausdruck ungültig ist, erscheint im Log unter /var/log/resolver/latest.log eine Meldung wie:
blocklist download : skip invalid whitelist exclude pattern "custom_pattern_1" (*\.example.net)
Der Stern allein (*\.example.net) ist kein gültiger Regex — man braucht das vollständige Pattern mit (.*)?(\.)?.
Fazit
Wer Domains in der OPNsense-Unbound-Blocklist zuverlässig whitelisten will, sollte immer das Regex-Pattern (.*)?(\.)?domain.com verwenden. Der einfache Domain-Eintrag ohne Regex funktioniert in vielen Fällen schlicht nicht — insbesondere bei Subdomains und CNAME-Auflösungen.
Quelle: OPNsense Forum – White Listed Domains not working in Unbound DNS: Blocklist
-GF
