
Dalam bagian ini, kami akan melihat bagaimana alat ini dapat disesuaikan untuk menyuntikkan aliran email ke platform lokal seperti PowerMTA dan Momentum.
Dalam bagian 1, kami melakukan tur singkat tentang S/MIME, melihat penandatanganan dan enkripsi aliran pesan kami di berbagai klien email. Untuk organisasi yang menerapkan enkripsi S/MIME, memahami cara mengumpulkan kunci publik penerima secara efisien menjadi penting untuk operasi email aman yang dapat diskalakan. Bagian 2 membawa kita melalui alat baris perintah sederhana untuk menandatangani dan mengenkripsi email, kemudian mengirimkannya melalui SparkPost.
Dalam bagian ini, kita akan melihat bagaimana alat tersebut dapat disesuaikan untuk menyuntikkan aliran email ke platform lokal seperti Port25 PowerMTA dan Momentum.
Baiklah – mari kita mulai!
1. Memulai
Menginstal alat, mendapatkan kunci Anda, dll. persis sama seperti sebelumnya. Ketika Anda menggunakan sistem email di lokasi seperti PowerMTA atau Momentum, Anda sudah bertanggung jawab untuk mengatur domain pengiriman, kunci DKIM, dll. Organisasi yang menjalankan sistem di lokasi juga sering perlu menangani tantangan sistem pengarsipan email untuk kepatuhan peraturan dan persyaratan retensi data. Apa yang perlu kita lakukan sekarang adalah menyediakan cara untuk menyuntikkan pesan S/MIME yang sudah terbentuk sepenuhnya ke dalam server Anda.
2. SMTP injection towards Port25 PowerMTA
3. Penyuntikan SMTP Menuju Momentum
Momentum mendukung berbagai cara penyuntikan pesan, termasuk API dan SMTP. SMTP adalah metode yang digunakan di sini, menuju ke host yang sudah menjalankan Momentum. Kami akan membiarkan konfigurasinya tidak berubah, karena sudah memiliki kemampuan untuk menerima penyuntikan yang masuk dari host lain yang disetujui.
Ini adalah versi yang lebih kecil dari pengaturan produksi, di mana node "generation" dan node MTA terpisah, namun terkait erat melalui VLAN pribadi dan load-balancer, membawa lalu lintas penyuntikan SMTP internal.

Alat S/MIME dipasang seperti sebelumnya, dan kami akan menyuntikkan pesan ke alamat host SMTP (MTA):
export SMTP_HOST=xx.xx.xx.xx # tentukan alamat MTA/VIP Anda sendiri di sini
Seperti sebelumnya, kami memiliki kunci pribadi pengirim (steve@thetucks.com.pem) dan kunci publik penerima (steve.tuck@sparkpost.com.crt) yang sudah ada di node "generation". Baris pertama dari file pesan sesuai dengan alamat ini.
Kami mengirim pesan dari node "generation" dengan perintah yang persis sama seperti sebelumnya, dan pesan tersebut muncul di dalam inbox.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Seperti yang Anda harapkan, S/MIME juga dengan senang hati berkoeksistensi dengan DKIM signing Momentum.
4. Injeksi SMTP terhadap SparkPost
Di bagian 2 kami menggunakan SparkPost transmissions REST API untuk menyuntikkan pesan. Tentu saja, juga mungkin untuk menyuntikkan pesan ke dalam SparkPost menggunakan SMTP. Kami mengatur variabel lingkungan seperti ini:
export SMTP_PASSWORD=<<API KEY ANDA DI SINI>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587
Jika Anda menggunakan layanan SparkPost yang di-host di UE maka atur SMTP_HOST sebagai smtp.eu.sparkpostmail.com.
(Lihat di sini untuk lebih banyak opsi – misalnya Anda bisa menyuntikkan pada port 2525 daripada 587.)
Output di bawah ini menunjukkan STARTTLS digunakan, bersama dengan nama pengguna dan kata sandi.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Anda akan melihat:
Terhubung ke SMTP (STARTTLS) ke smtp.sparkpostmail.com, port 587, user="SMTP_Injection", password="****************************************" Mengirim tests/fancy-HTML-to-smt.eml Dari: Steve <steve@thetucks.com> Kepada: SteveT <steve.tuck@sparkpost.com> OK - dalam 0.057 detik
Kata sandi dicetak dengan karakter pengganti ***, jadi Anda tidak akan mengorbankan privasi kunci Anda jika seseorang sedang melihat ke arah Anda.
Mengamankan Kredensial Anda
Perhatikan bahwa variabel lingkungan dapat diatur dalam file skrip shell atau sejenisnya, untuk menyimpan ulang pengetikan. Jika Anda melakukannya, harap jaga kata sandi/API key Anda dengan membatasi akses ke file tersebut hanya untuk diri Anda sendiri. Misalnya, jika file pengaturan kredensial Anda bernama my_envs.sh, kemudian jalankan:
chmod 0700 my_envs.sh
Peringatan Terkait SMTP yang Mungkin Anda Lihat
Injeksi SMTP milik SparkPost cukup ketat, seperti yang Anda harapkan dari layanan publik. Jika Anda belum mengatur nomor port SMTP, Anda akan melihat peringatan:
{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}
Jika Anda belum mengatur nama pengguna SMTP atau belum mengatur kata sandi, Anda akan melihat:
(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
Pesan kesalahan ini hanya dilaporkan sebagaimana adanya dari pustaka SMTP Python, oleh karena itu formatnya.
Yang mana yang lebih cepat – SMTP atau API?
Sejujurnya, S/MIME mungkin tidak akan menjadi kasus penggunaan dengan volume tinggi, tetapi memiliki alat yang sama dengan dua opsi keluaran tampaknya hanya memicu kita untuk memacu balapan!
Berkas uji email “Avocado” yang digunakan di sini berukuran sekitar 19KB. Ketika diuji sebanyak 10 kali melalui loop bash menunjukkan waktu rata-rata serupa untuk SMTP dan API, sekitar 60 milidetik per pesan, yang cukup cepat. Dalam kasus ini, kami menyuntik dari instance EC2 menengah di wilayah hosting yang sama dengan SparkPost.com, yang merupakan cara yang baik untuk menjaga waktu putaran jaringan tetap rendah.
Mengulangi ini dengan berkas uji yang lebih besar (577KB), API memakan waktu sekitar 200 milidetik, sementara SMTP memakan waktu 280 milidetik per pesan – masih mengesankan untuk ukuran berkas yang 30x lebih besar. Tentu saja, hasil Anda dapat bervariasi tergantung lokasi, kemacetan internet, dll, tetapi kinerja tampaknya tidak menjadi masalah.
Jika Anda benar-benar membutuhkan kinerja maksimal, titik awal yang baik adalah meluncurkan sejumlah proses/sesi injeksi bersamaan sesuai rekomendasi praktik terbaik transmisi kami – misalnya dari tugas pengawas.