Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

S/MIME Bagian 3: Plug and Play untuk Email Aman di Tempat

Email

1 min read

S/MIME Bagian 3: Plug and Play untuk Email Aman di Tempat

Email

1 min read

S/MIME Bagian 3: Plug and Play untuk Email Aman di Tempat

Dalam bagian ini, kami akan melihat bagaimana alat ini dapat disesuaikan untuk menyuntikkan aliran email ke platform lokal seperti PowerMTA dan Momentum.

Di bagian 1, kami melakukan tur singkat tentang S/MIME, melihat penandatanganan dan enkripsi aliran pesan kami di berbagai klien surat. Bagian 2 menuntun kita melalui alat baris perintah sederhana untuk menandatangani dan mengenkripsi email, kemudian mengirimkannya melalui SparkPost.

Di bagian ini, kita akan melihat bagaimana alat ini dapat disesuaikan untuk menyuntikkan aliran surat ke dalam platform lokal seperti Port25 PowerMTA dan Momentum.

OK – mari kita mulai!

1. Memulai

Menginstal alat, mendapatkan kunci Anda, dll. persis sama seperti sebelumnya. Ketika Anda menggunakan sistem email di tempat seperti PowerMTA atau Momentum, Anda sudah bertanggung jawab untuk mengatur domain pengiriman, kunci DKIM, dll. Yang perlu kita lakukan sekarang adalah menyediakan cara untuk menyuntikkan pesan S/MIME yang sudah lengkap ke server Anda.

2. SMTP injection towards Port25 PowerMTA

PowerMTA mendukung berbagai cara injeksi pesan, termasuk direktori “pickup” file, SMTP, dan sebuah API. SMTP adalah metode yang digunakan di sini.

Untuk menggambarkan pengaturan yang paling sederhana, kami akan menginstal alat S/MIME pada server yang sama dengan PowerMTA. Kami menyuntikkan pesan ke pendengar, yang secara default terbuka pada port TCP 25, hanya menerima lalu lintas lokal.

export SMTP_HOST=localhost

(Jika Anda lupa langkah itu, Anda akan melihat: “Environment var SMTP_HOST not set – stopping” saat mencoba menjalankan.)

Kami memiliki kunci privat pengirim (steve@thetucks.com.pem) dan kunci publik penerima (steve.tuck@sparkpost.com.crt) yang sudah tersedia. Baris pertama file pesan adalah:

Kepada: SteveT <steve.tuck@sparkpost.com> Dari: Steve <steve@thetucks.com> Subjek: 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

Kami mengirim pesan dengan:

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

Kami melihat:

Membuka koneksi SMTP (plain) ke localhost, port 25, user="", password="" Mengirim tests/fancy-HTML-to-smt.eml Dari: Steve <steve@thetucks.com> Kepada: SteveT <steve.tuck@sparkpost.com> OKE - dalam 0.028 detik

Pesan tiba dengan cepat di inbox dan dilaporkan di Mac Mail sebagai ditandatangani dan dienkripsi.

Fitur bonus: DKIM dengan PowerMTA

DKIM cukup mudah dikonfigurasi dan dapat hidup berdampingan dengan S/MIME. Langkah-langkahnya adalah:

  • Gunakan situs DKIM Wizard PowerMTA untuk membuat kunci privat domain pengirim (dalam kasus saya, mypmta.thetucks.com.pem) dan isi rekaman TXT DNS publik.

  • Siapkan rekaman TXT DNS, dengan selektor yang dipilih. Misalnya, saya menggunakan selektor pmta201811. Karakter selektor yang valid didefinisikan di sini.

  • Letakkan file mypmta.thetucks.com.pem di server dalam direktori /etc/pmta.

  • Tambahkan yang berikut ke /etc/pmta/config saya dan mulailah kembali layanan pmta. (Di sini, petunjuk ini ditulis pada cakupan global; pada sistem produksi, Anda mungkin lebih suka menambahkannya di bawah virtual-mta.)

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

Catatan DNS diperiksa dengan baik melalui MX Toolbox, dan DKIM sekarang aktif.

PowerMTA mendukung berbagai cara injeksi pesan, termasuk direktori “pickup” file, SMTP, dan sebuah API. SMTP adalah metode yang digunakan di sini.

Untuk menggambarkan pengaturan yang paling sederhana, kami akan menginstal alat S/MIME pada server yang sama dengan PowerMTA. Kami menyuntikkan pesan ke pendengar, yang secara default terbuka pada port TCP 25, hanya menerima lalu lintas lokal.

export SMTP_HOST=localhost

(Jika Anda lupa langkah itu, Anda akan melihat: “Environment var SMTP_HOST not set – stopping” saat mencoba menjalankan.)

