انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

دليل إعداد SPF و DKIM و DMARC

دليل شامل لإعداد سجلات SPF وتوقيع DKIM وسياسات DMARC وسجلات DNS وأدوات الاختبار لتحسين إمكانية تسليم البريد الإلكتروني وأمانه.

وقت القراءة: 15 دقيقة البريد الإلكتروني
spfdkimdmarcبريد إلكترونيdnsأمانmail

جدول المحتويات

مقدمة

تعتمد إمكانية تسليم البريد الإلكتروني وموثوقيته على التكوين الصحيح لـ DNS. تمنع بروتوكولات SPF (Sender Policy Framework) و DKIM (DomainKeys Identified Mail) و DMARC (Domain-based Message Authentication, Reporting & Conformance) وصول رسائلك إلى مجلد البريد العشوائي وتحمي من انتحال النطاق (spoofing).

في هذا الدليل، سنقوم بتكوين سجلات SPF و DKIM و DMARC خطوة بخطوة لتأمين بنية إرسال البريد الإلكتروني على خادم REXE الخاص بك.

ما هو SPF (Sender Policy Framework)؟

SPF هو سجل DNS يحدد الخوادم المصرح لها بإرسال بريد إلكتروني نيابة عن نطاقك. يتحقق خادم البريد المستلم مما إذا كان البريد الوارد قادمًا من عنوان IP محدد في سجل SPF.

إنشاء سجل SPF

أضفه كسجل TXT في لوحة إدارة DNS:

hljs dns
@ IN TXT "v=spf1 ip4:عنوان_IP_الخادم -all"

إذا كنت تستخدم عدة خوادم:

hljs dns
@ IN TXT "v=spf1 ip4:عنوان_IP_1 ip4:عنوان_IP_2 include:_spf.google.com -all"

آليات SPF

الآليةالوصف
ip4:عنوان IPv4 محدد أو كتلة CIDR
ip6:عنوان IPv6 محدد أو كتلة CIDR
include:تضمين سجل SPF لنطاق آخر
aالسماح بـ IP في سجل A للنطاق
mxالسماح بالخوادم في سجل MX للنطاق
allالسياسة لجميع المصادر الأخرى

مؤهلات SPF

+all  → Pass (السماح للجميع — غير موصى به)
~all  → SoftFail (وضع علامة على غير المصرح لهم دون رفض)
-all  → Fail (رفض غير المصرح لهم — موصى به)
?all  → Neutral (بدون فحص)

استخدم دائمًا -all أو على الأقل ~all في سجل SPF. استخدام +all يجعل نطاقك عرضة للانتحال.

اختبار سجل SPF

hljs bash
# استعلام سجل SPF باستخدام dig
dig TXT example.com +short

# استعلام باستخدام nslookup
nslookup -type=TXT example.com

أدوات عبر الإنترنت:

ما هو DKIM (DomainKeys Identified Mail)؟

DKIM هو بروتوكول يضيف توقيعًا رقميًا للرسائل الصادرة، مما يتحقق من عدم تعديل الرسالة أثناء النقل. يوقع الخادم المرسل بالمفتاح الخاص، ويتحقق الخادم المستلم باستخدام المفتاح العام في DNS.

إنشاء زوج مفاتيح DKIM

أنشئ زوج مفاتيح RSA بحجم 2048 بت باستخدام OpenSSL:

hljs bash
# إنشاء المفتاح الخاص
openssl genrsa -out dkim_private.pem 2048

# استخراج المفتاح العام
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem

# تحويل المفتاح العام إلى تنسيق DNS
cat dkim_public.pem | grep -v '^-' | tr -d '\n'

تكوين DKIM مع Postfix (OpenDKIM)

تثبيت OpenDKIM:

hljs bash
sudo apt update
sudo apt install opendkim opendkim-tools -y

إنشاء المفاتيح:

hljs bash
sudo mkdir -p /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s default -v
sudo chown -R opendkim:opendkim /etc/opendkim

ملف تكوين OpenDKIM (/etc/opendkim.conf):

hljs conf
AutoRestart             Yes
AutoRestartRate         10/1h
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple
Mode                    sv
SubDomains              no

OversignHeaders         From

KeyTable                refile:/etc/opendkim/key.table
SigningTable            refile:/etc/opendkim/signing.table
ExternalIgnoreList      /etc/opendkim/trusted.hosts
InternalHosts           /etc/opendkim/trusted.hosts

Socket                  inet:8891@localhost

ملف جدول المفاتيح (/etc/opendkim/key.table):

