all systems self-hosted

~/selfhostjournal $

← Alle Artikel

,

Traefik GeoBlock hat meinen eigenen KI-Assistenten ausgesperrt: einen veröffentlichten IP-Bereich erlauben

4–5 Minuten

Kurz gesagt

Problem: Nachdem ich Traefik GeoBlock eingeschaltet hatte, funktionierte der Connector von Claude zu Home Assistant nicht mehr. Home Assistant selbst lief für alle zu Hause ganz normal.

Lösung: Der Connector ruft von den Servern von Anthropic in den USA an, und GeoBlock ließ nur meine eigenen Länder durch. Ein Eintrag in allowedIPAddresses mit dem veröffentlichten IP-Bereich des Anbieters hat das Problem gelöst.

Getestet mit: Traefik 3, GeoBlock-Plugin (PascalMinder) 0.3.8, Home Assistant mit einem MCP-Server für Claude

In Traefik absichern habe ich GeoBlock vor jeden Dienst gesetzt: Nur Besucher aus den Ländern, in denen meine Familie lebt, kommen durch, alle anderen bekommen eine 403. Das hat genau wie geplant funktioniert. Etwas zu gut, wie sich herausstellte: Es hat auch einen Besucher ausgesperrt, den ich haben wollte, meinen eigenen KI-Assistenten.

Das ist eine kurze Geschichte über eine Sicherheitsmaßnahme, die ihren Job macht, dabei etwas kaputt macht, das du brauchst, und wie du herausfindest, welche es war.

1. Das Symptom

Ich nutze Claude mit einem Connector zu Home Assistant, damit ich Sensoren, Automationen und Logs in normaler Sprache abfragen kann. Kurz nach dem Absichern erreichte der Connector Home Assistant nicht mehr. Jeder Versuch scheiterte.

Gleichzeitig war mit Home Assistant alles in Ordnung: Das Dashboard lud zu Hause, die App auf dem Handy funktionierte, die Automationen liefen. Betroffen war nur dieser eine Client.

2. Was ich zuerst geprüft habe (und warum mich das in die Irre geführt hat)

Ein Connector, der sich per OAuth anmeldet, hat viele Teile, die kaputtgehen können. Also schaut man zuerst dort:

  • Anmeldung und Tokens: Ein abgelaufenes Token oder eine kaputte OAuth-Einrichtung würde einen streikenden Client erklären. Neu verbinden hilft aber nicht, wenn die Anfragen blockiert werden, bevor sie ankommen.
  • Home-Assistant-Logs: nichts. Kein fehlgeschlagener Login, kein Fehler der MCP-Integration, nicht einmal eine Anfrage.
  • Die URL: Sie öffnet sich im Browser ganz normal.

Das leere Home-Assistant-Log war der eigentliche Hinweis, und man liest es leicht falsch. „Keine Fehler“ klang nach „in Home Assistant ist alles in Ordnung“. Tatsächlich hieß es: Die Anfragen kamen nie an. Etwas vor Home Assistant hat sie beantwortet. Und „im Browser geht es“ bewies gar nichts, denn mein Browser kommt aus einem erlaubten Land.

3. Die eigentliche Ursache: Traefik GeoBlock hat seinen Job gemacht

Die Connectors von Claude laufen nicht in meinem Browser oder auf meinem Handy. Sie rufen meinen Server aus der Infrastruktur von Anthropic auf, und die steht in den USA. Für GeoBlock ist das einfach eine weitere Anfrage aus einem Land, das nicht auf der Liste steht.

Zwei Logs zeigen es. GeoBlock schreibt jede abgelehnte Anfrage in eine eigene Datei. Eine Zeile sieht so aus (Beispieladresse):

INFO: GeoBlock: 2026/10/16 09:14:52 geoblock@docker: request denied [203.0.113.17] for country [US] due to: country is not allowed

Und das Access-Log von Traefik zeigt die 403 mit leerem Backend ("-" nach dem Router-Namen). Der Strich heißt: Die Anfrage hat den Dienst nie erreicht (wieder eine Beispielzeile):

