![sasl-auth 客户端的垃圾邮件过滤方法不同吗?](https://linux22.com/image/791478/sasl-auth%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E5%9E%83%E5%9C%BE%E9%82%AE%E4%BB%B6%E8%BF%87%E6%BB%A4%E6%96%B9%E6%B3%95%E4%B8%8D%E5%90%8C%E5%90%97%EF%BC%9F.png)
使用标准 Ubuntu postfix 设置(Ubuntu 22.04),我想按如下方式过滤邮件:
- 传入提交和 smtps(绝大多数邮件):SPF 和 RBL 检查(我正在使用policyd.pl),然后使用 Amavis 来检查 spamassassin 和 clamav。
- 来自外部网络客户端的经过 Sasl 验证的邮件:速率限制/检查(我正在使用
postfwd
这个),然后 Amavis 检查,但是不是SPF 和 RBL(因为我们不想根据客户端的发送网络而拒绝)。
我这样想对吗?如果我让 Amavis 检查链中的最后一个检查,并且在 master.cf“重新进入”侦听器中只允许使用允许的选项,我就能确保来自经过 sasl 身份验证的用户的邮件不会与其他邮件受到相同的检查?例如:
smtpd_client_restrictions =
permit_mynetworks,
# Rate limiting with postfwd:
check_policy_service inet:127.0.0.1:10040,
permit_sasl_authenticated,
# RBLs, SPF with policyd.pl:
check_policy_service unix:private/senderCheck
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
...,
[various reject_* lines here],
...,
# Amavis checks last:
content_filter = smtp-amavis:[127.0.0.1]:10024,
permit
然后在 master.cf 中将 Amavis “重新进入” 配置为:
127.0.0.1:10025 inet n - - - - smtpd
-o syslog_name=amavis-reentry
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=
-o smtpd_data_restrictions=
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
编辑:作为参考,这是我目前在 master.cf 中的 smtpd 配置:
smtp inet n - n - - smtpd
-o smtpd_sasl_auth_enable=no
-o smtpd_discard_ehlo_keywords=silent-discard,dsn
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_key_file=/etc/letsencrypt/live/smtp.xxx/privkey.pem
-o smtpd_tls_cert_file=/etc/letsencrypt/live/smtp.xxx/fullchain.pem
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_security_level=may
-o smtpd_tls_key_file=/etc/letsencrypt/live/smtp.xxx/privkey.pem
-o smtpd_tls_cert_file=/etc/letsencrypt/live/smtp.xxx/fullchain.pem
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
答案1
通常,守护进程会为不同目的设置多个实例,就像您为 Amavis 配置smptd
的实例一样。可以覆盖所述实例的设置。127.0.0.1:10025
master.cf
main.cf
这content_filter
不是一个smtpd_recipient_restrictions
限制,而是一个单独的配置参数。
tcp/465
以下是使用smtps() 实例的示例多夫科特为了Postfix SASL验证:
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o { smtpd_client_restrictions =
check_policy_service inet:127.0.0.1:10040,
permit_sasl_authenticated,
reject
}
-o { smtpd_recipient_restrictions =
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject
}
-o content_filter=smtp-amavis:[127.0.0.1]:10024
这里的限制将覆盖以下限制main.cf
:
- 删除
smtpd_client_restrictions
了policyd.pl
基于的策略但保留了postfwd
速率限制。 - 仅有
smtpd_recipient_restrictions
一小部分reject_
与出站邮件相关的限制。 permit_mynetworks
由于这明确针对经过身份验证的用户,因此将其从两者中删除。
我将添加类似的内容来防止用户使用彼此的地址:
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
-o smtpd_sender_restrictions=reject_sender_login_mismatch
这Postfix 和 Dovecot SASL文档中有一个例子提交协议,但是RFC 8314已经过时了,并且隐式 TLS(3.3) IE提交465
应该使用端口。