الجزء 3 من S/MIME: التوصيل والتشغيل للبريد الإلكتروني الآمن في الداخل

Bird

01‏/12‏/2019

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

1 min read

الجزء 3 من S/MIME: التوصيل والتشغيل للبريد الإلكتروني الآمن في الداخل

النقاط الرئيسية

    • تكامل S/MIME لخوادم البريد الإلكتروني الداخلية: تعلّم كيفية إدراج تيارات البريد الإلكتروني المشفرة والموقعة في PowerMTA أو Momentum أو SparkPost SMTP مع الحفاظ على إعدادات DKIM والتوافق الحالية.

    • نموذج الأمان الهجين: اجمع بين S/MIME encryption + DKIM signing لضمان كل من مصداقية الرسائل وخصوصية المحتوى في البيئات المنظمة.

    • تدفق النشر: قم بإعداد متغيرات البيئة (SMTP_HOST، الاعتمادات، المفاتيح)، تشغيل عملية --sign --encrypt --send_smtp، والتحقق من تقارير التسليم.

    • رؤية الأداء: تظهر الاختبارات سرعة متطابقة تقريباً لحقن SMTP مقابل API (~60 مللي ثانية لكل رسالة، 200–280 مللي ثانية للملفات الأكبر).

    • أفضل ممارسات الأمان: قم بتخزين المفاتيح الخاصة وكلمات مرور API في ملفات مقيدة (chmod 0700)، استخدم STARTTLS وجلسات SMTP المصادقة.

    • حالات الاستخدام: يمكن للمؤسسات التي تقوم بتحديث أنظمة البريد القديمة توسيع عملية التشفير من طرف إلى طرف دون التخلي عن البنية التحتية الحالية.

أبرز الأسئلة والأجوبة

  • لماذا يتم تكييف S/MIME للخوادم الداخلية بدلاً من واجهات برمجة التطبيقات السحابية؟

    العديد من الصناعات المنظمة (مثل القطاعين المصرفي والرعاية الصحية) يجب أن تحتفظ بالبريد في الموقع. هذا النهج يحافظ على التحكم في تدفق الرسائل بينما يضيف حماية تشفير حديثة.

  • كيف يعمل حقن SMTP مع PowerMTA أو Momentum؟

    أنت تقوم بحقن رسائل S/MIME مكتملة إلى المستمع المحلي (المنفذ 25 أو الشبكة المحلية الخاصة). ثم تتعامل هذه MTAs مع توقيع DKIM والتوصيل كالمعتاد.

  • هل يتوافق S/MIME مع DKIM؟

    نعم — يوقع DKIM الرسالة بعد تشفير S/MIME، لذلك تظل اختبارات المصادقة والنزاهة سليمة.

  • كيف يمكنني حماية بيانات اعتماد ومفاتيح SMTP الخاصة بي؟

    تصدير متغيرات البيئة فقط في البرامج النصية المغلقة واستخدام أذونات الملفات لتقييد الوصول إلى نفسك (chmod 0700 my_envs.sh).

  • ماذا يجب أن أراقب بعد الإعداد؟

    زمن التسليم (API مقابل SMTP)، معدل نجاح المصافحة TLS، نتائج التحقق من DKIM/S-MIME، وسجلات الأخطاء لـ “رفض الترحيل” أو المصادقة المفقودة.

  • من يستفيد أكثر من هذا التكوين؟

    المنظمات التي تقوم بتشغيل بوابات بريد مستضافة ذاتيًا والتي تتطلب تشفيرًا بمستوى الامتثال ولكنها ترغب في أدوات جاهزة للاستخدام بدون إعادة كتابة مسارات البريد.

في هذا الجزء، سنتناول كيف يمكن تكييف الأداة لإدخال تدفقات البريد إلى المنصات المحلية مثل PowerMTA وMomentum.

في الجزء 1، قمنا بجولة سريعة في S/MIME، للنظر في توقيع وتشفير تدفقات الرسائل لدينا عبر مجموعة من عملاء البريد. بالنسبة للمنظمات التي تقوم بتنفيذ تشفير S/MIME، يصبح فهم كيفية جمع مفاتيح المستلمين العامة بشكل فعّال أمرًا حيويًا لعمليات البريد الإلكتروني الآمنة على نطاق واسع. أخذنا الجزء 2 عبر أداة بسيطة في سطر الأوامر لتوقيع وتشفير الرسائل الإلكترونية، ثم إرسالها من خلال SparkPost.

في هذا الجزء، سننظر في كيفية تكيف الأداة لإدخال تدفقات البريد إلى المنصات الموجودة في المواقع مثل Port25 PowerMTA وMomentum.

حسنًا – لنبدأ!

1. البدء

