我正尝试将/etc/postfix/access
我想要阻止的某些已知垃圾邮件发送者的域名包含进去(请不要讨论这是否有用……)。
根据文档,它应该丢弃来自垃圾邮件域的所有传入邮件,并在访问文件中输入以下条目:
.spam.domain.de DISCARD Spam rule domain block
相关配置设置(smtpd_access_maps)已启用:
parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,permit_mx_backup_networks,qmqpd_authorized_clients,relay_domains,smtpd_access_maps
并且访问文件也配置好了:
smtpd_recipient_restrictions =
permit_sasl_authenticated,
[...]
check_sender_access hash:/etc/postfix/access,
因此,我期望 Postfix 丢弃从某个域收到的所有邮件news.spam.domain.de
,letter.spam.domain.de
甚至spam.domain.de
。
但确实如此不是。所以我尝试用 postmap 进行调试:
root@mail:~# postmap access
root@mail:~# postmap -q news.spam.domain.de access; echo $?
1
root@mail:~# postmap -q spam.domain.de access; echo $?
1
root@mail:~# postmap -q .spam.domain.de access; echo $?
DISCARD Spam rule domain block
0
看起来它只匹配精确的细绳。
有人知道我这里错在哪里吗?
答案1
该-q
标志仅检查以下字符串是否逐字存在于文件中。
https://linux.die.net/man/1/postmap
-q 键
在指定的映射中搜索键并将找到的第一个值写入标准输出流。找到请求的信息时,退出状态为零。
它实际上并没有检查您输入的子域是否被允许向您发送电子邮件。
以下这句话出自/etc/postfix/access
:
gmail.com OK
这是输出postmap -q /etc/postfix/access; echo $?
:
[root]# postmap -q [email protected] /etc/postfix/access; echo $?
1
[root]# postmap -q gmail.com /etc/postfix/access; echo $?
OK
0