Ubuntu 8.04 上的 SMTP 消息速率控制,最好使用 postfix

Ubuntu 8.04 上的 SMTP 消息速率控制,最好使用 postfix

也许我正在查找错误,但我正在尝试设置某种 smtp 代理。我有一个 postfix 服务器,它接收一组服务器/客户端的所有电子邮件。它使用智能主机 (relayhost=...) 将邮件转发到我们公司的 MTA。我想限制单个服务器可以中继的消息数量,以防止公司 MTA 被淹没。Postfix 有一个名为“anvil”的程序,它能够跟踪有关邮件的统计信息以用于此类事情,但它似乎没有被执行。我在启动 postfix 时运行了“inotifywait -m /usr/lib/postfix/anvil”,并通过它从远程服务器发送了一些消息。inotifywait 指示 anvil 从未运行过。有人让 postfix/anvil 速率控制工作了吗?

主配置文件

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
myhostname = site-server-q9
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
relayhost = Out outgoing mail relay
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = 10.X.X.X
smtpd_client_message_rate_limit = 1
anvil_rate_time_unit = 1h

master.cf 提取

anvil     unix  -       -       -       -       1       anvil
smtp      inet  n       -       -       -       -       smtpd

答案1

最后我使用了 policyd,它就是做这种事情的。我将其配置为将单个 IP 地址限制为每小时不超过 10000 条消息和 1 GB。以下是我自己写的文档的副本,以防有人觉得有用。


配置 postfix 和 policyd

安装软件包后,对其配置进行以下更改。在 /etc/postfix/main.cf 中添加以下行

smtpd_client_restrictions = check_policy_service inet:127.0.0.1:10031

在 /etc/postfix-policyd.conf 中

  • 改成WHITELISTING=1WHITELISTING=0
  • 改成GREYLISTING=1GREYLISTING=0
  • 改成SENDERTHROTTLE=0SENDERTHROTTLE=1
  • 改成QUOTA_EXCEEDED_TEMP_REJECT=1QUOTA_EXCEEDED_TEMP_REJECT=0
  • 改成SENDER_QUOTA_REJECTION="Quota Exceeded."SENDER_QUOTA_REJECTION="Quota Exceeded, 10,000 messages/hour max!"
  • 改成SENDER_SIZE_REJECTION="Message size too big."SENDER_SIZE_REJECTION="Message size too big. 10Mb per message or 1 Gb/hour max!"
  • 改成SENDERMSGLIMIT=512SENDERMSGLIMIT=10000
  • 改成SENDERRCPTLIMIT=3600SENDERRCPTLIMIT=10000
  • 改成SENDERQUOTALIMIT=250000000SENDERQUOTALIMIT=1000000000
  • 改成SENDERMSGSIZE=10240000SENDERMSGSIZE=50000000
  • 改成SENDER_INACTIVE_EXPIRE=31dSENDER_INACTIVE_EXPIRE=1h

答案2

您的实施可能会感兴趣:

default_destination_concurrency_limit (default: 20)

    The default maximal number of parallel deliveries to the same destination. This is the default limit for delivery via the lmtp(8), pipe(8), smtp(8) and virtual(8) delivery agents. With per-destination recipient limit > 1, a destination is a domain, otherwise it is a recipient.

    Use transport_destination_concurrency_limit to specify a transport-specific override, where transport is the master.cf name of the message delivery transport.

答案3

Anvil 的真正目的是限制传入消息速率,而不是限制传出消息速率。可以将其视为一个粗糙的 DoS 过滤器。

您可能需要查看与管理者后缀部分。具体来说,你可能想要设置你的并发限制到非常低的程度,而你的排队等候时间很高。 您需要设置延迟较大的事物的交付率并且还希望降低master.cf中的交付流程数量。

使用 qshape 观察确定您的内部 MTA 可接受的速率是多少?

答案4

Anvil 为 postfix 进行日志记录,我已将其添加到 main.cf 中,似乎对我有用

#### Prevent server sending excess mail from clients add to /etc/postfix/main.cf
####
anvil_rate_time_unit = 60s
anvil_status_update_time = 120s
smtpd_error_sleep_time = 2s
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20
smtpd_client_message_rate_limit = 
#### End Prevent server sending excess mail 

相关内容