postfix - 允许使用相关别名发送电子邮件

postfix - 允许使用相关别名发送电子邮件

我在 debian 8 上安装了 postfix 2.11.3 + +sasl + postfixadmin + dovecot + roundcube。一切运行正常,但今天每个用户都可以使用其他电子邮件地址发送电子邮件。我想添加一个限制,以允许用户仅使用他们的邮箱或与其邮箱相关的别名发送电子邮件。

例子 :
1)邮箱
[电子邮件保护]
[电子邮件保护]

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'

谢谢您的帮助。

相关内容