zoukankan      html  css  js  c++  java
  • postfix发信提示 Error: too many connectino from

    查看提示,很明显是提示连接数过多导致的。

    有提示上面的信息,看提示的IP地址是一个网关的地址,使用netstat -ano|grep ':25'|wc -l

    看了下,25端口的连接的IP地址,几乎全是这个IP连接过来的。

    问题就出来了,应该是这个IP地址连接过多,导致的。为什么会连接过多呢。因为这个是网关,服务器在内网,直接使用nat 映射的。

    访问服务器的IP地址全转为网关的内网IP地址了。此处不得不说下,现在很多设备都会默认这样,这样设置不好,不利于其它的控制,最好设置为显示来源IP地址,这样如果有什么问题,还可以很快的查出来是那里的问题。但是用户反馈改这个麻烦,不会改!只能改邮件系统里面的设置了。

    查看了下,有几个参数有限制:

    smtpd_client_connection_rate_limit=50

    smtpd_client_message_rate_limit=50

    从字面意思就可以大概的理解到这两个参数的意思了。看现在的配置信息里面smtpd_client_connection_rate_limit=50 是为50,再看上面wc -l 出来的连接数为200-300之间,这明显会有问题,直接在后面加了0,改为500,然后再重启下服务 : /etc/init.d/postfix restart

    再观察了一段时间,没有问题,正常。

    postfix发信的频率控制有几个:

    客户端发送邮件的频率控制.(某种情况下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运行时对所消耗的资源的灵活控制。可以通过以下几个方面来控制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秒。

    转自:http://www.365dw.cn/601.html

  • 相关阅读:
    Cesium入门-2-增加地形
    Cesium中常用的一些地理数据文件 以及数据相关的东西
    飞行姿态角度表示: heading pitch roll
    Cesium入门-3-官方完整实例
    Cesium中级教程6
    Postgresql添加/删除触发器示例
    VUE课程---6、v-text和v-html指令
    VUE课程---5、vue devtools
    VUE课程---4、MVVM原理
    js简单对象(plain javascript object)
  • 原文地址:https://www.cnblogs.com/drgcaosheng/p/4838470.html
Copyright © 2011-2022 走看看