我正在尝试设置一个后缀配置,其中(虚拟)用户只能使用他们拥有的“发件人:”地址进行发送。所以我投入reject_authenticated_sender_login_mismatch
了smtpd_sender_restrictions
.
使用
query = SELECT goto FROM alias WHERE address='%s' and active=1;
在我的中,sender_login_maps.cf
我可以使用我想要的任何发件人地址发送邮件,甚至是类似madeup@not_my_domain.com
.
然而,
postmap -q "madeup@not_my_domain.com" mysql:/etc/postfix/sql/sender_login_maps.cf
没有按预期返回任何内容。
现在,如果我将查询更改为
SELECT goto FROM alias WHERE address='notinthedatabaseforsure' and active=1;
我根本无法发送任何邮件。到目前为止,一切都很好。但日志说
postfix/smtps/smtpd[11683]: NOQUEUE: reject: RCPT from...: 553 5.7.1 <[email protected]>:
Sender address rejected: not owned by user [email protected]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.2.103]>
即使我尝试从 发送madeup@not_my_domain.com
。[email protected]
是登录名,[email protected]
收件人。
在正确的设置中我会期望类似的东西
postfix/smtps/smtpd[11683]: NOQUEUE: reject: RCPT from ...: 553 5.7.1 <madeup@not_my_domain.com>:
Sender address rejected: not owned by user [email protected]; from=<madeup@not_my_domain.com> to=<[email protected]> proto=ESMTP helo=<[192.168.2.103]>
所以看起来 postfix 使用登录名来搜索登录名,而不管发件人地址如何,这解释了为什么我可以使用我首先提到的查询以任何发件人地址发送。
更新:我检查了我的 sql 日志,确实,MySQL 服务器从未看到过madeup@not_my_domain.com
.它只获取登录地址和收件人地址的查询[email protected]
。
以下是 master.cf 和我的 main.cf 中的 smtps 部分:
smtps inet n - - - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=是 -o tls_preempt_cipherlist=是 -o smtpd_tls_security_level=加密 -o smtpd_sasl_auth_enable=是 -o smtpd_client_restrictions=permit_sasl_authenticated,拒绝 -o milter_macro_daemon_name=起源 -o smtpd_sasl_type=鸽子 -o smtpd_sasl_security_options=noanonymous -o smtpd_relay_restrictions=reject_non_fqdn_recipient、reject_unknown_recipient_domain、permit_mynetworks、permit_sasl_authenticated、拒绝 -o milter_macro_daemon_name=起源 -o cleanup_service_name=提交标头清理
我的网络 = 127.0.0.0/8 inet_interfaces = 全部 mydomain = 域名.com myhostname = mail.domain.com 我的起源 = $我的域名 我的目的地= 中继主机 = smtpd_relay_restrictions=permit_mynetworks、permit_sasl_authenticated、reject_unauth_destination、reject_non_fqdn_recipient smtpd_recipient_restrictions = 允许我的网络, 允许_sasl_验证, reject_non_fqdn_hostname, 拒绝非 FQDN 发送者, 拒绝非 FQDN 收件人, 拒绝_unauth_目的地, 拒绝_unauth_pipelined, 拒绝无效主机名 smtpd_发件人限制= 拒绝非 FQDN 发送者, 拒绝未知发件人域, 拒绝_unauth_pipelined, reject_authenticated_sender_login_mismatch, 允许_sasl_authenticated smtpd_helo_required = 是 smtpd_helo_restrictions=permit_mynetworks 拒绝_invalid_helo_主机名 reject_non_fqdn_helo_主机名 拒绝_未知_helo_主机名 smtpd_data_restrictions =拒绝_unauth_pipelined smtpd_sasl_auth_enable = 是 smtpd_sasl_security_options = noanonymous、noplaintext smtpd_sasl_type = 鸽舍 smtpd_sasl_path = 私有/身份验证 postscreen_access_list=permit_mynetworks cidr:/etc/postfix/postscreen_access postscreen_blacklist_action = 删除 postscreen_greet_action = 放下 postscreen_dnsbl_threshold = 2 postscreen_dnsbl_sites = dnsbl.sorbs.net*1、bl.spamcop.net*1、ix.dnsbl.manitu.net*2、zen.spamhaus.org*2 postscreen_dnsbl_action = 删除 virtual_alias_maps = mysql:/etc/postfix/sql/aliases.cf virtual_mailbox_maps = mysql:/etc/postfix/sql/accounts.cf virtual_mailbox_domains = mysql:/etc/postfix/sql/domains.cf 中继域 = mysql:/etc/postfix/sql/relay_domains.cf smtpd_sender_login_maps = mysql:/etc/postfix/sql/sender_login_maps.cf virtual_uid_maps = 静态:3000 virtual_gid_maps = 静态:3000 virtual_mailbox_base = /home/vmail # 禁用 NIS 查找警告 alias_maps=哈希值:/etc/aliases 附加点_mydomain = 否 收件人分隔符 = +
答案1
如果具有登录名的用户[email protected]
只能按照您之前[email protected]
应该使用的方式发送reject_sender_login_mismatch
permit_sasl_authenticated
smtpd_sender_restrictions =
# ... skip ...
reject_sender_login_mismatch
permit_sasl_authenticated
这个选项包括功能两者 reject_authenticated_sender_login_mismatch
和
reject_unauthenticated_sender_login_mismatch
.
此外,检查用户的 SQL 查询是否返回他的电子邮件(也称为登录名),postfix 将为其运行测试。如果它只是返回1
或其他“真实”值,它可能无法按预期工作。
答案2
解决方案是将其放在reject_authenticated_sender_login_mismatch
现场smtpd_client_restrictions
。
PS:请注意,smtpd_client_restrictions
与 不同smtpd_sender_restrictions
。