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

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

1 min read

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

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

1 min read

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

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

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

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

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

1. البدء

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

٢. حقن SMTP نحو Port25 PowerMTA

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

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

export SMTP_HOST=localhost

(إذا نسيت تلك الخطوة، سترى: "متغير البيئة SMTP_HOST لم يتم تعيينه - الإيقاف" عندما تحاول التشغيل.)

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

إلى: SteveT <steve.tuck@sparkpost.com> من: Steve <steve@thetucks.com> الموضوع: هذه رسالة تم إنشاؤها باستخدام HEML النسخة MIME: 1.0 نوع المحتوى: text/html; charset=utf-8 لغة المحتوى: en-GB الترميز النقل: 7bit

نرسل الرسالة بواسطة:

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

نرى:

تم فتح اتصال SMTP (بسيط) إلى localhost، المنفذ 25، المستخدم=""، كلمة السر="" إرسال tests/fancy-HTML-to-smt.eml من: Steve <steve@thetucks.com> إلى: SteveT <steve.tuck@sparkpost.com> حسنًا - خلال 0.028 ثانية

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

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

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

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

  • استخدام موقع PowerMTA DKIM Wizard لإنشاء مفتاح خاص للنطاق المرسل (في حالتي، 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 يدعم وسائل مختلفة لحقن الرسائل، بما في ذلك دليل "التقاط" للملفات، SMTP، وAPI. SMTP هي الطريقة المستخدمة هنا.

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

export SMTP_HOST=localhost

(إذا نسيت تلك الخطوة، سترى: "متغير البيئة SMTP_HOST لم يتم تعيينه - الإيقاف" عندما تحاول التشغيل.)

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

إلى: SteveT <steve.tuck@sparkpost.com> من: Steve <steve@thetucks.com> الموضوع: هذه رسالة تم إنشاؤها باستخدام HEML النسخة MIME: 1.0 نوع المحتوى: text/html; charset=utf-8 لغة المحتوى: en-GB الترميز النقل: 7bit

نرسل الرسالة بواسطة:

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

نرى:

تم فتح اتصال SMTP (بسيط) إلى localhost، المنفذ 25، المستخدم=""، كلمة السر="" إرسال tests/fancy-HTML-to-smt.eml من: Steve <steve@thetucks.com> إلى: SteveT <steve.tuck@sparkpost.com> حسنًا - خلال 0.028 ثانية

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

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

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

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

  • استخدام موقع PowerMTA DKIM Wizard لإنشاء مفتاح خاص للنطاق المرسل (في حالتي، 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 يدعم وسائل مختلفة لحقن الرسائل، بما في ذلك دليل "التقاط" للملفات، SMTP، وAPI. SMTP هي الطريقة المستخدمة هنا.

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

export SMTP_HOST=localhost

(إذا نسيت تلك الخطوة، سترى: "متغير البيئة SMTP_HOST لم يتم تعيينه - الإيقاف" عندما تحاول التشغيل.)

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

إلى: SteveT <steve.tuck@sparkpost.com> من: Steve <steve@thetucks.com> الموضوع: هذه رسالة تم إنشاؤها باستخدام HEML النسخة MIME: 1.0 نوع المحتوى: text/html; charset=utf-8 لغة المحتوى: en-GB الترميز النقل: 7bit

نرسل الرسالة بواسطة:

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

نرى:

تم فتح اتصال SMTP (بسيط) إلى localhost، المنفذ 25، المستخدم=""، كلمة السر="" إرسال tests/fancy-HTML-to-smt.eml من: Steve <steve@thetucks.com> إلى: SteveT <steve.tuck@sparkpost.com> حسنًا - خلال 0.028 ثانية

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

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

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

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

  • استخدام موقع PowerMTA DKIM Wizard لإنشاء مفتاح خاص للنطاق المرسل (في حالتي، 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):

تعيين 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 استخدمنا API نقل رسائل SparkPost لحقن الرسائل. بالطبع، من الممكن أيضًا حقن الرسائل في SparkPost باستخدام SMTP. قمنا بتعيين متغيرات البيئة على النحو التالي:

export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587

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

يظهر الإخراج أدناه استخدام STARTTLS مع اسم المستخدم وكلمة المرور.

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

سترى:

فتح اتصال SMTP (STARTTLS) مع smtp.sparkpostmail.com، المنفذ 587، المستخدم="SMTP_Injection"، كلمة المرور="****************************************" إرسال tests/fancy-HTML-to-smt.eml من: Steve <steve@thetucks.com> إلى: SteveT <steve.tuck@sparkpost.com> حسناً - في 0.057 ثانية

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

تأمين بيانات اعتمادك

يرجى ملاحظة أن متغيرات البيئة يمكن إعدادها في ملف سكريبت شيل أو ما شابه، لحفظ إعادة الكتابة. إذا فعلت ذلك، يرجى أن تهتم بكلمات المرور/مفاتيح 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 مرات عبر حلقة باش أظهر أن الأوقات المتوسطة كانت مشابهة لـ SMTP وAPI، حوالي 60 مللي ثانية لكل رسالة، وهو سريع جداً. في هذه الحالة، قمنا بالحقن من مثيل EC2 متوسط في نفس منطقة الاستضافة مثل SparkPost.com، وهو وسيلة جيدة للحفاظ على زمن الرحلات الشبكية منخفضاً.

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

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

تلخيصًا …

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

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

دعنا نوصلك بخبير من Bird.
رؤية القوة الكاملة لـ Bird في 30 دقيقة.

بتقديمك طلبًا، فإنك توافق على أن تقوم Bird بالاتصال بك بشأن منتجاتنا وخدماتنا.

يمكنك إلغاء الاشتراك في أي وقت. انظر بيان الخصوصية الخاص بـ Bird للتفاصيل حول معالجة البيانات.

دعنا نوصلك بخبير من Bird.
رؤية القوة الكاملة لـ Bird في 30 دقيقة.

بتقديمك طلبًا، فإنك توافق على أن تقوم Bird بالاتصال بك بشأن منتجاتنا وخدماتنا.

يمكنك إلغاء الاشتراك في أي وقت. انظر بيان الخصوصية الخاص بـ Bird للتفاصيل حول معالجة البيانات.

دعنا نوصلك بخبير من Bird.
رؤية القوة الكاملة لـ Bird في 30 دقيقة.

بتقديمك طلبًا، فإنك توافق على أن تقوم Bird بالاتصال بك بشأن منتجاتنا وخدماتنا.

يمكنك إلغاء الاشتراك في أي وقت. انظر بيان الخصوصية الخاص بـ Bird للتفاصيل حول معالجة البيانات.

R

وصول

G

نمو

م

إدارة

A

أتمتة

النشرة الإخبارية

ابقَ على اطلاع مع Bird من خلال التحديثات الأسبوعية إلى بريدك الوارد.