在Ubuntu 8.04上进行SMTP邮件速率控制,最好使用后缀


8

也许我正在追一个错误,但我正在尝试设置各种smtp代理。我有一个后缀服务器,它接收服务器/客户端集合的所有电子邮件。他们使用smarthost(relayhost = ...)将其邮件转发到我们的公司MTA。我想限制单个服务器可以中继的消息数,以防止淹没公司MTA。Postfix有一个名为“ anvil”的程序,该程序能够跟踪有关将用于此类事情的邮件的统计信息,但似乎并未执行。启动postfix并从远程服务器通过它发送了许多消息时,我运行了“ inotifywait -m / usr / lib / postfix / anvil”。inotifywait表示砧从未运行过。任何人都可以使用postfix / anvil rate控件工作吗?

main.cf

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

Answers:


7

最后,我使用policyd来执行此类操作。我将其配置为将单个IP地址限制为每小时不超过10000条消息和1 GB。下面是一份为自己写的文档的副本,以防万一有人觉得有帮助。


配置后缀和策略

安装软件包后,请对其配置进行以下更改。在/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.

1

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

您可能需要查看与后缀的qmgr部分有关的设置。具体来说,您可能希望将并发限制设置为非常低的值,并且排队等待时间非常长。 您将需要将传递速率设置为具有较大的延迟并且还希望减少master.cf中传递过程的数量。

您是否考虑过使用qshape确定内部MTA可接受的比率?


我的目标不是减慢任何速度,我只是想防止失控的过程导致公司服务器瘫痪。这就是我与交换团队达成的服务协议。邮件仍然需要快速。我重新配置了Postfix以进行本地交付并重复了测试。消息仍在忽略限制。
TimDaMan

1
我想到了!!Anvil无法获得有关“ mynetworks = ...”中客户端的提要/处理数据,我将其更改为mynetworks = 127.0.0.0/8,并且已遵守限制。
TimDaMan

0

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 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.