Postfix: bagaimana cara menggunakan file sederhana untuk otentikasi SASL?

8

Saya ingin menjalankan Postfix pada VPS Debian untuk mengirim email dari aplikasi saya. Aplikasi (berjalan pada VPS lain) akan terhubung ke Postfix melalui SMTP. Postfix tidak harus menangani email yang masuk; ini hanya tentang mengirim pesan keluar.

Untuk mencegah relay terbuka, otentikasi SASL harus digunakan. Namun, saya tidak ingin menjalankan Dovecot atau MySQL untuk otentikasi SASL.

Bagaimana saya bisa mengatur otentikasi SASL menggunakan file sederhana (berisi nama pengguna dan kata sandi)?

Saya sudah menemukan pertanyaan serupa ; Namun, tidak ada jawaban yang memuaskan jika diberikan di sana.

Jonathan
sumber
Gunakan firewall untuk membiarkan hanya alamat ip dari VPS lain yang terhubung. Selain itu, Anda dapat mengatur variabel mynetworks di main.cf untuk membuat postfix menyadarinya, bahkan jika firewall gagal. Jika Anda benar-benar menginginkan SASL, baca SASL_README yang datang dengan postfix dan atur SASL untuk menggunakan / etc / sasldb sebagai "database". Harus bekerja di luar kotak. saslpasswd menambahkan / menghapus / mengubah file.
AndreasM

Jawaban:

14

Postfix saat ini hanya mendukung dua metode otentikasi SASL. Salah satunya adalah Dovecot, yang tidak Anda inginkan. Yang lainnya adalah Cyrus, yang sedekat mungkin dengan yang Anda inginkan tanpa harus menulis ulang Postfix. Itu memang melibatkan menjalankan daemon otentikasi terpisah ( saslauthd), tetapi file otentikasi mudah diedit dan diperbarui.

Dasar-dasar untuk menggunakan Cyrus SASL dapat ditemukan di situs dokumentasi postfix , tapi di sini adalah deskripsi singkat. Silakan lihat tautannya jika ada sesuatu yang membingungkan!

Mulailah dengan menginstal Cyrus SASL dengan plugin sasldb. (Cara melakukannya dibiarkan sebagai latihan untuk pembaca; mungkin ada paket dalam sistem paket apa pun yang digunakan unix Anda.) Karena komunikasi antara Postfix dan SASL akan dilakukan melalui soket domain unix, Anda mungkin ingin tambahkan postfix ke grup SASL, dan pastikan bahwa grup itu telah membaca dan menjalankan izin ke direktori /var/run/saslauthd.

Konfigurasikan SASL

Konfigurasikan SASL untuk menggunakan sasldb dengan mengedit /etc/sasl2/smtpd.conf:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM

Plugin sasldb berarti bahwa sasl akan menggunakan file Berkeley DB untuk nama pengguna dan kata sandi. Anda menambahkan pengguna dengan perintah saslpasswd2:

$ saslpasswd2 -c -u example.com username
Password:
Again (for verification):

Perhatikan bahwa Anda menentukan domain bersama dengan nama pengguna, dan pengguna harus menggunakan "[email protected]" daripada hanya "nama pengguna" saat mengautentikasi.

Anda dapat memverifikasi apa yang telah dimasukkan oleh pengguna dengan menjalankan sasldblistusers2.

Mulai saslauthd, dan verifikasi bahwa otentikasi berfungsi dengan baik

testsaslauthd -u [email protected] -p password

Konfigurasikan Postfix

Setelah selesai, beri tahu Postfix untuk menggunakan SASL dan untuk memberitahu Cyrus bahwa itu SMTP yang diautentikasi, dengan mengedit /etc/postfix/main.cf untuk mengandung

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

Kemudian, muat ulang postfix, dan Anda harus mengaturnya.

Jenny D
sumber
Terima kasih atas jawaban Anda yang luas! Saya telah mengikuti semua langkah dan semuanya tampak bekerja dengan baik. sasldblistusers2dengan benar menampilkan daftar pengguna yang saya tambahkan. Namun, saat melakukan testsaslauthd, saya mendapatkan hasil ini: 0: NO "authentication failed". Apakah Anda tahu bagaimana saya bisa memperbaikinya? Ini dari saya /var/log/auth.log:saslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
Jonathan
Itu berarti bahwa saslauthd sedang mencoba menggunakan PAM alih-alih sasldb. Apa baris perintah yang digunakan untuk memulainya?
Jenny D
Saya menggunakan tesaslauthd (seperti yang dijelaskan dalam jawaban asli Anda), dan juga mencoba menambahkannya -s smtpd. Jika saya set MECHANISMS="sasldb"di /etc/default/saslauthddan saslauthd restart, saya mendapatkan hasil yang sama dari testsaslauthd. Log auth menunjukkan pesan yang berbeda:saslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
Jonathan
2
Hm, tesaslauthd berfungsi jika saya menentukan nama pengguna dan bagian domain secara terpisah, seperti ini: testsaslauthd -u username -r example.com -p XXXkembali 0: OK "Success.". Sekarang saya akan memeriksa apakah Postfix dapat mengatasi ini ...
Jonathan
Jika Anda menggunakan -s smtpdAnda akan membuatnya menggunakan PAM bukan sasldb, jadi jangan lakukan itu ...
Jenny D
1

Untuk mencegah relay terbuka, otentikasi SASL harus digunakan.

SASL hanyalah satu dari banyak cara untuk mencegah hal ini. Cara lain adalah memasukkan daftar putih IP yang Anda gunakan pada VPS lain, atau meminta sertifikat klien TLS (ini bisa dikatakan cara yang paling aman.)

Hanya mengatur CA penandatanganan pada mesin postfix, dan menandatangani satu sertifikat per VPS yang ingin Anda kirimkan email.
Kemudian memerlukan verifikasi sertifikat klien lengkap untuk semua surat yang dikirimkan; nonaktifkan metode pengiriman lainnya.

Apa yang Anda minta tidak mungkin, karena postfix tidak mendukung SASL secara langsung.

adaptr
sumber
1

Hanya mengklarifikasi beberapa hal,

Membuat akun di sasldb:

% saslpasswd2 -c -u fqdn username

Otentikasi pengujian:

% testsaslauthd -u username -p password

(catatan: nama pengguna tidak diikuti oleh fqdn)

Saya juga ingin menambahkan bahwa membuat akun root

% saslpasswd2 -c -u example.com root

tidak akan membiarkan Anda mengotentikasi,

% testsaslauthd -u root -p some_password
0: NO "authentication failed"

Tapi ini bukan bug. Itu hanya fitur keamanan.

Saurabh
sumber
0

Jika Anda tidak perlu menangani surat masuk, maka jangan repot-repot dengan otentikasi. Hanya memblokir lalu lintas masuk dengan firewall, dan / atau batasi hanya untuk localhost.

 inet_interfaces = 127.0.0.1

Tidak ada lagi masalah relai terbuka, dan Anda juga menghindari hal-hal rumit untuk aplikasi yang perlu mengirim email melalui postfix.

mc0e
sumber
Terima kasih atas jawabannya. Aplikasi ini berjalan di VPS lain, jadi Postfix akan menerima email dari host lain selain localhost.
Jonathan
Bisakah Anda menentukan IP dari koneksi yang diharapkan dan daftar mereka dalam konfigurasi postfix atau konfigurasi firewall? Misalnya mereka semua mungkin berada dalam satu blok net, atau satu set IP atau blok yang cukup kecil sehingga Anda dapat dengan mudah mendaftarnya. Atau Anda bisa melihat menggunakan jaringan pribadi antara host virtual Anda.
mc0e