AlmaLinux 9环境下高度定制化Sendmail迁移至Postfix的配置适配技术咨询
AlmaLinux 9环境下高度定制化Sendmail迁移至Postfix的配置适配技术咨询
嗨,我来帮你梳理下从Sendmail迁移到Postfix时遇到的这些配置适配问题,咱们一步步拆解解决:
一、现有Sendmail access规则的迁移确认
大部分你列出的/etc/mail/access规则可以直接(或少量调整后)迁移到Postfix的/etc/postfix/access,我帮你逐一核对:
- 中继允许规则:Sendmail的
Connect:x.x.x.x RELAY完全对应Postfix的x.x.x.x RELAY(Postfix默认识别客户端地址条目,无需加Connect:前缀),像127.0.0.1 RELAY、123.44.55 RELAY这类可以直接复制; - 收件人允许规则:
To:company.example.com OK可以直接保留格式,Postfix会识别To:前缀匹配收件人地址; - 发件人拦截规则:
From:document@company.example.com ERROR:5.7.1:550 Fake source address这类也可直接复制,Postfix支持ERROR:格式的返回码和提示语; - 纯域名拦截规则:注意Sendmail里的
accountants ERROR:...这类纯域名条目,Postfix默认会匹配客户端地址,如果你是要拦截发件人域名,得改成From:@accountants ERROR:5.7.1:550 Domain used to send spam,明确指定匹配发件人域名; - 退休用户拦截:
To:aaron@ ERROR:550 No such user也可直接保留,Postfix会匹配所有收件人地址前缀为aaron@的邮件。
二、Sendmail延迟/限速规则的Postfix替代方案
你提到的greet_pause、ratecontrol、conncontrol这些Per-client的控制,Postfix没有完全同名的参数,但可以通过组合配置实现相同效果:
1. 问候延迟(GreetPause)
Sendmail的GreetPause是在服务器发送问候语前的延迟,Postfix可以通过check_client_access在access表中使用sleep动作实现:
- 在
/etc/postfix/main.cf中确保启用了客户端检查:smtpd_client_restrictions = check_client_access hash:/etc/postfix/access, permit_mynetworks, ... # 其他原有规则 - 在
/etc/postfix/access中添加对应条目(单位是秒,1秒=1000毫秒,所以400毫秒就是0.4):batchmanager.company.example.com sleep 0.4 company.example.com sleep 0 mailinglist.company.example.com sleep 0 127.0.0.1 sleep 0 friend.other.com sleep 0.02 friendly.other.gov sleep 0.02 10.44 sleep 0 - 执行
postmap /etc/postfix/access生效。
2. 消息速率限制(ClientRate)
Sendmail的ClientRate控制单位时间内的消息数量,Postfix用smtpd_client_message_rate_limit全局控制,配合access表的rate_limit动作实现Per-client配置:
- 全局默认值(对应Sendmail的
confCONNECTION_RATE_THROTTLE)在main.cf中设置:smtpd_client_message_rate_limit = 200 smtpd_client_connection_rate_limit = 200 # 控制连接速率,默认窗口为60秒,对应confCONNECTION_RATE_WINDOW_SIZE - 在
/etc/postfix/access中添加特定客户端的速率规则:123.44.55.66 rate_limit 6000 123.44.55.77 rate_limit 60 127.0.0.1 rate_limit 0 # 0表示不限速 123.44.55 rate_limit 60 - 执行
postmap /etc/postfix/access后重载Postfix:postfix reload。
3. 并发连接限制(ClientConn)
Sendmail的ClientConn控制并发连接数,Postfix用smtpd_client_connection_count_limit全局控制,配合access表的connection_count_limit动作实现Per-client配置:
- 全局默认值在
main.cf设置(如果不需要全局限制可以留空,只配置特定客户端):smtpd_client_connection_count_limit = 10 # 全局默认并发数 - 在
/etc/postfix/access中添加特定客户端的并发规则:123.44.55.77 connection_count_limit 5 123.44.55.66 connection_count_limit 500 - 执行
postmap /etc/postfix/access后重载服务。
三、特定域名跳过TLS(Try_TLS:NO)
Sendmail的Try_TLS:x NO对应Postfix的TLS策略映射,具体配置步骤:
- 在
/etc/postfix/main.cf中添加TLS策略映射:smtp_tls_policy_maps = hash:/etc/postfix/tls_policy - 创建
/etc/postfix/tls_policy文件,添加目标域名的规则:yetanother.different.com nonenone表示强制不使用TLS加密
- 执行
postmap /etc/postfix/tls_policy,然后重载Postfix:postfix reload
这样Postfix发送到该域名的邮件就会跳过TLS连接,解决对方TLS配置兼容问题。
备注:内容来源于stack exchange,提问作者William Seligman
相关产品推荐
相关产品推荐

