Bagaimana cara menegakkan alamat pengirim menjadi “login-in-user@example.org” 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 "login-in-user@example.org".

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:

a@example.org a
b@example.org b
c@example.org 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 "login-in-user@example.org". Apakah ada opsi yang lebih mudah?

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.


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 "test@example.org", 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 ( login-in-user@example.org ) - 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 john.doe@example.com hanya diperbolehkan mengirim dari alamat itu tetapi tidak dari john.doe@example.org (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

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.


Mari kita asumsikan, saya dapat menggunakan "regexp:" di sini (?) Bagaimana saya bisa menentukan regexp, sehingga pengguna "a" dapat mengirim sebagai "a@example.org" tetapi tidak sebagai "b@example.org"?
Chris Lercher

@sonstabo alangkah baiknya jika Anda menyertakan contoh konfigurasi
Jaime Hablutzel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.