Я установил 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'
Спасибо за помощь.