قم بمراجعة أمان البريد الإلكتروني لنطاقك في كل دفعة باستخدام GitHub Actions
إجراء GitHub الذي يتحقق من سجلات SPF وDMARC وDKIM باستخدام واجهة برمجة تطبيقات botoi ويفشل في الإنشاء في حالة فقدان أي سجل أو تكوينه بشكل خاطئ.
يقوم أحد الأشخاص في فريقك بتحديث سجل DNS. يتم حذف إدخال TXT أثناء ترحيل الموفر. سجل نظام التعرف على هوية المرسل (SPF) الخاص بك يتجاوز بصمت حد البحث البالغ 10. تبدأ رسائل البريد الإلكتروني في الهبوط في البريد العشوائي. لا أحد إشعارات لمدة أسبوعين حتى يذكر العميل أنه لم يتلق فاتورتك مطلقًا.
سجلات أمان البريد الإلكتروني المستندة إلى DNS (SPF، DMARC، DKIM) هي نوع البنية التحتية التي يعمل بشكل مثالي حتى لا يحدث ذلك. عندما ينكسر، يكون وضع الفشل صامتًا: لا توجد أخطاء، لا توجد تنبيهات، تختفي رسائل البريد الإلكتروني في مجلدات البريد العشوائي.
يقوم هذا الدليل بإعداد إجراء GitHub الذي يتحقق من صحة السجلات الثلاثة في كل دفعة. إذا أي سجل مفقود أو تم تكوينه بشكل خاطئ، يفشل سير العمل ويخبرك بما حدث.
ما يفعله سير العمل
على كل دفعة ل main، الفعل:
- يدعو بوتوي
/v1/dns-security/spf-checkنقطة النهاية للتحقق من صحة سجل SPF الخاص بك - المكالمات
/v1/dns-security/dmarc-checkللتحقق من صحة سياسة DMARC الخاصة بك - المكالمات
/v1/dns-security/dkim-checkللتحقق من نشر مفتاح DKIM الخاص بك - يتم الخروج برمز غير الصفر في حالة فشل أي عملية تحقق، مما يؤدي إلى حظر الدمج
سير عمل GitHub Action
يخلق .github/workflows/dns-security.yml في مستودعك:
يستبدل yourdomain.com مع المجال الخاص بك و google مع
محدد DKIM الخاص بمزود البريد الإلكتروني الخاص بك. يتم تشغيل سير العمل عند كل ضغطة main,
بجدول يومي، ويمكن تشغيله يدويًا من علامة التبويب "الإجراءات".
ما يتحقق من صحة كل الاختيار
SPF (إطار سياسة المرسل)
يعلن نظام التعرف على هوية المرسل (SPF) عن خوادم البريد المصرح لها بإرسال البريد الإلكتروني لنطاقك. واجهة برمجة التطبيقات تقوم بإرجاع السجل الأولي، وقائمة الآليات التي تم تحليلها، وما إذا كان السجل صالحًا.
المجالات الرئيسية للمشاهدة:
-
has_spf: هل هناك سجل TXT يبدأ بـv=spf1؟ إذا كان هذا خطأ، فيمكن لأي خادم المطالبة بإرسال بريد إلكتروني من المجال الخاص بك. -
valid: هل يتم تحليل السجل بشكل صحيح؟ تنكسر سجلات SPF عندما يتجاوز حد بحث DNS البالغ 10 أو يحتوي على أخطاء في بناء الجملة. -
all_policy:آلية زائدة.-all(الفشل الصعب) هو أقوى الإعداد.~all(فشل بسيط) يضع علامة على البريد غير المصرح به على أنه مشبوهة.+allيهزم الغرض من SPF تمامًا.
مثال لاستجابة واجهة برمجة التطبيقات (API) لسجل SPF سليم:
DMARC (مصادقة الرسائل وإعداد التقارير والتوافق على أساس المجال)
يخبر DMARC الخوادم المتلقية بما يجب فعله عند فشل عمليات التحقق من نظام التعرف على هوية المرسل (SPF) أو DKIM. بدونها، حتى سجلات SPF وDKIM الصالحة لا تمنع الانتحال.
المجالات الرئيسية للمشاهدة:
-
policy: ماذا يحدث للرسائل الفاشلة.rejectقطرات لهم،quarantineيرسلهم إلى البريد العشوائي،noneلا يتخذ أي إجراء (المراقبة فقط). -
pct: النسبة المئوية للرسائل التي تنطبق عليها السياسة. ابدأ بسعر منخفض الرقم أثناء الطرح، ثم انتقل إلى 100. -
reporting.rua: حيث يتم إرسال التقارير المجمعة. بدون هذا أنت ليس لديهم رؤية لفشل المصادقة.
مثال لاستجابة واجهة برمجة التطبيقات (API) لسجل DMARC:
DKIM (البريد المحدد بمفاتيح المجال)
يضيف DKIM توقيعًا مشفرًا إلى الرسائل الصادرة. تقوم خوادم الاستقبال بالتحقق من التوقيع مقابل المفتاح العام المنشور في DNS الخاص بك. إذا كان المفتاح مفقودًا أو تم تدويره بدون تحديث DNS، يفشل التحقق من التوقيع.
المجالات الرئيسية للمشاهدة:
-
has_dkim: هل تم نشر مفتاح DKIM للمحدد المحدد؟ كل البريد الإلكتروني يستخدم الموفر اسم محدد مختلف. -
public_key_length: يوصي NIST بحد أدنى 2048 بت. المفاتيح أقصر من 1024 بت تعتبر ضعيفة. -
key_type: تستخدم معظم المفاتيح RSA. مفاتيح Ed25519 أصغر وأسرع ولكن لديهم دعم محدود عبر موفري البريد.
مثال لاستجابة واجهة برمجة التطبيقات (API) للتحقق من DKIM:
محددات DKIM الشائعة حسب الموفر
| مزود البريد الإلكتروني | محدد (محددات) DKIM |
|---|---|
| مساحة عمل جوجل | google |
| مايكروسوفت 365 | selector1, selector2 |
| أمازون سيس | يعتمد على UUID (راجع لوحة معلومات SES الخاصة بك) |
| ميلشيمب / ماندريل | k1 |
| سيندغريد | s1, s2 |
| ختم البريد | تم إنشاؤها لكل مجال (تحقق من إعدادات DNS) |
توسيع سير العمل
مجالات متعددة
إذا كنت تدير عدة مجالات، فاستخدم استراتيجية المصفوفة للتحقق من كل مجال. أضف بوتوي مفتاح API باعتباره سر GitHub لتجنب الوصول إلى الحد الأقصى لمعدل الطبقة المجانية.
إخطارات الركود على الفشل
قم بإضافة خطوة إعلام يتم تفعيلها عند فشل أي عملية تحقق. يستخدم هذا العمل الرسمي لـ Slack GitHub:
إعداد مونوريبو
في monorepo، ربما لا تريد تشغيل فحوصات DNS في كل مرة يتم فيها الدفع package. نطاق المشغل للتغييرات في الملفات المتعلقة بالبنية التحتية:
لا يزال المشغل المجدول يعمل يوميًا بغض النظر عن مرشحات المسار، لذلك يمكنك التقاط DNS التغييرات التي تم إجراؤها خارج المستودع.
استخدام مفتاح API لحدود المعدلات الأعلى
إذا قمت بفحص مجالات متعددة أو قمت بتشغيل سير العمل بشكل متكرر، فقم بإضافة مفتاح botoi API الخاص بك باعتباره سر إجراءات GitHub:
- انتقل إلى إعدادات الريبو الخاص بك > أسرار ومتغيرات > الإجراءات
- إضافة سر اسمه
BOTOI_API_KEY - أضف رأس المصادقة إلى كل أمر تجعيد:
ماذا تفعل عندما تفشل الشيكات
-
سجل نظام التعرف على هوية المرسل (SPF) مفقود: أضف سجل TXT إلى DNS الخاص بنطاقك. ابدأ بـ
v=spf1 include:_spf.google.com ~all(استبدل التضمين بـ مجال SPF لموفر البريد الإلكتروني). -
سجل نظام التعرف على هوية المرسل (SPF) غير صالح: من المحتمل أنك وصلت إلى الحد الأقصى لبحث DNS وهو 10. استخدم
أداة تسطيح SPF للاستبدال
include:آليات مع عناوين IP، أو توحيد مقدمي الخدمات. -
سجل DMARC مفقود: أضف سجل TXT في
_dmarc.yourdomain.com. ابدأ بـv=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comلرصد قبل التنفيذ. -
سياسة DMARC هي "لا شيء": هذا أمر جيد أثناء الطرح. بمجرد التأكد
يمر البريد الإلكتروني الشرعي بنظام SPF وDKIM، انتقل إلى
p=quarantineوثمp=reject. -
سجل DKIM مفقود: تأكد من أن لديك المحدد الصحيح لجهازك
مزود البريد الإلكتروني (انظر الجدول أعلاه). يجب نشر المفتاح كسجل TXT في
[selector]._domainkey.yourdomain.com. - مفتاح DKIM قصير جدًا: قم بتدوير مفتاح DKIM الخاص بك إلى 2048 بت من خلال ملفك لوحة إدارة موفر البريد الإلكتروني، ثم قم بتحديث سجل DNS TXT.
FAQ
- هل أحتاج إلى مفتاح botoi API لسير العمل هذا؟
- لا. تسمح الطبقة المجانية بـ 5 طلبات في الدقيقة بدون مفتاح API. يقدم سير العمل 3 طلبات لكل تشغيل (SPF، DMARC، DKIM)، وهو ما يتناسب مع الحد الأقصى. إذا قمت بإجراء عمليات فحص على نطاقات أو محددات متعددة، فأضف مفتاح API الخاص بك باعتباره سر GitHub وقم بتمريره في رأس التفويض.
- هل يمكنني التحقق من مجالات متعددة في تشغيل سير عمل واحد؟
- نعم. قم بالتكرار فوق مجموعة من المجالات في البرنامج النصي للتحقق. يتطلب كل مجال 3 استدعاءات لواجهة برمجة التطبيقات (API)، لذا فإن التشغيل ذو الطبقة المجانية يتعامل مع نطاق واحد لكل استدعاء. بالنسبة للنطاقات المتعددة، قم بإضافة مفتاح botoi API لتجنب تحديد المعدل.
- ما محدد DKIM الذي يجب أن أستخدمه؟
- يعتمد المحدد على مزود البريد الإلكتروني الخاص بك. يستخدم Google Workspace "google"، ويستخدم Microsoft 365 "selector1" و"selector2"، ويستخدم Amazon SES محددًا يستند إلى UUID. تحقق من سجلات DNS TXT الخاصة بك بحثًا عن الإدخالات المطابقة للنمط [selector]._domainkey.yourdomain.com.
- هل سيمنع سير العمل هذا عمليات النشر الخاصة بي؟
- فقط في حالة فشل الفحص، فهذا يعني أن سجلات أمان البريد الإلكتروني الخاصة بك مفقودة أو تم تكوينها بشكل خاطئ. هذه هي النقطة: أنت تريد اكتشاف هذه المشكلات قبل أن تسبب مشكلات في إمكانية التسليم. يمكنك تغيير سير العمل لنشر تحذير بدلاً من الفشل عن طريق استبدال "الخروج 1" بخطوة تؤدي إلى إنشاء مشكلة في GitHub أو إرسال رسالة Slack.
- كم مرة يجب أن أقوم بهذا الفحص؟
- في كل دفعة إلى الفرع الرئيسي الخاص بك هو خط الأساس. قم بإضافة مشغل cron مجدول (على سبيل المثال، يوميًا في الساعة 9 صباحًا) لالتقاط تغييرات DNS التي تم إجراؤها خارج الريبو الخاص بك، كما هو الحال عندما يقوم أحد أعضاء الفريق بتحرير السجلات في لوحة معلومات المسجل.
ابدأ البناء مع botoi
أكثر من 150 نقطة نهاية API للبحث ومعالجة النصوص وتوليد الصور وأدوات المطورين. باقة مجانية، بدون بطاقة ائتمان.