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.
Jawaban:
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:
Plugin sasldb berarti bahwa sasl akan menggunakan file Berkeley DB untuk nama pengguna dan kata sandi. Anda menambahkan pengguna dengan perintah
saslpasswd2
: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
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
Kemudian, muat ulang postfix, dan Anda harus mengaturnya.
sumber
sasldblistusers2
dengan benar menampilkan daftar pengguna yang saya tambahkan. Namun, saat melakukantestsaslauthd
, 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]
-s smtpd
. Jika saya setMECHANISMS="sasldb"
di/etc/default/saslauthd
dan 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]
testsaslauthd -u username -r example.com -p XXX
kembali0: OK "Success."
. Sekarang saya akan memeriksa apakah Postfix dapat mengatasi ini ...-s smtpd
Anda akan membuatnya menggunakan PAM bukan sasldb, jadi jangan lakukan itu ...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.
sumber
Hanya mengklarifikasi beberapa hal,
Membuat akun di sasldb:
Otentikasi pengujian:
(catatan: nama pengguna tidak diikuti oleh fqdn)
Saya juga ingin menambahkan bahwa membuat akun root
tidak akan membiarkan Anda mengotentikasi,
Tapi ini bukan bug. Itu hanya fitur keamanan.
sumber
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.
Tidak ada lagi masalah relai terbuka, dan Anda juga menghindari hal-hal rumit untuk aplikasi yang perlu mengirim email melalui postfix.
sumber