如何防止Postfix因发件人而过载?

Postfix

1 基础知识

1.1 限制单位时间内最大消息数量

smtpd_client_message_rate_limit = 1000

需要注意的是,
– 参数用于限制smtp客户端(邮件发送者)单位时间内能发送的最大消息数量
– 参数用于防止邮件服务器被单个客户端发送过多的消息而导致过载
– 参数默认值为“0”(即表示禁用此功能)
– 参数时间单位由“anvil_rate_time_unit”配置参数指定,默认值为“60s”
如果你需要验证当前配置,可以使用如下命令,

postconf | grep -i anvil_rate_time_unit

1.2 限制单位时间内最大收件人数量

smtpd_client_recipient_rate_limit = 1000

需要注意的是,
– 参数用于限制smtp客户端(邮件发送者)单位时间内能发送的最大收件人数量
– 参数用于防止邮件服务器被单个客户端发送过多的收件人而导致服务器过载
– 参数默认值为“0”(即表示禁用此功能)
– 参数时间单位由“anvil_rate_time_unit”配置参数指定,默认值为“60s”

1.3 限制单位时间内最大连接数量

smtpd_client_connection_rate_limit = 1000

需要注意的是,
– 参数用于限制smtp客户端(邮件发送者)单位时间内能发送的最大连接数量
– 参数用于防止邮件服务器被单个客户端建立过多的连接而导致服务器过载
– 参数默认值为“0”(即表示禁用此功能)
– 参数时间单位由“anvil_rate_time_unit”配置参数指定,默认值为“60s”

2 最佳实践

2.1 修改服务配置

vim /etc/postfix/main.cf

加入如下配置,

smtpd_client_message_rate_limit = 300
smtpd_client_recipient_rate_limit = 1000
smtpd_client_connection_rate_limit = 1000

另外,以下两个参数的默认值可能会影响你的设置,你需要特别注意,

mynetworks = 0.0.0.0/0
smtpd_client_event_limit_exceptions = ${smtpd_client_connection_limit_exceptions:$mynetworks}

如上所示,由于例外命令“smtpd_client_event_limit_exceptions”的定义包含变量“mynetworks”的,该变量的值为“0.0.0.0/0”,因此,所有客户端被设置为例外。
然后,你可以使用如下命令检查配置语法,

postfix check

2.2 重载服务使配置生效

systemctl reload postfix

2.3 测试配置

关于以上参数,我们建议你使用如下方法进行压力测试,你需要连续发送超过300封以上的邮件,

如何压力测试邮件服务器?

参阅文档
====================
https://www.postfix.org/postconf.5.html

没有评论

发表回复

Postfix
如何实现PosFix邮件投递失败退信?

1 前言 一个问题,一篇文章,一出故事。 最近老板要求postfix实现当邮件投递失败时候通知发件人 …

Postfix
如何设置PostFix限制用户单位时间内发送的邮件数量?

1 前言 一个问题,一篇文章,一出故事。 本章将整理如何限制用户单位时间内发送的邮件数量。 2 最佳 …

Bash
如何压力测试邮件服务器?

1 前言 一个问题,一篇文章,一出故事。 最近生产环境的PostFis邮件服务器因为需要控制每分钟发 …