تثبيت الأداة، والحصول على مفاتيحك إلخ. هو تماماً كما كان من قبل. عند استخدامك نظام البريد الإلكتروني داخل المنشأة مثل PowerMTA أو Momentum، تكون بالفعل مسؤولاً عن إعداد نطاقات الإرسال، مفاتيح DKIM إلخ. تحتاج المنظمات التي تعمل بأنظمة داخل المنشأة أيضاً غالباً إلى معالجة تحديات نظام أرشفة البريد الإلكتروني للامتثال التنظيمي ومتطلبات الاحتفاظ بالبيانات. ما نحتاج إلى القيام به الآن هو توفير بعض الوسائل لإدخال رسائل S/MIME المشُكَّلة بالكامل إلى الخوادم الخاصة بك.

٢. حقن SMTP نحو Port25 PowerMTA

PowerMTA يدعم وسائل متنوعة لحقن الرسائل، بما في ذلك دليل "pickup" للملفات، وSMTP، وAPI. SMTP هو الطريقة المستخدمة هنا.

لتوضيح أبسط إعداد ممكن، سنقوم بتثبيت أدوات S/MIME على نفس الخادم مع PowerMTA. نقوم بحقن الرسائل إلى المستمع، الذي يكون مفتوحًا بشكل افتراضي على منفذ TCP 25، ويقبل حركة المرور المحلية فقط.

export SMTP_HOST=localhost

(إذا نسيت هذه الخطوة، سترى: "Environment var SMTP_HOST not set – stopping" عندما تحاول تشغيل البرنامج.)

لدينا مفتاح الخصوصية للمرسل (steve@thetucks.com.pem) ومفتاح العام للمستلم (steve.tuck@sparkpost.com.crt) متاحين بالفعل. الأسطر القليلة الأولى من ملف الرسالة هي:

To: SteveT <steve.tuck@sparkpost.com>
From: Steve <steve@thetucks.com>
Subject: This is a message created using HEML
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

نرسل الرسالة باستخدام:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

نرى:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

تصل الرسالة بسرعة إلى صندوق الوارد وتظهر في بريد Mac كرسالة موقع ومشفرة.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

ميزة إضافية: DKIM مع PowerMTA

تكوين DKIM سهل للغاية ويتوافق بسعادة مع S/MIME. الخطوات هي:

  • استخدم موقع DKIM Wizard الخاص بـ PowerMTA لإنشاء مفتاح بيانات خاص للنطاق المرسل (في حالتي، mypmta.thetucks.com.pem) ومحتويات سجل DNS TXT العام.

  • قم بإعداد سجل DNS TXT، مع تحديد مرسل مختار. على سبيل المثال، استخدمت المرسل pmta201811. يتم تعريف أحرف المرسل الصالحة هنا.

  • ضع ملف mypmta.thetucks.com.pem على الخادم في الدليل /etc/pmta .

  • أضف التالي إلى /etc/pmta/config وأعد تشغيل خدمة pmta. (هنا، يتم كتابة هذه التوجيهات على النطاق العالمي؛ في نظام إنتاج، قد تفضل إضافتها تحت virtual-mta بدلاً من ذلك.)

host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>

تتحقق سجل DNS بشكل جيد عبر MX Toolbox، وDKIM نشط الآن.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA يدعم وسائل متنوعة لحقن الرسائل، بما في ذلك دليل "pickup" للملفات، وSMTP، وAPI. SMTP هو الطريقة المستخدمة هنا.

لتوضيح أبسط إعداد ممكن، سنقوم بتثبيت أدوات S/MIME على نفس الخادم مع PowerMTA. نقوم بحقن الرسائل إلى المستمع، الذي يكون مفتوحًا بشكل افتراضي على منفذ TCP 25، ويقبل حركة المرور المحلية فقط.

export SMTP_HOST=localhost

(إذا نسيت هذه الخطوة، سترى: "Environment var SMTP_HOST not set – stopping" عندما تحاول تشغيل البرنامج.)

لدينا مفتاح الخصوصية للمرسل (steve@thetucks.com.pem) ومفتاح العام للمستلم (steve.tuck@sparkpost.com.crt) متاحين بالفعل. الأسطر القليلة الأولى من ملف الرسالة هي:

To: SteveT <steve.tuck@sparkpost.com>
From: Steve <steve@thetucks.com>
Subject: This is a message created using HEML
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

نرسل الرسالة باستخدام:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

نرى:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

تصل الرسالة بسرعة إلى صندوق الوارد وتظهر في بريد Mac كرسالة موقع ومشفرة.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

ميزة إضافية: DKIM مع PowerMTA

