IONOS legt pro Subdomain automatisch einen Mail-Satz (MX, SPF, DKIM-CNAMEs, autodiscover) und ein www.-Paar an, auch fuer Hosts ohne Mail. Betrifft selendis und matrix vollstaendig, rohana und game nur beim www.-Paar. Ersatzloses Loeschen waere schlechter: ohne SPF gibt es keine Aussage mehr, und ohne MX weichen Absender per RFC 5321 auf A/AAAA aus -- Mail an @rohana.axion1337.de landete dann auf Port 25 des Hosts. Richtig ist Null-MX (RFC 7505) plus SPF -all plus DMARC p=reject. Konkrete Record-Listen fuer rohana und selendis dokumentiert; der User setzt diese beiden direkt um. game, matrix, ftp und die Apex-DMARC- Policy bleiben offen -- bei matrix erst klaeren, ob der Server Mail mit Absender @matrix.axion1337.de verschickt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
9.7 KiB
Backlog
Offene Punkte, die bewusst nicht sofort erledigt wurden. Stand: 2026-07-30.
1. Zertifikatserneuerung braucht offene Ports — oder Umstellung auf DNS-01
Status: offen, zeitkritisch ab ca. 2026-09-28
Das Cert für selendis.axion1337.de wurde am 2026-07-30 ausgestellt und läuft am
2026-10-28 ab. Traefik erneuert automatisch ca. 30 Tage vorher, also ab
Ende September 2026.
Traefik ist auf TLS-ALPN-01 konfiguriert
(--certificatesresolvers.letsencrypt.acme.tlschallenge=true). Diese Challenge
läuft ausschließlich über Port 443, erreichbar aus dem offenen Internet. Ist
der Port zu diesem Zeitpunkt in der Hetzner-Cloud-Firewall gesperrt, scheitert die
Erneuerung still mit:
urn:ietf:params:acme:error:connection :: Timeout during connect (likely firewall problem)
Traefik liefert dann sein Default-Self-Signed-Cert aus — Browser und curl brechen
mit Zertifikatsfehler ab. Das betrifft auch Gitea (rohana.axion1337.de,
Cert im selben Resolver), also die Erreichbarkeit dieses Repos per HTTPS.
Eine IP-Allowlist für die Let's-Encrypt-Server ist keine Option: LE veröffentlicht seine Validierungs-IPs nicht und prüft seit Einführung der Multi-Perspective Validation aus mehreren Regionen gleichzeitig.
IPv6 beachten (Stand 2026-07-30): rohana, www.rohana und selendis haben
inzwischen AAAA-Records auf 2a01:4f8:c17:93eb::1. Damit validiert Let's Encrypt
bevorzugt über IPv6. Die Hetzner-Cloud-Firewall braucht für Port 443 deshalb
eine Regel mit Quelle ::/0 — 0.0.0.0/0 deckt IPv6 nicht mit ab. Fehlt sie,
scheitert die Erneuerung, obwohl IPv4 offen ist. Vom Host aus lässt sich das nicht
verifizieren (Verbindung auf die eigene öffentliche Adresse läuft lokal), das muss
in der Hetzner-Konsole geprüft werden.
Zwei Wege:
- A — Port 443 zur Erneuerung öffnen. Nichts umbauen, aber alle ~60 Tage daran denken. Fehleranfällig, weil das Scheitern nicht auffällt, bis jemand die Seite aufruft.
- B — auf DNS-01 umstellen (empfohlen). Validierung über einen TXT-Record,
kein offener Port nötig, Erneuerung läuft bei komplett dichter Firewall
durch. Voraussetzung: API-Token des DNS-Providers für
axion1337.de, hinterlegt als Secret für Traefik. Ermöglicht zusätzlich Wildcard-Certs (*.axion1337.de), was künftige Subdomains ohne Portöffnung abdeckt.
Nächster Schritt: Entscheidung A oder B. Bei B: DNS-Provider benennen und API-Token bereitstellen, dann Traefik-Resolver umstellen.
Nebenpunkt: www.rohana.axion1337.de löschen
Der Record (A + AAAA) wurde nach IONOS-Default-Muster angelegt. Bei einer
Subdomain ist ein www.-Präfix überflüssig — das Muster gilt für Apex-Domains
(axion1337.de / www.axion1337.de, dort bei IONOS sinnvoll). rohana ist
bereits der Hostname des Dienstes.
Aktueller Zustand: kein Traefik-Router matcht den Namen, Traefik liefert sein
TRAEFIK DEFAULT CERT aus, TLS bricht mit Zertifikatsfehler ab. Der Name
funktioniert also ohnehin nicht.
Empfehlung: A- und AAAA-Record für www.rohana löschen. Es geht nichts
verloren. Die Alternative — Router plus Cert-SAN für den zweiten Namen — bedeutet
mehr Teile, die bei jeder Erneuerung mitvalidieren müssen, ohne Nutzen. Für
selendis aus demselben Grund kein www. anlegen. Siehe Punkt 3 für die
vollständige DNS-Bereinigung.
3. DNS-Bereinigung bei IONOS
Status: rohana und selendis werden vom User direkt umgesetzt (2026-07-30),
game / matrix / ftp / Apex noch offen
Die Zone liegt bei IONOS (ns10xx.ui-dns.*), Zonentransfer ist verweigert — die
Records unten stammen aus gezielten Abfragen und der IONOS-Oberfläche, die Liste
ist daher nicht garantiert vollständig. Für eine vollständige Prüfung entweder
die ungefilterte IONOS-Liste durchgehen oder die Certificate-Transparency-Logs
abfragen.
IONOS legt beim Anlegen einer Subdomain automatisch einen kompletten Mail-Satz mit
an (MX, SPF, DKIM-CNAMEs, autodiscover) und ein www.-Paar — auch für Hosts, auf
denen nie Mail läuft. Bei selendis und matrix ist das passiert, bei rohana und
game nur das www.-Paar.
Warum nicht einfach löschen
Ersatzloses Entfernen der Mail-Records ist die schlechtere Variante:
- Ohne SPF existiert keine Aussage darüber, wer als dieser Name senden darf.
Das bestehende
~allist nur Softfail und wird von vielen Empfängern akzeptiert — eine ungenutzte Subdomain mit gültigen MX und Softfail-SPF ist ein brauchbarer Spoofing-Vektor. - Fehlt ein MX-Record, weichen Absender per RFC 5321 auf A/AAAA aus. Mail an
@rohana.axion1337.dewürde also Port 25 auf188.245.193.243ansprechen.
Richtig ist daher, „hier gibt es keine Mail" explizit zu erklären: Null-MX
(RFC 7505), SPF -all, DMARC p=reject.
rohana.axion1337.de
Löschen: A www.rohana, AAAA www.rohana
Anlegen:
| Typ | Name | Wert |
|---|---|---|
| MX | rohana |
. (Priorität 0) |
| TXT | rohana |
v=spf1 -all |
| TXT | _dmarc.rohana |
v=DMARC1; p=reject; |
Nicht anfassen: A rohana, AAAA rohana — daran hängen Gitea und das Zertifikat.
selendis.axion1337.de
Löschen: MX mx00.ionos.de, MX mx01.ionos.de,
CNAME s1-ionos._domainkey.selendis, CNAME s2-ionos._domainkey.selendis,
CNAME s42582890._domainkey.selendis, CNAME autodiscover.selendis,
A www.selendis, AAAA www.selendis
Ändern — den bestehenden TXT editieren, nicht einen zweiten anlegen (zwei
SPF-Records auf einem Namen ergeben einen PermError, die Prüfung fällt komplett
aus): v=spf1 include:_spf-eu.ionos.com ~all → v=spf1 -all
Anlegen: MX selendis = . (Priorität 0), TXT _dmarc.selendis =
v=DMARC1; p=reject;
Nicht anfassen: A selendis, AAAA selendis.
Vorab prüfen: ob im IONOS-Mail-Bereich ein Postfach oder eine Weiterleitung für
selendis.axion1337.de existiert. Wenn ja, entfallen die MX-Änderungen.
Falls die IONOS-Oberfläche . als MX-Ziel ablehnt: MX löschen und nur die TXT-
Records setzen. -all und p=reject; greifen trotzdem.
Noch offen
www.game,www.matrix(A-Records): dasselbe überflüssige Muster, aber auf fremden Hosts — nicht verifiziert, ob dort etwas darauf hört.matrix.axion1337.de: gleicher Mail-Satz wieselendis, aber erst prüfen, ob der Matrix-Server Benachrichtigungsmails mit Absender…@matrix.axion1337.deverschickt. Wenn ja, müssen SPF und DKIM dort bleiben und auf den echten Absender zeigen.autodiscover.matrixkann in jedem Fall weg — Matrix-Föderation läuft über.well-knownbzw. SRV.ftp.axion1337.de→217.160.233.227: IONOS-Default aus dem Hosting-Paket, zeigt auf IONOS und nicht auf eigene Infrastruktur. Löschen, falls dort kein FTP genutzt wird.- Apex-DMARC ist
v=DMARC1; p=none;— reines Monitoring, kein Schutz. Ohnesp=-Angabe erben alle Subdomains diesesp=none.sp=rejectam Apex wäre der effiziente Hebel für alle Subdomains inklusive künftiger, aber erst nach Klärung vonmatrix, sonst bricht dessen Mailversand. game.axion1337.deist157.90.155.206— derselbe Host wie in Punkt 2, den Prometheus per roher IP scrapt. Der Name wäre die wartbarere Variante.
2. Pterodactyl-Host 157.90.155.206 nicht erreichbar — 2 Prometheus-Targets down
Status: offen, Ursache liegt außerhalb dieses Hosts
Zwei Scrape-Targets sind seit Längerem down — bereits vor dem Monitoring-Rework, also kein Regressionsschaden aus der Umstellung:
| Job | Target | Fehler |
|---|---|---|
gameserver_cadvisor |
157.90.155.206:8080 |
context deadline exceeded |
pterodactyl_host_node |
157.90.155.206:9100 |
context deadline exceeded |
Der Host antwortet von 188.245.193.243 aus nicht auf Ping (100 % packet
loss) und auf keinem der beiden Ports. Das Problem ist also nicht die
Prometheus-Konfiguration, sondern die Erreichbarkeit des Zielhosts. Mögliche
Ursachen, von wahrscheinlich nach unwahrscheinlich:
- Hetzner-Cloud-Firewall des Pterodactyl-Hosts lässt
188.245.193.243nicht auf 8080/9100 — passend zum restriktiven Firewall-Setup. - cAdvisor und node-exporter laufen dort nicht (mehr) bzw. binden nur auf
127.0.0.1. - Host ist abgeschaltet oder umgezogen (IP veraltet).
Nächster Schritt: auf dem Pterodactyl-Host prüfen, ob die beiden Exporter
laufen und worauf sie binden, und die Firewall dort für 188.245.193.243 auf
8080/9100 öffnen. Idealerweise nicht öffentlich, sondern über das private Netz —
dieser Host hat 10.0.0.3/32 auf enp7s0; wenn der Pterodactyl-Host im selben
Hetzner-vSwitch liegt, sollte über die privaten IPs gescrapt werden statt über
die öffentlichen. Dann sind dafür gar keine offenen Ports im Internet nötig.
Solange offen: die beiden Targets in Grafana/Alertmanager als known down behandeln, damit sie kein Dauer-Alerting erzeugen.
Weitere Beobachtungen (nicht beauftragt, aber notiert)
- Prometheus Port 9090 ist öffentlich und ohne Auth erreichbar. Nötig, weil
k3s-Cluster und Matrix-Server per
--web.enable-remote-write-receiverdorthin pushen. Ein offener Remote-Write-Receiver erlaubt Fremden aber das Einspeisen beliebiger Metriken und das Auslesen aller Daten. Sollte per Hetzner-Cloud-Firewall auf die Absender-IPs beschränkt werden — der Hinweis steht als Kommentar inmonitoring/docker-compose.yml, ist aber noch nicht umgesetzt. Gleiches gilt für Loki auf 3100. - Grafana-Admin-Credentials aus
.envgreifen nicht für die HTTP-API. Der Live-Admin wurde offenbar irgendwann in der UI geändert;GF_SECURITY_ADMIN_*wirkt nur beim allerersten Start mit leerem Volume. Verifikation läuft deshalb übergrafana.dbstatt über die API. Kein Defekt, aber bei künftigen Checks wissen.