S/MIME Bagian 3: Pasang dan Pakai untuk Email Aman di Tempat

S/MIME Bagian 3: Pasang dan Pakai untuk Email Aman di Tempat

S/MIME Bagian 3: Pasang dan Pakai untuk Email Aman di Tempat

Dec 1, 2019

Diterbitkan oleh

Diterbitkan oleh

Bird

Bird

Kategori:

Kategori:

Email

Email

Ready to see Bird
in action?

Ready to see Bird
in action?

S/MIME Part 3: Plug and Play for On-Premises Secure Email

In bagian 1, we had a quick tour of S/MIME, looking at signing and encryption of our message streams across a range of mail clients. Bagian 2 took us through a simple command-line tool to sign and encrypt emails, then send them through SparkPost.

Pada bagian ini, kita akan melihat bagaimana alat ini dapat diadaptasi untuk menyuntikkan aliran email ke dalam platform on-premise seperti Port25 PowerMTA dan Momentum.

Oke - mari kita mulai!

1. Memulai

Menginstalasi alat, mendapatkan kunci, dan sebagainya sama persis seperti sebelumnya. Ketika Anda menggunakan sistem email lokal seperti PowerMTA atau Momentum, Anda sudah bertanggung jawab untuk menyiapkan domain pengiriman, kunci DKIM, dll. Apa yang perlu kita lakukan sekarang adalah menyediakan beberapa cara untuk menyuntikkan pesan S/MIME yang sudah terbentuk ke dalam server Anda.

2. Injeksi SMTP menuju Port25 PowerMTA

PowerMTA mendukung berbagai cara injeksi pesan, termasuk direktori "pengambilan" file, SMTP, dan API. SMTP adalah metode yang digunakan di sini.

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

ekspor SMTP_HOST = localhost

(If you forget that step, you’ll see: “Environment var SMTP_HOST not set – stopping” when you try to run.)

Kita sudah memiliki kunci privat pengirim (steve@thetucks.com.pem) dan kunci publik penerima (steve.tuck@sparkpost.com.crt). Beberapa baris pertama dari file pesan adalah:

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: 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 --mengenkripsi --mengirim_smtp

Kita lihat:

Opened SMTP connection (plain) to 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 pesan yang telah ditandatangani dan dienkripsi.

Fitur bonus: DKIM dengan PowerMTA

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

  • Use the PowerMTA Wizard DKIM site to create sending domain private key (in my case, mypmta.thetucks.com.pem) and public DNS TXT record contents.

  • Set up the DNS TXT record, with a chosen selector. For example, I used selector pmta201811. Valid selector characters are defined here.

  • Put mypmta.thetucks.com.pem file on the server in directory /etc/pmta .

  • Add the following to my /etc/pmta/config and restart the pmta service. (Here, these directives are written at global scope; on a production system, you might prefer to add them under a virtual-mta instead.)

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

Catatan DNS dinyatakan OK melalui MX Toolbox, dan DKIM sekarang aktif.


3. Injeksi SMTP Menuju Momentum

Momentum mendukung berbagai cara injeksi pesan, termasuk API dan SMTP. SMTP adalah metode yang digunakan di sini, terhadap sebuah hos yang sudah menjalankan Momentum. Kita akan membiarkan konfigurasinya tidak berubah, karena host tersebut sudah memiliki kemampuan untuk menerima injeksi masuk dari host lain yang telah disetujui.

Ini adalah versi yang lebih kecil dari pengaturan produksi, di mana node "generasi" dan node MTA terpisah, namun digabungkan secara erat melalui VLAN pribadi dan penyeimbang beban, yang membawa lalu lintas injeksi SMTP internal.


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

export SMTP_HOST=xx.xx.xx.xx # atur alamat MTA / VIP Anda sendiri di sini

