Назад | Перейти на главную страницу

postfix - разрешить отправку электронной почты со связанным псевдонимом

Я установил postfix 2.11.3 + + sasl + postfixadmin + dovecot + roundcube на debian 8. Все работает нормально, но сегодня каждый пользователь может отправлять электронную почту с другого адреса электронной почты. Я хотел бы добавить ограничение, позволяющее пользователям отправлять электронную почту только со своим почтовым ящиком или псевдонимом, связанным с их почтовым ящиком.

Примеры :
1) Почтовые ящики
user1@example.com
user2@exemple.com

2) Псевдоним
alias1@example.com перейти к user1@example.com
alias2@example.com перейти к user2@example.com

Я бы хотел, чтобы user1@example.com, зарегистрированный с user1@example.com, мог отправлять электронную почту с user1@example.com и alias1@example.com только.
user1 не должен иметь возможность использовать user2, alias2 или что-то еще.

Я ищу решение, использующее поиск mysql_table, поскольку я управляю почтовым ящиком и псевдонимом с помощью postfixadmin и mysql. Что-то вроде этого :

SELECT address FROM alias WHERE address = '%s' AND goto LIKE '%<login>%'

На странице руководства доступны только параметры:

          %s     This  is  replaced by the input key.  SQL quoting is used
                 to make sure that the input key does not  add  unexpected
                 metacharacters.

          %u     When the input key is an address of the form user@domain,
                 %u is replaced by  the  SQL  quoted  local  part  of  the
                 address.   Otherwise, %u is replaced by the entire search
                 string.  If the localpart is empty,  the  query  is  sup-
                 pressed and returns no results.

          %d     When the input key is an address of the form user@domain,
                 %d is replaced by the  SQL  quoted  domain  part  of  the
                 address.   Otherwise, the query is suppressed and returns
                 no results.

          %[SUD] The upper-case equivalents of the above expansions behave
                 in  the  query  parameter identically to their lower-case
                 counter-parts.  With  the  result_format  parameter  (see
                 below),  they expand the input key rather than the result
                 value.

          %[1-9] The patterns %1, %2, ... %9 are replaced  by  the  corre-
                 sponding  most  significant  component of the input key's
                 domain. If the input key is  user@mail.example.com,  then
                 %1 is com, %2 is example and %3 is mail. If the input key
                 is unqualified or does not have enough domain  components
                 to  satisfy all the specified patterns, the query is sup-
                 pressed and returns no results.

логин недоступен.

Я знаю, что есть решение для ограничения roundcube, но мои пользователи могут получить доступ к своей электронной почте напрямую, без roundcube.

Заранее спасибо за вашу помощь.

ОБНОВИТЬ

Я пробовал это: main.cf

smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual-sender-maps.cf
smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch permit_sasl_authenticated

mysql-virtual-sender-maps.cf

user = mailuser
password = xxxxxxxxxxxxxxxx
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT address FROM alias WHERE goto LIKE '%%%s%%'

Авторизовавшись под пользователем user1, я могу отправлять электронную почту с псевдонимом alias2.

Содержимое базы данных по умолчанию для postfixadmin:

CREATE TABLE IF NOT EXISTS `alias` (
`address` varchar(255) NOT NULL,
`goto` text NOT NULL,
`domain` varchar(255) NOT NULL,
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual   Aliases';

CREATE TABLE IF NOT EXISTS `mailbox` (
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 NOT NULL,
`maildir` varchar(255) NOT NULL,
`quota` bigint(20) NOT NULL DEFAULT '0',
`local_part` varchar(255) NOT NULL,
`domain` varchar(255) NOT NULL,
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual Mailboxes';

Для справки, у меня была точно такая же проблема, и я решил ее с помощью постфикса. После этого мой user1@example.com аутентифицируется и может отправлять электронную почту либо с alias1@example.com, либо с user1@example.com.

В master.cf у меня есть конфигурация для включения моих пользователей, прошедших проверку подлинности SSL sasl, следующим образом:

smtps      inet  n       -       y       -       -       smtpd
    -o syslog_name=postfix/smtps
    -o smtpd_tls_wrappermode=yes
    -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination
    -o smtpd_sender_restrictions=reject_authenticated_sender_login_mismatch
    -o smtpd_sender_login_maps=mysql:/etc/postfix/mysql-smtpd-sender-login-maps.cf,mysql:/etc/postfix/mysql-virtual-sender-maps.cf

И мои файлы карты mysql:

mysql-virtual-sender-maps.cf:

user = mailuser
password = xxxxxxxxxxxxxxxx
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s'

mysql-smtpd-sender-login-maps.cf

user = mailuser
password = xxxxxxxxxxxxxxxx
hosts = 127.0.0.1
dbname = postfixadmin
query = select username from mailbox where username='%s'

Обратите внимание, что мне пришлось «перевести» имена таблиц и поля без тестирования. Не просто копируйте и вставляйте это решение, а попробуйте использовать его как отправную точку.

Хитрость заключается в том, что mysql-smtpd-sender-login-maps.cf позволяет пользователю отправлять как его обычный логин, а mysql-virtual-sender-maps.cf также позволяет отправлять как его псевдоним.

Моя таблица псевдонимов настроена так, что у меня есть своего рода «группа». То есть, я могу иметь "user1 @ example.com, user2 @ example.com" в столбце goto, например, если адрес alias3@example.com. Таким образом, электронное письмо будет доставлено более чем в одно место назначения. Я просто использовал для этого virtual_alias_maps =.

Указанное выше решение работает, позволяя как user1@example.com, так и user2 @ example отправлять как alias3@example.com

Надеюсь, это кому-то поможет. Удачи!

smtpd_sender_restrictions должна включать в себя reject_authenticated_sender_login_mismatch

Затем вы предоставите mysql_table для smtpd_sender_login_maps.

Наконец-то я нашел частичный ответ на свою проблему. В моем config.inc.php для RoundCube я ранее удалил% u из параметра smtp_user и% p из smtp_password. Следовательно, связь с постфиксом не была аутентифицирована. Поэтому ограничение не сработало.

Запрос, который должен работать:

query = SELECT goto FROM alias WHERE address = '%s'

Спасибо за помощь.