Как заставить адрес отправителя быть «logged-in-user@example.org» в Postfix?

15

Я настроил сервер Postfix с SMTP AUTH (STARTTLS на порту 587). Все мои пользователи находятся в домене "example.org". Я хочу, чтобы адрес отправителя был «logged-in-user@example.org».

Я узнал, что это может быть достигнуто с параметрами main.cf

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

с файлом login_maps, например:

a@example.org a
b@example.org b
c@example.org c
...

(см. также Блокировка подмены адреса отправителя с помощью SMPT AUTH ), но это будет означать, что мне придется редактировать файл login_maps каждый раз, когда у меня появляется новый пользователь. Мне не нужно такое гибкое отображение: оно всегда должно быть «logged-in-user@example.org». Есть ли более простой вариант?

Крис Лерчер
источник

Ответы:

14

Сначала проверьте, поддерживает ли ваша установка Postfix pcre. Для этого введите команду postconf -mи найдите pcreв ней строку с . Убедившись, что у вас есть поддержка pcre, вы можете сделать следующее:

/etc/postfix/login_maps.pcre:

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

В main.cf:

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

Это должно работать нормально.

mailq
источник
Это потрясающе. Именно то, что я искал!
Крис Лерчер
3
Для пользователей Ubuntu вы можете получить postfix pcre с sudo apt-get install postfix-pcre. Может быть, это было очевидно для большинства.
NeilMonday
Нет способа опустить домен в регулярном выражении или ссылочной $myhostnameпеременной ?. Здесь вы можете видеть, что Postfix способен искать в таблице поиска по пользовательской части письма ...
Хайме Хаблутцель
Я верю, что ты захочешь отступить - убежать от "." символ в имени домена, поэтому оно интерпретируется как буквальное совпадение: /^(.*)@example\.org$/
Арнон,
В противном случае это соответствует «test @ exampleXorg», а также «test@example.org», что может не соответствовать предполагаемому поведению.
Арнон
6

Регулярное выражение, упомянутое в другом ответе, соответствует пользовательской части адреса электронной почты ( logged in-user @ example.org). Вот некоторая дополнительная информация.

Чтобы использовать полный адрес электронной почты в качестве имени пользователя, используйте следующее регулярное выражение (например, в /etc/postfix/login_map):

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

Это означает, что вашим именем пользователя всегда является ваш полный адрес электронной почты ( logged-in-user@example.org ) - никакие другие существующие имена пользователей не могут отправлять с этого адреса - и вам не нужно обновлять дополнительный файл конфигурации Postfix каждый раз, когда вы добавить пользователя.

Это может быть использовано на сервере, на котором настроено несколько доменов. Пользователю john.doe@example.com разрешено отправлять сообщения только с этого адреса, но не с john.doe@example.org (другой пользователь и адрес электронной почты, другой человек). Имя пользователя john.doe будет неоднозначным в этом случае.

Кроме того, в зависимости от вашей конфигурации параметр smtpd_sender_login_maps, который должен указывать на этот файл, может находиться в master.cf (вместо main.cf). Официальная документация Dovecot содержит следующий пример (если вы используете SASL / представление):

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

В этом примере настройку следует настроить так, чтобы она указывала на правильный файл и использовала регулярное выражение или (лучше) pcre в качестве типа. Особенно, если файл с именем «virtual» уже используется для другой цели (например, для virtual_alias_maps, как показано в официальном примере Postfix ), для отображения имени входа следует использовать другой файл.

Из:

smtpd_sender_login_maps=hash:/etc/postfix/virtual

Для того, чтобы:

smtpd_sender_login_maps=pcre:/etc/postfix/login_map
c0xc
источник
0

Можете ли вы использовать комбинацию регулярных выражений в заголовке, как показано здесь: http://www.akadia.com/services/postfix_uce.html ? Затем вы можете комбинировать с regexp как [*@example.org], чтобы гарантировать только отправителя из example.org.

sonstabo
источник
Предположим, я могу использовать здесь «regexp:» (?). Как я могу указать регулярное выражение, такое, что пользователь «a» может отправлять как «a@example.org», но не как «b@example.org»?
Крис Лерчер
@sonstabo было бы неплохо, если бы вы включили пример конфигурации
Хайме Хаблутцель