我在 debian 8 上安装了 postfix 2.11.3 + +sasl + postfixadmin + dovecot + roundcube。一切运行正常,但今天每个用户都可以使用其他电子邮件地址发送电子邮件。我想添加一个限制,以允许用户仅使用他们的邮箱或与其邮箱相关的别名发送电子邮件。
2)别名
[电子邮件保护]去[电子邮件保护]
[电子邮件保护]去[电子邮件保护]
我希望[电子邮件保护],记录[电子邮件保护],可以发送电子邮件[电子邮件保护]和[电子邮件保护] 仅有的.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 [email protected], 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 即可直接访问他们的电子邮件。
在此先感谢您的帮助。
更新
我尝试了这个: 主配置文件
smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual-sender-maps.cf
smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch permit_sasl_authenticated
mysql-虚拟发送方映射.cf
user = mailuser
password = xxxxxxxxxxxxxxxx
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT address FROM alias WHERE goto LIKE '%%%s%%'
以用户 1 登录后,我能够使用别名 2 发送电子邮件。
数据库的内容是 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';
答案1
答案2
仅供参考,我遇到了完全相同的问题,并使用 postfix 解决了它。之后,我的[电子邮件保护]验证身份,然后就可以发送电子邮件[电子邮件保护]或者[电子邮件保护]。
在 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-虚拟发送方-maps.cf:
user = mailuser
password = xxxxxxxxxxxxxxxx
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s'
mysql-smtpd-发送方登录-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 也允许其以其别名发送。
我的别名表设置成这样,我有一个“组”。也就是说,我可以有“[电子邮件保护],[电子邮件保护]“在地址为[电子邮件保护]例如。这样,电子邮件就会被发送到多个目的地。我刚刚使用了 virtual_alias_maps = 来实现这一点。
上述解决方案允许[电子邮件保护]并将 user2@example 发送为[电子邮件保护]
希望它能帮到别人。祝你好运!
答案3
我终于找到了问题的部分答案。在 RoundCube 的 config.inc.php 中,我之前已从 smtp_user 参数中删除了 %u,并从 smtp_password 中删除了 %p。因此,与 postfix 的连接未经身份验证。这就是限制不起作用的原因。
应该起作用的查询是:
query = SELECT goto FROM alias WHERE address = '%s'
谢谢您的帮助。