تكوين DKIM سهل للغاية ويتوافق بسعادة مع S/MIME. الخطوات هي:

  • استخدم موقع DKIM Wizard الخاص بـ PowerMTA لإنشاء مفتاح بيانات خاص للنطاق المرسل (في حالتي، mypmta.thetucks.com.pem) ومحتويات سجل DNS TXT العام.

  • قم بإعداد سجل DNS TXT، مع تحديد مرسل مختار. على سبيل المثال، استخدمت المرسل pmta201811. يتم تعريف أحرف المرسل الصالحة هنا.

  • ضع ملف mypmta.thetucks.com.pem على الخادم في الدليل /etc/pmta .

  • أضف التالي إلى /etc/pmta/config وأعد تشغيل خدمة pmta. (هنا، يتم كتابة هذه التوجيهات على النطاق العالمي؛ في نظام إنتاج، قد تفضل إضافتها تحت virtual-mta بدلاً من ذلك.)

host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>

تتحقق سجل DNS بشكل جيد عبر MX Toolbox، وDKIM نشط الآن.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA يدعم وسائل متنوعة لحقن الرسائل، بما في ذلك دليل "pickup" للملفات، وSMTP، وAPI. SMTP هو الطريقة المستخدمة هنا.

لتوضيح أبسط إعداد ممكن، سنقوم بتثبيت أدوات S/MIME على نفس الخادم مع PowerMTA. نقوم بحقن الرسائل إلى المستمع، الذي يكون مفتوحًا بشكل افتراضي على منفذ TCP 25، ويقبل حركة المرور المحلية فقط.

export SMTP_HOST=localhost

(إذا نسيت هذه الخطوة، سترى: "Environment var SMTP_HOST not set – stopping" عندما تحاول تشغيل البرنامج.)

لدينا مفتاح الخصوصية للمرسل (steve@thetucks.com.pem) ومفتاح العام للمستلم (steve.tuck@sparkpost.com.crt) متاحين بالفعل. الأسطر القليلة الأولى من ملف الرسالة هي:

To: SteveT <steve.tuck@sparkpost.com>
From: Steve <steve@thetucks.com>
Subject: This is a message created using HEML
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

نرسل الرسالة باستخدام:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

نرى:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

تصل الرسالة بسرعة إلى صندوق الوارد وتظهر في بريد Mac كرسالة موقع ومشفرة.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

ميزة إضافية: DKIM مع PowerMTA

تكوين DKIM سهل للغاية ويتوافق بسعادة مع S/MIME. الخطوات هي:

  • استخدم موقع DKIM Wizard الخاص بـ PowerMTA لإنشاء مفتاح بيانات خاص للنطاق المرسل (في حالتي، mypmta.thetucks.com.pem) ومحتويات سجل DNS TXT العام.

  • قم بإعداد سجل DNS TXT، مع تحديد مرسل مختار. على سبيل المثال، استخدمت المرسل pmta201811. يتم تعريف أحرف المرسل الصالحة هنا.

  • ضع ملف mypmta.thetucks.com.pem على الخادم في الدليل /etc/pmta .

  • أضف التالي إلى /etc/pmta/config وأعد تشغيل خدمة pmta. (هنا، يتم كتابة هذه التوجيهات على النطاق العالمي؛ في نظام إنتاج، قد تفضل إضافتها تحت virtual-mta بدلاً من ذلك.)

host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>

تتحقق سجل DNS بشكل جيد عبر MX Toolbox، وDKIM نشط الآن.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

٣. حقن SMTP نحو Momentum

Momentum يدعم وسائل مختلفة لإدخال الرسائل، بما في ذلك API وSMTP. SMTP هي الطريقة المستخدمة هنا، نحو المضيف الذي يعمل عليه Momentum بالفعل. سنترك تكوينه دون تغيير، حيث أن لديه بالفعل القدرة على قبول الإدخالات الواردة من المضيفين المعتمدين الآخرين.

هذا إصدار أصغر من إعداد الإنتاج، حيث تكون العقد "التوليدية" وعقد MTA منفصلة، لكنها مرتبطة بشكل وثيق عبر VLAN خاص وموازنات التحميل، وتحمل حركة حقن SMTP الداخلية.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


يتم تثبيت أدوات S/MIME كما كان من قبل، وسنقوم بحقن الرسائل إلى عنوان مضيف SMTP (MTA):

export SMTP_HOST=xx.xx.xx.xx # ضع عنوان MTA / VIP الخاص بك هنا

كما كان من قبل، لدينا المفتاح الخاص للمرسل (steve@thetucks.com.pem) والمفتاح العام للمستلم (steve.tuck@sparkpost.com.crt) موجودين بالفعل على عقدة "التوليد". تتطابق السطور القليلة الأولى من ملف الرسالة مع هذه العناوين.

نرسل الرسالة من عقدة "التوليد" بنفس الأمر تمامًا كما كان من قبل، وتظهر الرسالة في صندوق الوارد.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

