Eine tägliche Prüfung, die warnt, bevor eine Domain abläuft

Christian Drexler

Anfang Oktober bin ich aus einem ganz anderen Grund durch meine Registrar-Konten gegangen und habe in zehn Minuten drei Dinge gefunden. Eine Domain war zwei Tage zuvor abgelaufen. Zwei weitere, darunter die, auf der diese Seite läuft, waren zwölf Tage vom Ablauf entfernt, auf automatische Verlängerung gestellt, in einem Konto mit zwölf Cent Guthaben. Und bei einer Domain mit einer laufenden Seite war die automatische Verlängerung abgeschaltet, mit sieben Wochen Rest.

Kaputt war noch nichts. Das war Glück. Niemand hat auf die Daten geachtet, weil alle, ich eingeschlossen, davon ausgingen, dass die automatische Verlängerung das tut.

Warum die automatische Verlängerung kein Netz ist

Automatische Verlängerung ist ein Versprechen, das der Registrar nur hält, wenn er etwas belasten kann. Eine abgelaufene Karte, eine nach einem Betrugsalarm ersetzte Karte, ein aufgebrauchtes Guthaben: In allen drei Fällen scheitert die Verlängerung, und der erste Hinweis landet in einem Postfach, das niemand liest, weil Registrar-Mails wie Werbung aussehen.

Die API des Registrars nennt mir das Ablaufdatum und das Guthaben. Ob die hinterlegte Karte noch funktioniert, kann sie mir nicht sagen. Verlässlich beobachten lässt sich also nur das Datum selbst. Ist eine Domain, die längst verlängert sein müsste, plötzlich vierzehn Tage vom Ablauf entfernt, dann ist die Verlängerung gescheitert, egal was in den Einstellungen steht.

Die vier Stufen

Der Job läuft einmal am Tag, morgens. Er holt aus jedem Registrar-Konto die vollständige Domainliste und das Guthaben und sortiert jede Domain in eine von vier Stufen oder in keine.

  • Abgelaufen. Der Registrar sagt es, oder das Datum liegt in der Vergangenheit.
  • Kritisch. Vierzehn Tage oder weniger, egal was bei der automatischen Verlängerung steht. Ein Kartenfehler zeigt sich hier zuerst.
  • Warnung. Dreißig Tage oder weniger bei abgeschalteter automatischer Verlängerung. Das ist eine Entscheidung, kein Unfall: verlängern oder bewusst auslaufen lassen.
  • Hinweis. Das Guthaben liegt unter fünfzehn Dollar, während in den nächsten dreißig Tagen etwas verlängert werden soll.

Alles andere ist in Ordnung und bekommt keine Zeile. Einen Bericht mit sechzig gesunden Domains liest am dritten Tag niemand mehr.

Die Daten lesen, ohne API-Schlüssel

Die meisten Registrare haben eine API, und die meisten verlangen, dass man zuerst die aufrufende IP-Adresse freischaltet. Das ist ein kleines Projekt für sich, wenn der eigene Rechner hinter einem Heimanschluss sitzt. Für eine erste Version braucht man beides nicht. Das Ablaufdatum jeder Domain ist über RDAP öffentlich, den Nachfolger von whois, und es kommt als JSON zurück.

import json, urllib.request, datetime as dt

def days_left(domain):
    with urllib.request.urlopen(f"https://rdap.org/domain/{domain}", timeout=20) as r:
        data = json.load(r)
    for ev in data.get("events", []):
        if ev.get("eventAction") == "expiration":
            exp = dt.datetime.fromisoformat(ev["eventDate"].replace("Z", "+00:00"))
            return (exp - dt.datetime.now(dt.timezone.utc)).days
    return None

for d in ["example.com", "example.dev"]:
    print(d, days_left(d))

