Postfix发信的频率控制几个参数
清泛原创
smtpd_client_connection_rate_limit=5
ip地址连接的频率控制.
smtpd_client_message_rate_limit=5
客户端发送邮件的频率控制.(某种情况下smtpd_client_message_rate_limit和 smtpd_client_connection_rate_limit的效果是一样.smtpd_client_connection_rate_limit是指连接到服务器25端口就开始计算,smtpd_client_message_rate_limit是发送邮件时计算.)
smtpd_client_recipient_rate_limit=10
rcpt to的频率控制,也就是说TO了多少个人.
smtpd_client_event_limit_exceptions = ${smtpd_client_connection_limit_exceptions:$mynetworks}
指不做频率控制检测的网络,默认是mynetworks.
posftfix的性能控制
之所以对postfix的性能进行控制,是为了在遇到邮件风暴时保证postfix可以正常运行。通常,我们可以通过对下列postfix参数的配置来调节postfix的性能,这些参数都是通过mail.cf配置文件进行配置的,修改以后不要忘了运行postfix reload命令来使配置生效。
1. 进程数限制
可以通过default_process_limit 参数来控制postfix系统同时可以运行的最大进程数目。缺省值是50个。
2. 对同一目标主机的并发连接限制
当向同一目标主机发出SMTP连接时,postfix初始化发出两个SMTP连接,如果投递成功则增加并发的SMTP连接数目,遇到拥塞时又减少并发连接的数目。postfix中通过以下的参数对同一目标主机的并发连接进行控制:
* initial_destination_concurrency:控制对同一目标主机的初始化并发连接数目。缺省值为2。
* default_destination_concurrency_limit:控制初始化连接后对同一目标主机的最大并发连接数目。缺省值为10。
* local_destination_concurrency_limit:控制对同一本地收件人的最大同时投递的邮件数目。缺省值为2,因为对本地同一收件人投递邮件时投递工作只能一个接一个的进行,所以设得在大也没用。
3. 对同一封邮件的收件人数目限制
通过default_destination_recipient_limit参数来控制postfix的投递代理(如
smtp进程)可以将同一封邮件发送给多少个收件人。缺省值为50。也可以用明确指出该投递代理的参数来覆盖该缺省值。如用smtpd_recipient_limit来指定smtp投递代理可以将同一封邮件发送给多少个收件人,该参数的缺省值为1000。
4. 推迟投递控制
通过defer_transports参数,我们可以推迟投递该参数指定的邮件直到postfix明确的提出投递要求。下面我们看一个例子:
有一个小型的局域网,用户都将邮件发送给局域网内部的一台postfix
邮件服务器,然后通过在该服务器上拨号将邮件发送出去。这时我们可以这样指定该参数的值:
defer_transports = smtp
该语句表示postfix推迟投递所有的邮件直到执行sendmail -q命令,这样
我们就可以在ppp的脚本中加上sendmail -q,以便在拨号成功后让postfix开始投递邮件。
5. 关于延迟邮件的再投递控制
可以通过以下的几个参数实现对延迟邮件的再投递控制:
queue_run_delay:设置队列管理进行扫描deferred邮件队列的频率,缺省值为1000秒。
maximal_queue_lifetime:设置postfix在放弃投递而返回不可投递信息前,被延迟邮件再deferred邮件队列中的生存时间。
minimal_backoff_time:当一封邮件投递失败后,邮件队列将在一段时间内忽视该邮件的存在,也就是我们前面讲的时间邮票。该参数就是用来设置最小的时间邮票。缺省值为1000秒。
maximal_backoff_time:设置最大的时间邮票。
6. 对拒绝服务攻击的处理
postfix对每一个SMTP会话都设置一个错误计数器,当该客户端的请求未
被接受或违反那UCE规则时,该计数器就增1。随着计数器的增加,postfix将采取不同的措施来防止恶意用户的拒绝服务攻击。
smtpd_error_sleep_time:当该错误计数器的值还很小时,postfix将暂停
smtpd_error_sleep_time指定的时间,然后向客户端报告一个错误。该参数的缺省值为5秒。
smtpd_soft_error_limit:当错误计数器的值超过该参数指定的值时,postfix在响应该客户端请求前将沉睡一段时间。缺省值为10。
smtpd_hard_error_limit:当错误计数器的值超过该参数指定的值时,postfix
中断同该客户端的连接。缺省值为100。
通过特定的postfix配置参数,我们可以实现postfix运行时对所消耗的资源的灵活控制。可以通过以下几个方面来控制postfix消耗的资源:
1. 限制内存中的对象的大小
要控制对内存资源的消耗,必须控制内存中对象的大小。可以用以下的参数来进行对象大小的控制:
line_length_limit:控制读入数据时每一行的大小,如果太长则强行将其分割成更短的行,太长的行在投递时再重组。缺省值为2048 bytes。
header_size_limit:限制信头长度。缺省值为102400bytes。
message_size_limit:限制postfix队列文件的大小。缺省值为10240000 bytes。
queue_minfree:邮件队列中可用的空间大小。缺省为无限制。建议该值最好时message_size_limit的数倍以便于处理大邮件。
bounce_size_limit:限制某一邮件不可投递时,返回给发件人不可投递报告的大小,缺省值为50000 bytes。
2. 限制内存中对象的数目
qmgr_message_recipient_limit:设置内存中收件人地址的最大数目。缺省值为10000。
qmgr_message_active_limit:设置active邮件队列中邮件数目的最大值。缺省值为1000。
duplicate_filter_limit:设置需要local和cleanup后台程序记住的收件人地址的最大数目。缺省值为1000。
3.限制等待一个外部命令完成的时间
command_time_limit:设置local程序等待一个外部命令完成的时间。缺省值为1000秒。
4. 限制文件锁定的操作时间
deliver_lock_attempts:设置锁定一个文件的最大尝试次数。缺省值为5次。
deliver_lock_delay:设置如果锁定一个文件失败后再次尝试的等待时间,缺省值为1秒。
5. 控制错误恢复
在某些情况下(如高负载),postfix的某个进程可能会死掉,这时master进程会试图重新启动该进程,我们可以通过下面的参数来控制这种行为:
fork_attempts:试图重启动一个进程的最大尝试次数。缺省值为5次。
fork_delay:每两次尝试之间的等待时间,缺省值为1秒。
transport_retry_time:队列管理进程每两次尝试连接一个不正常的投递代理进程之间的等待时间。缺省为60秒。
参数:queue_run_delay
说明:用于设定队列处理程序对拖延邮件的扫描周期。缺省为1000秒。
例 如:queue_run_delay = 1000
最长队列生命期
参数:maximal_queue_lifetime
说 明:用于设定队列处理程序对滞留邮件的最长保存期。缺省为5天。
例如:maximal_queue_lifetime = 5
最小投递失 败周期
参数:minimal_backoff_time
说明:用于设定队列处理程序对无法投递的邮件的最短巡回时间。缺省为1000秒。
例 如:minimal_backoff_time= 1000
最长投递失败周期
参数:maximal_backoff_time
说 明:用于设定队列处理程序对无法投递的邮件的最长巡回时间。缺省为4000秒。
例如:maximal_backoff_time= 4000
我的设置如下:
queue_run_delay = 1000s;每1000s会扫描一次delay的邮件 minimal_backoff_time= 1000s; 在1000s内不会重发delay的邮件
maximal_backoff_time= 1200s; 如果超过1200s则一定会重发邮件
maximal_queue_lifetime = 2400s;邮件超过2400s没有发出去则退信
预期效果为:
每1200s会重发一次,最多重发两次
以下自己理解:
我自己的修改如下:
queue_run_delay = 300s
minimal_backoff_time= 300s
maximal_backoff_time= 400s
bounce_queue_lifetime = 1h
maximal_queue_lifetime = 1h
bounce_queue_lifetime:退信(弹回)在队列中的保留时间。超过此时间,被认为是无法投递的。maximal_queue_lifetime:普通邮件在队列中的最长保留时间。超过此时间,被认为是无法投递的。
最后修改成这样:
queue_run_delay = 200s
minimal_backoff_time = 200s
maximal_backoff_time = 300s
bounce_queue_lifetime = 1800s
maximal_queue_lifetime = 1800s