كما تتوقع، تتعايش S/MIME أيضاً بسعادة مع توقيع DKIM لMomentum.

4. حقن SMTP باتجاه SparkPost

في الجزء 2 استخدمنا واجهة برمجة التطبيقات (REST API) الخاصة بإرسال SparkPost لحقن الرسائل. بالطبع، من الممكن أيضًا حقن الرسائل في SparkPost باستخدام SMTP. قمنا بضبط متغيرات البيئة كالتالي:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

إذا كنت تستخدم خدمة SparkPost المستضافة في الاتحاد الأوروبي فعليك ضبط SMTP_HOST كـ smtp.eu.sparkpostmail.com.
(انظر هنا لمزيد من الخيارات – على سبيل المثال يمكنك الحقن على المنفذ 2525 بدلاً من 587.)

يوضح الإخراج أدناه أنه يتم استخدام STARTTLS، إلى جانب اسم المستخدم وكلمة المرور.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

سترى:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

يتم طباعة كلمة المرور مع شخصيات *** كبديل، لذلك لا يتم تعريض خصوصية مفتاحك للخطر إذا كان هناك من ينظر إلى كتفك.

تأمين بيانات الاعتماد الخاصة بك

لاحظ أن متغيرات البيئة يمكن إعدادها في ملف نصي للسكربت أو ما شابه، لحفظ إعادة الكتابة. إذا قمت بذلك، يرجى العناية بكلمات المرور/مفاتيح API من خلال تقييد الوصول إلى ذلك الملف لنفسك فقط. على سبيل المثال، إذا تم تسمية ملف إعداد قيمك الائتمانية بـ my_envs.sh، فقم بتشغيل:

chmod 0700 my_envs.sh

تحذيرات متعلقة بـ SMTP قد ترى

حقن SMTP لـ SparkPost صارم جدًا، كما تتوقع من خدمة عامة. إذا لم تقم بضبط رقم منفذ SMTP فسترى تحذيرًا:

{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}

إذا لم تكن قد ضبطت اسم مستخدم SMTP أو لم تضبط كلمة المرور، فسترى:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

يتم الإبلاغ عن رسائل الخطأ هذه كما هي من مكتبة Python SMTP، لذا فإن التنسيق يأتي كما هو.

أيّهما أسرع – SMTP أم API؟

بصراحة، S/MIME من غير المحتمل أن يكون حالة استخدام ذات حجم كبير، ولكن وجود نفس الأداة مع خيارين للإخراج كان مجرد دعوة لنا لخوض سباق!

ملف اختبار البريد الإلكتروني “Avocado” المستخدم هنا حوالي 19 كيلوبايت. أظهرت إعادة تكرار الاختبارات 10 مرات عبر حلقة bash أن الأوقات المتوسطة كانت مشابهة لـ SMTP وAPI، حوالي 60 ميلي ثانية لكل رسالة، وهو سريع جدًا. في هذه الحالة، قمنا بالحقن من مثيل EC2 متوسط في نفس منطقة الاستضافة مثل SparkPost.com، وهي طريقة جيدة للحفاظ على أوقات التأخير في الشبكة منخفضة.

عند تكرار ذلك مع ملف اختبار أكبر (577 كيلوبايت)، استغرقت API حوالي 200 ميلي ثانية، بينما استغرق SMTP 280 ميلي ثانية لكل رسالة – وهو ما يزال مذهلاً لحجم ملف أكبر بـ 30 مرة. بالطبع، قد يختلف الأداء لديك حسب الموقع، وزحمة الإنترنت وما إلى ذلك، ولكن الأداء من غير المحتمل أن يكون مشكلة.

إذا كنت بحاجة إلى أقصى أداء، فإن نقطة الانطلاق الجيدة ستكون إطلاق عدد محدد من عمليات/جلسات الحقن المتزامنة وفقًا لتوصيات أفضل ممارسات النقل الخاصة بنا – على سبيل المثال من مهمة مشرف.

تلخيصًا …

لقد رأينا كيف تم تحديث أداة SparkPost المستندة إلى API المستخدمة في الجزء 2 لدعم حقن SMTP لدعم MTAs المحلية مثل Port25 PowerMTA وMomentum في مجموعة متنوعة من التكوينات، وكذلك مع SparkPost.

هذا كل شيء في الوقت الحالي! نتمنى لك إرسالًا سعيدًا.

أخبار أخرى

اقرأ المزيد من هذه الفئة

A person is standing at a desk while typing on a laptop.

منصة AI-native الكاملة التي تتماشى مع نمو عملك.

A person is standing at a desk while typing on a laptop.

منصة AI-native الكاملة التي تتماشى مع نمو عملك.

A person is standing at a desk while typing on a laptop.

منصة AI-native الكاملة التي تتماشى مع نمو عملك.