Seperti sebelumnya, kita memiliki kunci privat pengirim (steve@thetucks.com.pem) dan kunci publik penerima (steve.tuck@sparkpost.com.crt) yang sudah ada pada node "generasi". Beberapa baris pertama dari file pesan cocok dengan alamat-alamat ini.

Kita mengirim pesan dari node "generasi" dengan perintah yang sama persis seperti sebelumnya, dan pesan tersebut muncul di inbox.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --mengenkripsi --mengirim_smtp

As you’d expect, S/MIME also happily coexists with Momentum’s Penandatanganan DKIM.

4. Injeksi SMTP menuju SparkPost

In bagian 2 we used the SparkPost transmissions REST API to inject messages. Of course, it’s also possible to inject messages into SparkPost using SMTP. We set the environment variables like this:

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

If you’re using SparkPost Layanan yang dihosting di Uni Eropa then set SMTP_HOST as smtp.eu.sparkpostmail.com.
(Lihat di sini for more options – for example you can inject on port 2525 rather than 587.)

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

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --mengenkripsi --mengirim_smtp

Kau akan lihat:

Opened SMTP connection (STARTTLS) to 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 akan mengorbankan privasi kunci Anda jika ada orang yang mengintip dari balik bahu Anda.

Mengamankan Kredensial Anda

Perhatikan bahwa variabel lingkungan dapat diatur dalam file skrip shell atau yang serupa, untuk menghemat pengetikan ulang. Jika Anda melakukannya, jagalah kata sandi/kunci API Anda dengan membatasi akses ke file tersebut hanya untuk Anda sendiri. Sebagai contoh, jika berkas penyiapan kredensial Anda bernama my_envs.sh, maka jalankan:

chmod 0700 my_envs.sh

Peringatan Terkait SMTP yang Mungkin Anda Lihat

Injeksi SMTP dari SparkPost cukup ketat, seperti yang Anda harapkan dari sebuah 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 melihatnya:

(530, b'5.7.1 Diperlukan otorisasi. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')

Pesan-pesan kesalahan ini hanya dilaporkan apa adanya dari pustaka SMTP Python, oleh karena itu formatnya.

Mana yang lebih cepat - SMTP atau API?

Sejujurnya, S/MIME tidak mungkin menjadi kasus penggunaan bervolume tinggi, tetapi memiliki alat yang sama dengan dua opsi output, seperti mengajak kami berlomba!

File uji email "Avocado" yang digunakan di sini berukuran sekitar 19KB. Mengulangi pengujian sebanyak 10 kali melalui bash loop menunjukkan waktu rata-rata yang sama untuk SMTP dan API, sekitar 60 milidetik per pesan, cukup cepat. Dalam kasus ini, kami menginjeksikan dari instance EC2 menengah di wilayah hosting yang sama dengan SparkPost.com, yang merupakan cara yang baik untuk menjaga waktu pulang-pergi jaringan tetap rendah.

Mengulangi hal ini dengan file uji yang lebih besar (577KB), API membutuhkan waktu sekitar 200 milidetik, sementara SMTP membutuhkan 280 milidetik per pesan - masih mengesankan untuk ukuran file yang 30 kali lebih besar. Tentu saja, jarak tempuh Anda dapat bervariasi tergantung pada lokasi, kepadatan internet, dan sebagainya, tetapi performa sepertinya tidak akan menjadi masalah.

If you really need maximum performance, a good starting point would be to launch a set number of concurrent injection processes/sessions as per our praktik terbaik transmisi recommendations – e.g. from a supervisor task.

Kesimpulan ...

We’ve seen how the SparkPost API-based tool used in Bagian 2 is updated to support SMTP injection to support on-premises MTAs such as Port25 PowerMTA and Momentum in a variety of configurations, as well as with SparkPost.

Itu saja untuk saat ini! Selamat mengirim.

Your new standard in Marketing, Pay & Sales. It's Bird

The right message -> ke right person -> di right time.

Your new standard in Marketing, Pay & Sales. It's Bird

The right message -> ke right person -> di right time.