default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private

ملف جدول التوقيع (/etc/opendkim/signing.table):

*@example.com default._domainkey.example.com

ملف المضيفين الموثوقين (/etc/opendkim/trusted.hosts):

127.0.0.1
localhost
example.com

إضافة سجل DKIM في DNS

أضف المفتاح العام المُنشأ كسجل TXT في DNS:

hljs dns
default._domainkey IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhki...(المفتاح_العام)..."

يجب أن تكون مفاتيح DKIM بحجم 2048 بت. المفاتيح بحجم 1024 بت لم تعد تعتبر آمنة.

التكامل مع Postfix

أضف إلى تكوين Postfix (/etc/postfix/main.cf):

hljs conf
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters

أعد تشغيل الخدمات:

hljs bash
sudo systemctl restart opendkim
sudo systemctl restart postfix

اختبار سجل DKIM

hljs bash
# استعلام سجل DKIM من DNS
dig TXT default._domainkey.example.com +short

# أداة اختبار OpenDKIM
opendkim-testkey -d example.com -s default -vvv

ما هو DMARC؟

يجمع DMARC بين نتائج SPF و DKIM، مما يمنح مالكي النطاقات القدرة على تعيين سياسات مصادقة البريد الإلكتروني وتلقي التقارير. يتصرف الخادم المستلم وفقًا لسياسة DMARC للرسائل التي تفشل في التحقق من SPF أو DKIM.

إنشاء سجل DMARC

أضف كسجل TXT في DNS:

hljs dns
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com; ruf=mailto:dmarc-forensic@example.com; fo=1; adkim=r; aspf=r; pct=100"

مستويات سياسة DMARC

السياسةالوصفالاستخدام
p=noneالإبلاغ فقط، بدون إجراءالمرحلة الأولى — المراقبة
p=quarantineإرسال إلى مجلد البريد العشوائيحماية متوسطة
p=rejectرفض البريد بالكاملحماية كاملة

استراتيجية التنفيذ التدريجي لـ DMARC

التنفيذ التدريجي لـ DMARC هو النهج الأكثر أمانًا:

# المرحلة 1: المراقبة (2-4 أسابيع)
_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com; fo=1"

# المرحلة 2: الحجر (2-4 أسابيع)
_dmarc IN TXT "v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@example.com"

# المرحلة 3: زيادة الحجر
_dmarc IN TXT "v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@example.com"

# المرحلة 4: الحماية الكاملة
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com; ruf=mailto:dmarc-forensic@example.com"

يمكنك استخدام أدوات مجانية مثل dmarcian.com أو postmarkapp.com/dmarc أو easydmarc.com لتحليل تقارير DMARC.

التحقق من جميع السجلات

تحقق من جميع سجلات أمان البريد الإلكتروني دفعة واحدة:

hljs bash
# فحص SPF
dig TXT example.com +short | grep spf

# فحص DKIM
dig TXT default._domainkey.example.com +short

# فحص DMARC
dig TXT _dmarc.example.com +short

# فحص سجل MX
dig MX example.com +short

اختبار إرسال البريد الإلكتروني

أرسل بريدًا تجريبيًا من سطر الأوامر:

hljs bash
# اختبار مفصل باستخدام swaks
sudo apt install swaks -y
swaks --to test@gmail.com --from info@example.com --server localhost --tls

الأخطاء الشائعة والحلول

الخطأالسببالحل
SPF PermErrorأكثر من 10 استعلامات DNSقلل عدد include، ادمج كتل IP
DKIM failعدم تطابق المفاتيحالمفتاح العام في DNS يجب أن يتطابق مع المفتاح الخاص على الخادم
DMARC failخطأ في محاذاة SPF و DKIMنطاق رأس From يجب أن يتطابق مع نطاق SPF/DKIM
Softfailاستخدام ~all في سجل SPFاستبدل بـ -all
Body hash mismatchتم تعديل البريد أثناء النقلاضبط canonicalization على relaxed/relaxed

الخلاصة

يشكل ثلاثي SPF و DKIM و DMARC أساس أمان البريد الإلكتروني. التكوين الصحيح لهذه البروتوكولات الثلاثة يحسن إمكانية تسليم البريد، ويمنع انتحال النطاق، ويحمي سمعة علامتك التجارية. طبّق DMARC تدريجيًا، وحلل التقارير، وتأكد من أن جميع مصادر الإرسال المشروعة متوافقة مع SPF و DKIM قبل الانتقال إلى الحماية الكاملة.