Kami memiliki kunci privat pengirim (steve@thetucks.com.pem) dan kunci publik penerima (steve.tuck@sparkpost.com.crt) yang sudah tersedia. Baris pertama file pesan adalah:

Kepada: SteveT <steve.tuck@sparkpost.com> Dari: Steve <steve@thetucks.com> Subjek: 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

Kami mengirim pesan dengan:

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

Kami melihat:

Membuka koneksi SMTP (plain) ke localhost, port 25, user="", password="" Mengirim tests/fancy-HTML-to-smt.eml Dari: Steve <steve@thetucks.com> Kepada: SteveT <steve.tuck@sparkpost.com> OKE - dalam 0.028 detik

Pesan tiba dengan cepat di inbox dan dilaporkan di Mac Mail sebagai ditandatangani dan dienkripsi.

Fitur bonus: DKIM dengan PowerMTA

DKIM cukup mudah dikonfigurasi dan dapat hidup berdampingan dengan S/MIME. Langkah-langkahnya adalah:

  • Gunakan situs DKIM Wizard PowerMTA untuk membuat kunci privat domain pengirim (dalam kasus saya, mypmta.thetucks.com.pem) dan isi rekaman TXT DNS publik.

  • Siapkan rekaman TXT DNS, dengan selektor yang dipilih. Misalnya, saya menggunakan selektor pmta201811. Karakter selektor yang valid didefinisikan di sini.

  • Letakkan file mypmta.thetucks.com.pem di server dalam direktori /etc/pmta.

  • Tambahkan yang berikut ke /etc/pmta/config saya dan mulailah kembali layanan pmta. (Di sini, petunjuk ini ditulis pada cakupan global; pada sistem produksi, Anda mungkin lebih suka menambahkannya di bawah virtual-mta.)

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

Catatan DNS diperiksa dengan baik melalui MX Toolbox, dan DKIM sekarang aktif.

PowerMTA mendukung berbagai cara injeksi pesan, termasuk direktori “pickup” file, SMTP, dan sebuah API. SMTP adalah metode yang digunakan di sini.

Untuk menggambarkan pengaturan yang paling sederhana, kami akan menginstal alat S/MIME pada server yang sama dengan PowerMTA. Kami menyuntikkan pesan ke pendengar, yang secara default terbuka pada port TCP 25, hanya menerima lalu lintas lokal.

export SMTP_HOST=localhost

(Jika Anda lupa langkah itu, Anda akan melihat: “Environment var SMTP_HOST not set – stopping” saat mencoba menjalankan.)

Kami memiliki kunci privat pengirim (steve@thetucks.com.pem) dan kunci publik penerima (steve.tuck@sparkpost.com.crt) yang sudah tersedia. Baris pertama file pesan adalah:

Kepada: SteveT <steve.tuck@sparkpost.com> Dari: Steve <steve@thetucks.com> Subjek: 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

Kami mengirim pesan dengan:

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

Kami melihat:

Membuka koneksi SMTP (plain) ke localhost, port 25, user="", password="" Mengirim tests/fancy-HTML-to-smt.eml Dari: Steve <steve@thetucks.com> Kepada: SteveT <steve.tuck@sparkpost.com> OKE - dalam 0.028 detik

Pesan tiba dengan cepat di inbox dan dilaporkan di Mac Mail sebagai ditandatangani dan dienkripsi.

Fitur bonus: DKIM dengan PowerMTA

DKIM cukup mudah dikonfigurasi dan dapat hidup berdampingan dengan S/MIME. Langkah-langkahnya adalah:

  • Gunakan situs DKIM Wizard PowerMTA untuk membuat kunci privat domain pengirim (dalam kasus saya, mypmta.thetucks.com.pem) dan isi rekaman TXT DNS publik.

  • Siapkan rekaman TXT DNS, dengan selektor yang dipilih. Misalnya, saya menggunakan selektor pmta201811. Karakter selektor yang valid didefinisikan di sini.

  • Letakkan file mypmta.thetucks.com.pem di server dalam direktori /etc/pmta.

  • Tambahkan yang berikut ke /etc/pmta/config saya dan mulailah kembali layanan pmta. (Di sini, petunjuk ini ditulis pada cakupan global; pada sistem produksi, Anda mungkin lebih suka menambahkannya di bawah virtual-mta.)

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

Catatan DNS diperiksa dengan baik melalui MX Toolbox, dan DKIM sekarang aktif.

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 masuk dari host lain yang disetujui.

Ini adalah versi yang lebih kecil dari sebuah pengaturan produksi, di mana node "generation" dan node MTA terpisah, namun terhubung 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 # setel alamat MTA / VIP Anda di sini