rdap.org leitet an die Registry weiter, die für die Endung zuständig ist, deshalb funktioniert dieselbe Zeile für .com, .dev, .io und die meisten anderen. Ein paar Länderendungen veröffentlichen kein Ablaufdatum; für die gibt die Funktion None zurück, und None gehört als eigene Zeile in den Bericht. Ein Datum, das ich nicht lesen kann, ist keine gesunde Domain. Es ist eine unbekannte.

RDAP zeigt das Datum der Registry. Das kann um ein paar Tage vom Datum in der Oberfläche des Registrars abweichen, weil manche Registrare bei der Registry früh verlängern und später abrechnen. Für eine Schwelle von vierzehn Tagen spielt das keine Rolle.

Die Registrar-API lohnt den Aufwand, sobald man die zwei Dinge will, die RDAP nicht sieht: den Schalter für die automatische Verlängerung und das Guthaben. Diese beiden Felder trennen „verlängert sich von allein“ von „verlängert sich von allein, wenn das Geld da ist“.

Wann er sich meldet

Eine Prüfung, die jeden Morgen dieselbe Warnung schickt, erzieht dazu, sie zu übersehen. Der Job führt deshalb eine kleine Zustandsdatei mit einem Fingerabdruck der aktuellen Befunde, und für das Melden gelten diese Regeln:

  1. Die Befunde haben sich seit der letzten Meldung geändert: melden.
  2. Etwas ist abgelaufen oder kritisch: jeden Tag melden, bis es behoben ist. Das ist der eine Fall, in dem Wiederholung der Zweck ist.
  3. Es ist Montag: eine kurze Übersicht schicken, auch wenn sich nichts geändert hat, damit ich weiß, dass der Job lebt.
  4. Sonst: still bleiben.

Die Montagsübersicht ist wichtiger, als sie aussieht. Ein Wächter, der schweigt, weil alles in Ordnung ist, und ein Wächter, der schweigt, weil er vor drei Wochen abgestürzt ist, sehen von außen genau gleich aus.

Das Problem mit der festen Adresse

Mit dem Wechsel von RDAP zur API des Registrars kam die Freischaltung auf den Tisch. Mein Registrar antwortet nur auf Aufrufe von IP-Adressen, die vorher im Konto eingetragen wurden. Der Rechner, auf dem meine geplanten Jobs laufen, hängt an einem gewöhnlichen Anschluss, dessen Adresse wechselt.

Der Ausweg ist ein kleiner Server mit fester Adresse, den ich ohnehin hatte. Seine Adresse steht auf der Liste. Der Tagesjob verbindet sich per SSH dorthin, führt die beiden API-Aufrufe dort aus und liest die Antwort zurück. Der Server speichert nichts und entscheidet nichts. Er leiht seine Adresse.

Der API-Schlüssel liegt in einer Datei, die nur der Benutzer des Jobs lesen kann. Ein geplanter Job sollte nicht davon abhängen, dass morgens um sieben ein Passwortmanager entsperrt ist.

Was er nicht tut

Er verlängert nichts. Er liest und berichtet. Eine Domain zu verlängern ist eine Zahlung, und Zahlungen soll ein Mensch auslösen, mit der Liste vor sich, der im selben Moment entscheidet, welche Domains kein weiteres Jahr wert sind. Eine automatische Verlängerung zahlt für alle weiter.

Er fasst auch nie DNS an. Ein Job, der das Registrar-Konto lesen kann, ist nützlich. Ein Job, der es ändern kann, ist ein Risiko, das ich für eine Datumsprüfung nicht brauche.

Womit ich anfangen würde

Wer mehr als fünf Domains besitzt, lässt das RDAP-Schnipsel heute über die Liste laufen. Das dauert zwei Minuten und braucht keine Zugangsdaten. Danach kommt es auf einen Zeitplan, bekommt die Vierzehn-Tage-Zeile, und die Ausgabe geht dorthin, wo du ohnehin hinschaust. Die Registrar-API, die Guthabenprüfung und die Stufen können später kommen.

Die Domain, die zwei Tage vor meinem Blick abgelaufen war, hat niemand gebraucht. Es hätte genauso gut die mit dem Checkout sein können.