Überprüfen Sie die E-Mail-Sicherheit Ihrer Domain bei jedem Push mit GitHub Actions
Eine GitHub-Aktion, die SPF-, DMARC- und DKIM-Datensätze mithilfe der Botoi-API überprüft und den Build fehlschlägt, wenn ein Datensatz fehlt oder falsch konfiguriert ist.
Jemand in Ihrem Team aktualisiert einen DNS-Eintrag. Bei einer Provider-Migration wird ein TXT-Eintrag gelöscht. Ihr SPF-Eintrag überschreitet stillschweigend die Grenze von 10 Suchvorgängen. E-Mails landen zunehmend im Spam. Niemand Benachrichtigungen zwei Wochen lang, bis ein Kunde erwähnt, dass er Ihre Rechnung nie erhalten hat.
DNS-basierte E-Mail-Sicherheitseinträge (SPF, DMARC, DKIM) sind die Art von Infrastruktur, die funktioniert perfekt, bis es nicht mehr funktioniert. Wenn es kaputt geht, ist der Fehlermodus still: keine Fehler, Keine Benachrichtigungen, E-Mails verschwinden im Spam-Ordner.
Dieser Leitfaden richtet eine GitHub-Aktion ein, die alle drei Datensätze bei jedem Push validiert. Wenn Wenn ein Datensatz fehlt oder falsch konfiguriert ist, schlägt der Workflow fehl und Sie erfahren, was kaputt gegangen ist.
Was der Workflow bewirkt
Bei jedem Anstoß main, die Aktion:
- Ruft die Botoi
/v1/dns-security/spf-checkEndpunkt, um Ihren SPF-Eintrag zu validieren - Anrufe
/v1/dns-security/dmarc-checkum Ihre DMARC-Richtlinie zu validieren - Anrufe
/v1/dns-security/dkim-checkum zu überprüfen, ob Ihr DKIM-Schlüssel veröffentlicht ist - Wird mit einem Code ungleich Null beendet, wenn eine Prüfung fehlschlägt, wodurch die Zusammenführung blockiert wird
Der GitHub-Aktionsworkflow
Erstellen .github/workflows/dns-security.yml in Ihrem Repository:
Ersetzen yourdomain.com mit Ihrer Domain und google mit
den DKIM-Selektor Ihres E-Mail-Anbieters. Der Workflow wird bei jedem Push ausgeführt main,
nach einem täglichen Zeitplan und kann manuell über die Registerkarte „Aktionen“ ausgelöst werden.
Was jede Prüfung validiert
SPF (Sender Policy Framework)
SPF legt fest, welche Mailserver berechtigt sind, E-Mails für Ihre Domain zu versenden. Die API gibt den Rohdatensatz, eine analysierte Liste von Mechanismen und ob der Datensatz gültig ist, zurück.
Wichtige Bereiche, die Sie im Auge behalten sollten:
-
has_spf: Gibt es einen TXT-Eintrag, der mit beginnt?v=spf1? Bei „Falsch“ kann jeder Server behaupten, E-Mails von Ihrer Domain zu senden. -
valid: Wird der Datensatz korrekt analysiert? SPF-Rekorde brechen, wenn sie das 10-DNS-Lookup-Limit überschreiten oder Syntaxfehler enthalten. -
all_policy: Der Nachlaufmechanismus.-all(hard fail) ist die stärkste Einstellung.~all(Soft Fail) markiert nicht autorisierte E-Mails als verdächtig.+allmacht den Zweck von SPF völlig zunichte.
Beispielhafte API-Antwort für einen fehlerfreien SPF-Eintrag:
DMARC (Domänenbasierte Nachrichtenauthentifizierung, Berichterstattung und Konformität)
DMARC teilt empfangenden Servern mit, was zu tun ist, wenn SPF- oder DKIM-Prüfungen fehlschlagen. Ohne es, Selbst gültige SPF- und DKIM-Einträge verhindern Spoofing nicht.
Wichtige Bereiche, die Sie im Auge behalten sollten:
-
policy: Was passiert mit fehlgeschlagenen Nachrichten?rejectTropfen sie,quarantineschickt sie in den Spam,noneergreift keine Maßnahmen (nur Überwachung). -
pct: Der Prozentsatz der Nachrichten, auf die die Richtlinie angewendet wird. Beginnen Sie bei einem Tief Zahl während des Rollouts ändern und dann auf 100 setzen. -
reporting.rua: Wohin aggregierte Berichte gesendet werden. Ohne das, du keinen Einblick in Authentifizierungsfehler haben.
Beispiel-API-Antwort für einen DMARC-Eintrag:
DKIM (DomainKeys Identified Mail)
DKIM fügt ausgehenden Nachrichten eine kryptografische Signatur hinzu. Empfangende Server überprüfen die Signatur gegen einen in Ihrem DNS veröffentlichten öffentlichen Schlüssel. Wenn der Schlüssel fehlt oder verdreht ist Ohne Aktualisierung des DNS schlägt die Signaturüberprüfung fehl.
Wichtige Bereiche, die Sie im Auge behalten sollten:
-
has_dkim: Ist ein DKIM-Schlüssel für den angegebenen Selektor veröffentlicht? Jede E-Mail Der Anbieter verwendet einen anderen Selektornamen. -
public_key_length: NIST empfiehlt mindestens 2048 Bit. Tasten kürzer als 1024 Bit gelten als schwach. -
key_type: Die meisten Schlüssel verwenden RSA. Ed25519-Tasten sind kleiner und schneller, aber haben nur begrenzte Unterstützung bei allen E-Mail-Anbietern.
Beispiel-API-Antwort für eine DKIM-Prüfung:
Gängige DKIM-Selektoren nach Anbieter
| E-Mail-Anbieter | DKIM-Selektor(en) |
|---|---|
| Google Workspace | google |
| Microsoft 365 | selector1, selector2 |
| Amazon SES | UUID-basiert (überprüfen Sie Ihr SES-Dashboard) |
| Mailchimp / Mandrill | k1 |
| SendGrid | s1, s2 |
| Stempel | Pro Domain generiert (DNS-Einstellungen überprüfen) |
Erweiterung des Workflows
Mehrere Domänen
Wenn Sie mehrere Domänen verwalten, verwenden Sie eine Matrixstrategie, um jede einzelne zu überprüfen. Fügen Sie einen Botoi hinzu API-Schlüssel als GitHub-Geheimnis, um zu vermeiden, dass das Free-Tarif-Ratenlimit erreicht wird.
Slack-Benachrichtigungen bei Fehlern
Fügen Sie einen Benachrichtigungsschritt hinzu, der ausgelöst wird, wenn eine Prüfung fehlschlägt. Dies nutzt die offizielle Slack GitHub-Aktion:
Monorepo-Setup
In einem Monorepo möchten Sie wahrscheinlich nicht, dass bei jedem Push eine DNS-Prüfung durchgeführt wird Paket. Richten Sie den Auslöser auf Änderungen in infrastrukturbezogenen Dateien ein:
Der geplante Trigger wird unabhängig von Pfadfiltern weiterhin täglich ausgeführt, sodass Sie DNS abfangen Änderungen, die außerhalb des Repositorys vorgenommen werden.
Verwendung eines API-Schlüssels für höhere Ratenlimits
Wenn Sie mehrere Domänen überprüfen oder den Workflow häufig ausführen, fügen Sie Ihren Botoi-API-Schlüssel hinzu als GitHub Actions-Geheimnis:
- Gehen Sie zu den Einstellungen Ihres Repos > Geheimnisse und Variablen > Aktionen
- Fügen Sie ein Geheimnis mit dem Namen hinzu
BOTOI_API_KEY - Fügen Sie den Auth-Header zu jedem Curl-Befehl hinzu:
Was tun, wenn die Prüfungen fehlschlagen?
-
Fehlender SPF-Eintrag: Fügen Sie einen TXT-Eintrag zum DNS Ihrer Domain hinzu. Beginnen Sie mit
v=spf1 include:_spf.google.com ~all(Ersetzen Sie das Include durch Ihr SPF-Domäne des E-Mail-Anbieters). -
Ungültiger SPF-Eintrag: Sie haben wahrscheinlich das Limit von 10 DNS-Suchen erreicht. Verwenden Sie eine
SPF-Abflachungswerkzeug zum Ersetzen
include:Mechanismen mit IP-Adressen, oder Anbieter konsolidieren. -
Fehlender DMARC-Eintrag: Fügen Sie einen TXT-Eintrag hinzu unter
_dmarc.yourdomain.com. Beginnen Sie mitv=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comzu überwachen vor der Durchsetzung. -
DMARC-Richtlinie ist „none“: Beim Rollout ist das kein Problem. Sobald Sie bestätigt haben
legitime E-Mail besteht SPF und DKIM, wechseln Sie zu
p=quarantineund dannp=reject. -
Fehlender DKIM-Eintrag: Stellen Sie sicher, dass Sie den richtigen Selektor für Ihr Gerät haben
E-Mail-Anbieter (siehe Tabelle oben). Der Schlüssel muss als TXT-Eintrag unter veröffentlicht werden
[selector]._domainkey.yourdomain.com. - DKIM-Schlüssel zu kurz: Drehen Sie Ihren DKIM-Schlüssel durch Ihren auf 2048 Bit Öffnen Sie das Admin-Panel des E-Mail-Anbieters und aktualisieren Sie dann den DNS-TXT-Eintrag.
FAQ
- Benötige ich für diesen Workflow einen Botoi-API-Schlüssel?
- Nein. Das kostenlose Kontingent erlaubt 5 Anfragen pro Minute ohne API-Schlüssel. Der Workflow stellt 3 Anfragen pro Lauf (SPF, DMARC, DKIM), was innerhalb des Grenzwerts liegt. Wenn Sie Prüfungen für mehrere Domänen oder Selektoren durchführen, fügen Sie Ihren API-Schlüssel als GitHub-Geheimnis hinzu und übergeben Sie ihn im Authorization-Header.
- Kann ich mehrere Domänen in einem Workflow-Lauf prüfen?
- Ja. Durchlaufen Sie ein Array von Domänen im Prüfskript. Jede Domäne erfordert 3 API-Aufrufe, sodass ein Free-Tier-Lauf eine Domäne pro Aufruf verarbeitet. Fügen Sie für mehrere Domänen einen Botoi-API-Schlüssel hinzu, um eine Ratenbegrenzung zu vermeiden.
- Welchen DKIM-Selektor sollte ich verwenden?
- Die Auswahl hängt von Ihrem E-Mail-Anbieter ab. Google Workspace verwendet „google“, Microsoft 365 verwendet „selector1“ und „selector2“, Amazon SES verwendet einen UUID-basierten Selektor. Überprüfen Sie Ihre DNS-TXT-Einträge auf Einträge, die dem Muster [selector]._domainkey.yourdomain.com entsprechen.
- Blockiert dieser Workflow meine Bereitstellungen?
- Nur wenn eine Prüfung fehlschlägt, was bedeutet, dass Ihre E-Mail-Sicherheitsdatensätze fehlen oder falsch konfiguriert sind. Darum geht es: Sie möchten diese Probleme erkennen, bevor sie Probleme bei der Zustellbarkeit verursachen. Sie können den Workflow so ändern, dass er eine Warnung sendet, anstatt fehlzuschlagen, indem Sie „Exit 1“ durch einen Schritt ersetzen, der ein GitHub-Problem erstellt oder eine Slack-Nachricht sendet.
- Wie oft sollte ich diese Prüfung durchführen?
- Bei jedem Push zu Ihrem Hauptzweig ist die Basislinie vorhanden. Fügen Sie einen geplanten Cron-Trigger hinzu (z. B. täglich um 9 Uhr), um DNS-Änderungen abzufangen, die außerhalb Ihres Repositorys vorgenommen werden, beispielsweise wenn ein Teamkollege Datensätze im Registrar-Dashboard bearbeitet.
Starte mit botoi zu entwickeln
150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.