我需要一种方法来积极地限制发送到特定域(整个域)的邮件数量,任何超过速率限制的邮件都需要被拒绝或删除。不延迟的,延迟的。
我不能使用Exim,所以我们在这里,后缀和PostFWD,和一些问题。
有些版本..。
Postfix v2.6.6
PostFWD v1.3.5
CentOS 6.8 x64因此,首先,我验证了postfwd中是否存在我的汇率限制规则,并从后缀目录(它是)中的postfwd.cf正确地解释了它:
[root@monitoringtest ~]# /usr/local/postfwd/sbin/postfwd -f /etc/postfix/postfwd.cf -C
Rule 0: id->"davelimit001"; action->"rate(recipient_domain/3/1800/421 4.7.1 - Sorry, exceeded 3 messages in 30 minutes.)"; recipient_domain->"==;dave-byrne.co.uk"
[root@monitoringtest ~]#上述费率限制所有发送给@dave-byrne.co.uk的出站邮件在30分钟内仅为3封。该域是我自己的测试,但在生产中,这将评级限制消息绑定到短信网关外部电子邮件。
快速检查以确保后缀和PostFWD已启动并侦听(它们是):
[root@monitoringtest ~]# netstat -anpl | grep ':10040\|:25'
tcp 0 0 127.0.0.1:10040 0.0.0.0:* LISTEN 4093/postfwd.pid
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 4190/master
tcp 0 0 :::25 :::* LISTEN 4190/master
[root@monitoringtest ~]#然后,我在内部监听端口10040的PostFWD服务器上发出示例请求。您可以看到PostFWD通过(其不知道的操作)3封邮件,然后将利率限制应用到第4,并拒绝它的421。太完美了。现在,让后缀使用PostFWD!
[root@monitoringtest ~]# nc 127.0.0.1 10040 </usr/local/postfwd/tools/request.sample
action=DUNNO
[root@monitoringtest ~]# nc 127.0.0.1 10040 </usr/local/postfwd/tools/request.sample
action=DUNNO
[root@monitoringtest ~]# nc 127.0.0.1 10040 </usr/local/postfwd/tools/request.sample
action=DUNNO
[root@monitoringtest ~]# nc 127.0.0.1 10040 </usr/local/postfwd/tools/request.sample
action=421 4.7.1 - Sorry, exceeded 3 messages in 30 minutes.
[root@monitoringtest ~]#摘录自/var/log/maillog,显示适用于上述第4条消息的速率限制
Oct 19 17:15:47 monitoringtest postfwd[25933]: [RULES] rule=0, id=davelimit001, client=root@monitoringtest.co.uk[168.100.1.7],
sender=<root@monitoringtest.co.uk>, recipient=<admin@dave-byrne.co.uk>, helo=<dave-byrne.co.uk>, proto=ESMTP, state=RCPT, rate=rate/4/21.67s, delay=0.00s,
hits=davelimit001, action=421 4.7.1 - Sorry, exceeded 3 messages in 30 minutes.因此,为了与后缀集成,我在后缀main.cf文件中添加了以下内容:
[root@monitoringtest ~]# tail -n 3 /etc/postfix/main.cf
127.0.0.1:10040_time_limit = 3600
smtpd_recipient_restrictions = permit_mynetworks,
check_policy_service inet:127.0.0.1:10040
[root@monitoringtest ~]#这些都是根据PostFWD文档编写的。
然后,我在本地使用telnet连接到Postfix,并向管理员在…Dave-byrne.co.uk发送电子邮件。就像这样:
[root@dedweb ~]# telnet <test-server-IP-here> smtp
Trying xx.xx.xx.xx...
Connected to xx.xx.xx.xx.
Escape character is '^]'.
220 monitoringtest.xxxxxxxxx.com ESMTP Postfix
HELO dave-byrne.co.uk
250 monitoringtest.xxxxxxxxx.com
MAIL FROM: root@monitoringtest.co.uk
250 2.1.0 Ok
RCPT TO: admin@dave-byrne.co.uk
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
test1.
.
250 2.0.0 Ok: queued as 946B621C15我这样做了4,5,6次,第四次应该有限制的速率,就像它使用网猫直接解雇他们在PostFWD。但它没有,后缀只是高兴地继续它的业务转发邮件,它认为它应该。我可以发送一百,它甚至不会考虑利率限制。在此期间,PostFWD没有向日志输出任何内容,它根本没有被击中,它没有传递任何内容,也没有阻止任何内容。Postfix没有使用PostFWD,尽管它在smtpd_recipient_restrictions中设置为check_policy_service。
这就是我被困的地方。三天过去了,我一点也不聪明。以前是否有人成功地使用过PostFWD (后缀防火墙守护进程),与任何类型的规则集,无论速率限制。我愿意接受许多建议,但是我不能改变postfix,我不能改变OS,而且由于安全问题和实际发送的工作流问题,我不能切换到外部中间邮件中继。
谢谢大家戴夫。
发布于 2016-10-19 19:39:03
问完这个问题后,我立即意识到,后缀收件人的限制是按照它们在main.cf中出现的顺序执行的。所以我的
[root@monitoringtest ~]# tail -n 3 /etc/postfix/main.cf
127.0.0.1:10040_time_limit = 3600
smtpd_recipient_restrictions = permit_mynetworks,
check_policy_service inet:127.0.0.1:10040
[root@monitoringtest ~]#在“许可_我的网络”中返回一个很难的“OK”。OK将停止处理进一步的限制。
我通过将check_policy_service放在smtp收件人限制的顶部来解决我的问题。如果PostFWD传递一封邮件,它会用'DUNNO‘或更确切地说'DUNNO/OK’来回复,但它会继续运行进一步的smtp限制。
在这样的情况下,PostFWD可以自由地传递没有触发利率限制的邮件,但一旦发送了,它就以421的拒绝回复。这正是我想要的。
所以请记住,你限制的顺序,以及你实际上限制的是什么,都很重要。
请注意,这是一个私人内部邮件服务器,服务于一个非常特定的目的。不要将此代码用于生产或共享邮件服务器。
https://serverfault.com/questions/810082
复制相似问题