Seperti sebelumnya, kami memiliki kunci pribadi pengirim (steve@thetucks.com.pem) dan kunci publik penerima (steve.tuck@sparkpost.com.crt) sudah ada di node "generation". Beberapa baris pertama file pesan cocok dengan alamat-alamat ini.

Kami mengirim pesan dari node "generation" dengan perintah yang sama persis seperti sebelumnya, dan pesan muncul di inbox.

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

Seperti yang diharapkan, 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 dimungkinkan untuk menyuntikkan pesan ke SparkPost menggunakan SMTP. Kami menetapkan variabel lingkungan seperti ini:

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

Jika Anda menggunakan layanan SparkPost yang dihosting di UE, maka atur SMTP_HOST sebagai smtp.eu.sparkpostmail.com.
(Lihat di sini untuk lebih banyak opsi – misalnya, Anda dapat menyuntikkan pada port 2525 alih-alih 587.)

Output di bawah ini menunjukkan bahwa STARTTLS digunakan, bersama dengan nama pengguna dan kata sandi.

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

Anda akan melihat:

Terbuka koneksi SMTP (STARTTLS) ke smtp.sparkpostmail.com, port 587, user="SMTP_Injection", password="****************************************" Mengirim tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - dalam 0.057 detik

Kata sandi dicetak dengan menggantikan karakter ***, sehingga Anda tidak membahayakan privasi kunci Anda jika seseorang melihat dari belakang Anda.

Mengamankan Kredensial Anda

Perhatikan bahwa variabel lingkungan dapat disiapkan dalam file skrip shell atau yang serupa, untuk menghemat pengetikan ulang. Jika Anda melakukannya, tolong jaga kata sandi/kenyataan API Anda dengan membatasi akses ke file itu untuk diri Anda sendiri saja. Sebagai contoh, jika file pengaturan kredensial Anda bernama my_envs.sh, maka jalankan:

chmod 0700 my_envs.sh

Peringatan Terkait SMTP yang Mungkin Anda Lihat

Injeksi SMTP SparkPost cukup ketat, seperti yang Anda harapkan dari layanan publik. Jika Anda belum menetapkan nomor port SMTP, Anda akan melihat peringatan:

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

Jika Anda belum menetapkan nama pengguna SMTP atau belum menetapkan 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 Python SMTP, oleh karena itu formatnya.

Yang mana yang lebih cepat – SMTP atau API?

Sejujurnya, S/MIME kemungkinan besar bukan merupakan kasus penggunaan dengan volume tinggi, tetapi memiliki alat yang sama dengan dua opsi keluaran hanya meminta kami untuk menjalankan balapan!

Berkas uji email “Avocado” yang digunakan di sini kira-kira berukuran 19KB. Mengulangi pengujian 10 kali melalui loop bash menunjukkan waktu rata-rata yang serupa untuk SMTP dan API, sekitar 60 milidetik per pesan, yang cukup cepat. Dalam kasus ini, kami menyuntik dari instans EC2 medium di region hosting yang sama dengan SparkPost.com, yang merupakan cara yang baik untuk menjaga waktu perjalanan jaringan rendah.

Mengulangi ini dengan berkas uji yang lebih besar (577KB), API memakan waktu sekitar 200 milidetik, sementara SMTP memakan waktu 280 milidetik per pesan – tetap mengesankan untuk ukuran berkas yang 30x lebih besar. Tentu saja, hasilnya dapat bervariasi tergantung pada lokasi, kemacetan internet, dll, tetapi kinerja kemungkinan tidak akan menjadi masalah.

Jika Anda benar-benar memerlukan kinerja maksimum, titik awal yang baik adalah meluncurkan sejumlah proses/sesi injeksi serentak sesuai rekomendasi transmission best practices kami – misalnya dari tugas supervisor.

Merangkum …

Kami telah melihat bagaimana alat berbasis API SparkPost yang digunakan di Bagian 2 diperbarui untuk mendukung injeksi SMTP untuk mendukung MTAs lokal seperti Port25 PowerMTA dan Momentum dalam berbagai konfigurasi, serta dengan SparkPost.

Itu saja untuk sekarang! Selamat mengirim.

Bergabunglah dengan Newsletter kami.

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Bergabunglah dengan Newsletter kami.

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Bergabunglah dengan Newsletter kami.

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Logo Pinterest
Uber logo
Square logo
Logo Adobe
Logo Meta
Logo PayPal

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Uber logo
Square logo
Logo Adobe
Logo Meta

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Uber logo
Logo Adobe
Logo Meta

Reach

Grow

Manage

Automate

Sumber Daya

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.