Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

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

Burung

1 Des 2019

Email

1 min read

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

Burung

1 Des 2019

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.

Dalam bagian 1, kami telah berkeliling singkat tentang S/MIME, melihat penandatanganan dan enkripsi aliran pesan kami di berbagai klien email. Bagi 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, lalu mengirimkannya melalui SparkPost.

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

Oke – 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

PowerMTA mendukung berbagai cara untuk menyuntikkan pesan, termasuk direktori "pickup" file, SMTP, dan 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: "Variabel lingkungan SMTP_HOST tidak disetel – menghentikan" saat Anda mencoba menjalankan.)

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

Ke: SteveT <steve.tuck@sparkpost.com> Dari: Steve <steve@thetucks.com> Subjek: Ini adalah pesan yang dibuat menggunakan 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:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

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

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

Fitur bonus: DKIM dengan PowerMTA

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

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

  • Siapkan catatan DNS TXT, dengan pemilih yang dipilih. Contohnya, saya menggunakan pemilih pmta201811. Karakter pemilih yang valid didefinisikan di sini.

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

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

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

Catatan DNS berhasil diverifikasi melalui MX Toolbox, dan DKIM sekarang aktif.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA mendukung berbagai cara untuk menyuntikkan pesan, termasuk direktori "pickup" file, SMTP, dan 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: "Variabel lingkungan SMTP_HOST tidak disetel – menghentikan" saat Anda mencoba menjalankan.)

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

Ke: SteveT <steve.tuck@sparkpost.com> Dari: Steve <steve@thetucks.com> Subjek: Ini adalah pesan yang dibuat menggunakan 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:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

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

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

Fitur bonus: DKIM dengan PowerMTA

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

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

  • Siapkan catatan DNS TXT, dengan pemilih yang dipilih. Contohnya, saya menggunakan pemilih pmta201811. Karakter pemilih yang valid didefinisikan di sini.

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

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

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

Catatan DNS berhasil diverifikasi melalui MX Toolbox, dan DKIM sekarang aktif.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA mendukung berbagai cara untuk menyuntikkan pesan, termasuk direktori "pickup" file, SMTP, dan 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: "Variabel lingkungan SMTP_HOST tidak disetel – menghentikan" saat Anda mencoba menjalankan.)

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

Ke: SteveT <steve.tuck@sparkpost.com> Dari: Steve <steve@thetucks.com> Subjek: Ini adalah pesan yang dibuat menggunakan 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:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

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

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

Fitur bonus: DKIM dengan PowerMTA

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

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

  • Siapkan catatan DNS TXT, dengan pemilih yang dipilih. Contohnya, saya menggunakan pemilih pmta201811. Karakter pemilih yang valid didefinisikan di sini.

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

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

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

Catatan DNS berhasil diverifikasi melalui MX Toolbox, dan DKIM sekarang aktif.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

3. Penyuntikan SMTP Menuju Momentum

Momentum mendukung berbagai cara penyuntikan pesan, termasuk API dan SMTP. SMTP adalah metode yang digunakan di sini, menuju host yang sudah menjalankan Momentum. Kami akan membiarkan konfigurasinya tidak berubah, karena sudah memiliki kemampuan untuk menerima suntikan yang masuk dari host lain yang disetujui.

Ini adalah versi lebih kecil dari pengaturan produksi, di mana node "generation" dan node MTA terpisah, tetapi berhubungan erat melalui VLAN pribadi dan penyeimbang beban, yang membawa lalu lintas suntikkan SMTP internal.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


Alat S/MIME diinstal seperti sebelumnya, dan kami akan menyuntikkan pesan ke alamat host SMTP (MTA):

export SMTP_HOST=xx.xx.xx.xx # setel 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 pada 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 tersebut muncul di Inbox.

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

Seperti yang Anda harapkan, S/MIME juga dengan senang hati berdampingan dengan DKIM signing Momentum.

4. Injeksi SMTP terhadap SparkPost

Dalam bagian 2 kami menggunakan SparkPost transmissions REST API untuk mengirim pesan. Tentu saja, juga memungkinkan untuk mengirim pesan ke SparkPost menggunakan SMTP. Kami mengatur variabel lingkungan seperti ini:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Jika Anda menggunakan layanan yang di-host oleh SparkPost EU maka atur SMTP_HOST sebagai smtp.eu.sparkpostmail.com.
(Lihat di sini untuk pilihan lainnya – misalnya Anda dapat mengirim pada port 2525 daripada 587.)

Keluaran 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:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

Kata sandi dicetak dengan karakter pengganti ***, jadi Anda tidak mengorbankan privasi kunci Anda jika seseorang melihat dari belakang bahu Anda.

Melindungi Kredensial Anda

Perhatikan bahwa variabel lingkungan dapat diatur dalam file skrip shell atau serupa, untuk menghindari mengetik ulang. Jika Anda melakukannya, harap jaga kata sandi/API keys Anda dengan membatasi akses ke file tersebut hanya untuk diri Anda sendiri. Misalnya, 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 dari SparkPost sangat 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 dilaporkan sebagaimana adanya dari perpustakaan Python SMTP, oleh karena itu formatnya seperti itu.

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.

Merangkum …

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

Itu saja untuk saat ini! Selamat mengirim.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

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.

Perusahaan

Newsletter

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

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

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.

Perusahaan

Newsletter

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

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

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.

R

Reach

G

Grow

M

Manage

A

Automate

Perusahaan

Newsletter

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