203.0.113.17 - - [16/Oct/2026:09:14:52 +0000] "POST /api/webhook/… HTTP/1.1" 403 0 "-" "-" 4711 "homeassistant@docker" "-" 1ms

Das Log ist voll mit Scannern aus aller Welt, die Anfragen des Connectors fallen darin also nicht von selbst auf. Vergleichst du die abgelehnten Adressen mit dem Bereich, den Anthropic für seinen ausgehenden Verkehr veröffentlicht, dann schon.

Tipp: Wenn ein einzelner Client scheitert und das Log der App leer ist, schau zuerst auf den Reverse Proxy. Eine 403 ohne Backend im Access-Log ist das typische Zeichen dafür, dass eine Middleware Nein gesagt hat.

4. Die Lösung: den veröffentlichten IP-Bereich erlauben

GeoBlock hat genau dafür eine Option: allowedIPAddresses. Adressen in dieser Liste kommen durch, egal aus welchem Land. Ein Label mehr am Traefik-Container:

      # Claude connectors call from Anthropic's published outbound range
      # source: https://platform.claude.com/docs/en/api/ip-addresses
      - "traefik.http.middlewares.geoblock.plugin.geoblock.allowedIPAddresses[0]=160.79.104.0/21"

Dann den Container neu erstellen, damit Traefik die neuen Labels liest:

docker compose up -d traefik

Der Bereich oben ist der, den Anthropic zum Zeitpunkt des Schreibens angibt. Prüf auf der Seite mit den IP-Adressen von Anthropic den aktuellen Stand, bevor du ihn übernimmst. Derselbe Weg funktioniert für jeden anderen Dienst, der dich aus dem Ausland erreichen muss, solange der Anbieter seine IP-Bereiche veröffentlicht.

Achtung: Erlaube nur Bereiche, die der Anbieter offiziell veröffentlicht. Trag nie eine IP aus deinem eigenen Log ein, nur weil sie passend aussieht, und öffne nie ein ganzes Land für einen einzelnen Dienst. Denk auch daran, was eine Ausnahme bedeutet: Diesen Bereich teilen sich alle Kunden des Anbieters, nicht nur du. GeoBlock lässt sie alle durch, also muss die Anmeldung des Dienstes dahinter trotzdem halten. Bei mir bleiben die eigene Anmeldung von Home Assistant und CrowdSec davor.

5. So prüfst du es

  1. Prüfen, ob Traefik das Label übernommen hat:
    docker inspect traefik --format '{{ index .Config.Labels "traefik.http.middlewares.geoblock.plugin.geoblock.allowedIPAddresses[0]" }}'
  2. Den Connector einmal benutzen (bei mir: Claude nach einem Sensorwert fragen).
  3. Sicherstellen, dass der Bereich nicht mehr als abgelehnt auftaucht:
    grep -E '\[160\.79\.1(0[4-9]|1[01])\.' traefik-logs/geoblock.log | tail
    Keine neuen Zeilen nach dem Neustart heißt: GeoBlock lässt den Connector durch.

Was ich gelernt habe

  • „Im Browser geht es“ ist kein Test für eine Geo-Sperre. Frag dich, von wo der streikende Client wirklich anruft.
  • Ein leeres Log der Anwendung ist ein Befund, keine Sackgasse: Die Anfrage wurde vorher gestoppt.
  • Bevor du eine Allow-Liste einschaltest, schreib jeden Dienst auf, der von außen anruft: KI-Connectors, Webhooks, Monitoring, Push-Dienste. Jeder davon braucht eine bewusste Ausnahme oder einen anderen Weg.

Das komplette Setup mit GeoBlock und CrowdSec steht in Traefik absichern: Geo-Blocking, CrowdSec und Single Sign-on.

Alles hier hat bei mir zum Zeitpunkt des Schreibens funktioniert. Software ändert sich, und dein Setup ist anders: mach vorher ein Backup, teste vorsichtig und wende die Schritte auf eigenes Risiko an. Details im Impressum.