Bagaimana cara menegakkan alamat pengirim menjadi “[email protected]” di Postfix?

15

Saya telah menyiapkan server Postfix dengan SMTP AUTH (STARTTLS pada port 587). Semua pengguna saya ada di domain "example.org". Saya ingin menegakkan alamat pengirim menjadi "[email protected]".

Saya belajar bahwa ini dapat dicapai dengan opsi main.cf

smtpd_sender_restrictions = reject_sender_login_mismatch, ...
smtpd_sender_login_maps = hash:/etc/postfix/smtpd_sender_login_maps

dengan file login_maps seperti:

[email protected] a
[email protected] b
[email protected] c
...

(lihat juga Blokir alamat pengirim spoofing dengan SMPT AUTH ), tetapi ini berarti saya harus mengedit file login_maps setiap kali saya memiliki pengguna baru. Saya tidak membutuhkan pemetaan yang fleksibel: Itu harus selalu "[email protected]". Apakah ada opsi yang lebih mudah?

Chris Lercher
sumber

Jawaban:

14

Pertama, periksa apakah instalasi Postfix Anda mendukung pcre dengan memasukkan perintah postconf -mdan mencari baris pcredi dalamnya. Setelah Anda memverifikasi bahwa Anda memiliki dukungan pcre, Anda dapat melakukan hal berikut:

/etc/postfix/login_maps.pcre:

/^(.*)@example\.org$/   ${1}

Dalam main.cf:

smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre

Ini seharusnya bekerja dengan baik.

mailq
sumber
Ini sempurna. Persis apa yang saya cari!
Chris Lercher
3
Untuk pengguna Ubuntu, Anda bisa mendapatkan pcre postfix sudo apt-get install postfix-pcre. Mungkin ini sudah jelas bagi kebanyakan orang.
NeilMonday
Tidak ada cara untuk menghilangkan domain di regex atau $myhostnamevariabel referensi ?. Di sini Anda dapat melihat bahwa Postfix mampu mencari tabel pencarian oleh bagian pengguna dari email ...
Jaime Hablutzel
Saya yakin Anda akan ingin melarikan diri dari hukuman '.' karakter dalam nama domain sehingga ditafsirkan sebagai kecocokan literal: /^(.*)@example¡.org$/
Arnon
Jika tidak, ini cocok dengan "test @ exampleXorg" serta "[email protected]", yang mungkin bukan perilaku yang dimaksud.
Arnon
6

Regex yang disebutkan dalam jawaban lain cocok dengan bagian pengguna dari alamat email ( login-in-user @ example.org). Berikut ini beberapa informasi tambahan.

Untuk menggunakan alamat email lengkap sebagai nama pengguna, gunakan regex berikut (misalnya dalam /etc/postfix/login_map):

/^(.*)$/   ${1}

Ini berarti bahwa nama pengguna Anda selalu merupakan alamat email lengkap Anda ( [email protected] ) - tidak ada nama pengguna lain yang diizinkan untuk dikirim dari alamat itu - dan Anda tidak perlu memperbarui file konfigurasi Postfix tambahan setiap kali Anda tambahkan pengguna.

Ini dapat digunakan pada server yang memiliki banyak domain yang dikonfigurasi. Pengguna [email protected] hanya diperbolehkan mengirim dari alamat itu tetapi tidak dari [email protected] (pengguna dan email berbeda, orang berbeda). Nama pengguna john.doe akan ambigu dalam hal ini.

Juga, tergantung pada konfigurasi Anda, pengaturan smtpd_sender_login_maps, yang harus mengarah ke file ini, mungkin ada di master.cf (bukan main.cf). Dokumentasi Dovecot resmi memiliki contoh berikut (jika Anda menggunakan SASL / pengiriman):

submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

Dalam contoh ini, pengaturan harus disesuaikan untuk menunjuk ke file yang tepat dan menggunakan regex atau (lebih baik) sebagai tipe. Terutama jika file yang disebut "virtual" sudah digunakan untuk tujuan lain (misalnya untuk virtual_alias_maps, seperti yang ditunjukkan dalam contoh Postfix resmi ), file lain harus digunakan untuk pemetaan login.

Dari:

smtpd_sender_login_maps=hash:/etc/postfix/virtual

Untuk:

smtpd_sender_login_maps=pcre:/etc/postfix/login_map
c0xc
sumber
0

Bisakah Anda menggunakan kombinasi regexp pada header seperti yang ditunjukkan di sini: http://www.akadia.com/services/postfix_uce.html ? Kemudian Anda dapat menggabungkan dengan regexp seperti [*@example.org] untuk memastikan hanya pengirim dari example.org.

sonstabo
sumber
Mari kita asumsikan, saya dapat menggunakan "regexp:" di sini (?) Bagaimana saya bisa menentukan regexp, sehingga pengguna "a" dapat mengirim sebagai "[email protected]" tetapi tidak sebagai "[email protected]"?
Chris Lercher
@sonstabo alangkah baiknya jika Anda menyertakan contoh konfigurasi
Jaime Hablutzel