
في هذا الجزء، سنتناول كيف يمكن تكييف الأداة لإدخال تدفقات البريد إلى المنصات المحلية مثل PowerMTA وMomentum.
في الجزء 1، قمنا بجولة سريعة في S/MIME، حيث نظرنا في توقيع وتشفير تدفقات الرسائل لدينا عبر مجموعة متنوعة من عملاء البريد. بالنسبة للمنظمات التي تنفذ تشفير S/MIME، يصبح فهم كيفية جمع المفاتيح العامة للمستلم بكفاءة أمرًا بالغ الأهمية لعمليات البريد الإلكتروني الآمنة على نطاق واسع. الجزء 2 أخذنا من خلال أداة سطر الأوامر البسيطة لتوقيع وتشفير الرسائل الإلكترونية، ثم إرسالها من خلال SparkPost.
في هذا الجزء، سننظر في كيفية تعديل الأداة لحقن تدفقات البريد في المنصات المحلية مثل Port25 PowerMTA وMomentum.
حسنًا - لنبدأ!
1. البدء
تثبيت الأداة، والحصول على مفاتيحك إلخ. هو تماماً كما كان من قبل. عند استخدامك نظام البريد الإلكتروني داخل المنشأة مثل PowerMTA أو Momentum، تكون بالفعل مسؤولاً عن إعداد نطاقات الإرسال، مفاتيح DKIM إلخ. تحتاج المنظمات التي تعمل بأنظمة داخل المنشأة أيضاً غالباً إلى معالجة تحديات نظام أرشفة البريد الإلكتروني للامتثال التنظيمي ومتطلبات الاحتفاظ بالبيانات. ما نحتاج إلى القيام به الآن هو توفير بعض الوسائل لإدخال رسائل S/MIME المشُكَّلة بالكامل إلى الخوادم الخاصة بك.
٢. حقن SMTP نحو Port25 PowerMTA
٣. حقن SMTP نحو Momentum
Momentum يدعم وسائل مختلفة لحقن الرسائل، بما في ذلك API و SMTP. SMTP هو الطريقة المستخدمة هنا، نحو مضيف يعمل بالفعل على Momentum. سنترك تكوينه دون تغيير، حيث أنه بالفعل لديه القدرة على قبول الحقنات الواردة من المضيفين المعتمدين الآخرين.
هذا نسخة أصغر من إعداد الإنتاج، حيث تكون العقد "التوليد" وعقد MTA منفصلة، ولكنها مترابطة بشكل وثيق عبر VLAN خاص وموازنات الحمل، تحمل حركة مرور حقن SMTP الداخلية.

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