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

Bird

01‏/12‏/2019

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

1 min read

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

Bird

01‏/12‏/2019

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

1 min read

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

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

في الجزء 1، قمنا بجولة سريعة في S/MIME، حيث نظرنا في توقيع وتشفير تدفقات الرسائل لدينا عبر مجموعة متنوعة من عملاء البريد. بالنسبة للمنظمات التي تنفذ تشفير 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 استخدمنا SparkPost transmissions REST API لإدخال الرسائل. بالطبع، من الممكن أيضًا إدخال الرسائل في SparkPost باستخدام SMTP. لقد قمنا بضبط متغيرات البيئة بهذه الطريقة:

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

إذا كنت تستخدم خدمة EU في 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> OK - في 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')

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

أيّهما أسرع – 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.

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

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

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

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

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

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

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

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

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

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

R

وصول

G

نمو

م

إدارة

A

أتمتة

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

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