如何使用Postfix配置来防范垃圾邮件
在本指南中,您将学习如何调整Postfix(+ Auth SMTP + Quota)的默认Falko邮件指南, https://www.youcl.com/info/4368 ,以更好地打击垃圾邮件,并允许稍微兼容较老的Qmail系统。
所以让我们开始吧
youcl指南是伟大的所有,但如果你有一个非常繁忙的邮件服务器运行垃圾邮件Assasin每1000秒的消息每分钟是一个CPU杀手。 最好的答案是停止邮件之前,它使用一系列RBL(实时黑名单)和RHBL(相同但不同的),Greylistings和Helo Checks。
首先,我们要更改现有的smtpd限制,并添加一大堆新的检查,以帮助减少系统在/etc/postfix/main.cf中接收的邮件数量
### Checks to remove badly formed email
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
unknown_address_reject_code = 554
unknown_hostname_reject_code = 554
unknown_client_reject_code = 554
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, regexp:/etc/postfix/helo.regexp, permit
### When changing sender_checks, this file must be regenerated using postmap <file>, to generate a Berkeley DB
smtpd_recipient_restrictions =
check_client_access hash:/etc/postfix/helo_client_exceptions
check_sender_access hash:/etc/postfix/sender_checks,
reject_invalid_hostname,
### Can cause issues with Auth SMTP, so be weary!
reject_non_fqdn_hostname,
##################################
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_mynetworks,
reject_unauth_destination,
# Add RBL exceptions here, when changing rbl_client_exceptions, this
file must be regenerated using postmap <file>, to generate a
Berkeley DB
check_client_access hash:/etc/postfix/rbl_client_exceptions,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rhsbl_sender dsn.rfc-ignorant.org,
check_policy_service inet:127.0.0.1:60000
permit
现在要解释一下,首先我们需要创建几个文件:
我们要创建的第一个文件是/etc/postfix/helo.regexp,它将包含:
/^subdomain\.host\.com$/ 550 Don't use my own hostname
/^xxx\.yyy\.zzz\.xxx$/ 550 Don't use my own IP address
/^\[xxx\.yyy\.zzz\.xxx\]$/ 550 Don't use my own IP address
/^[0-9.]+$/ 550 Your software is not RFC 2821 compliant
/^[0-9]+(\.[0-9]+){3}$/ 550 Your software is not RFC 2821 compliant
这样做会使垃圾邮件发送者试图发送helo命令,并假冒通过IP或主机名接收邮件的服务器,以及转移一些不符合RFC 2821合规性的邮件。
接下来,我们需要创建/ etc / postfix / helo_client_exceptions:
#These client IP addresses are allowed to bypass fqdn checks
# Some Comment to identify IP address below
www.xxx.yyy.zzz OK
这个文件是需要的,一个表现不佳的邮件服务器无法发送正确的helo,你需要允许从该源接受邮件。 根据我的经验,像独立设备,CCTV摄像机这样的东西在符合标准方面很差,所以你可能需要做一个例外。
在此文件中的任何更改变得可用之前,您需要运行
postmap /etc/postfix/helo_client_exceptions
这将创建一个名为/etc/postfix/helo_client_exceptions.db的文件
向下移动,我们有/ etc / postfix / sender_checks允许您绕过各种FQDN检查,并允许特定的发件人通过。 如果公司运行内部邮件网络(如domain.com)但电子邮件在int.domain.com上运行,并且没有DNS设置int.domain.com,这是非常有用的,这对于安全性而言不错,因为外部DNS不是很好不知道内部结构,因此Postfix将拒绝int.domain.com。
user@domain.com REJECT
user@int.domian.com OK
再一次修改此文件必须创建一个Berkely DB文件,因此我们使用以下命令创建它:
postmap /etc/postfix/sender_checks
接下来我们进行RBL检查。 有很多专门针对RBL的网站,但是为了减少文章长度,只需将这些列表不断更新,并提供垃圾邮件发送者用于中继邮件的IP和主机名称。 尝试发送邮件到您的邮件服务器的每个IP将被检查这些列表(上面使用4个),如果该IP不在RBL中列出,则邮件服务器将接受该邮件。 当事人服务器发现自己在这些列表上,无时无刻,或列表需要24小时才能在垃圾邮件爆发后删除黑名单IP,因此总是最好再次绕过这些检查。
为此,我们创建一个名为/ etc / postfix / rbl_client_exceptions的文件:
## Some Random comment
www.xxx.yyy.zzz OK
再次,您必须运行postmap生成Berkeley DB文件
postmap /etc/postfix/rbl_client_exceptions
smtpd限制的最后一行是灰名单过滤器。 我不会详细介绍这个,作为指导已经存在于youcl https://www.youcl.com/greylisting_postfix_postgrey,但如果你不想使用Greylisting,只需省略一下
check_policy_service inet:127.0.0.1:60000
smtpd限制很容易遵循,直到其中一个检查给出消息传递到Postfix队列的绿色标志,大多数答复不确定移动,除非给出明确的NO消息将向下移动检查列表。
QMAIL LEGACY
DJB(丹·伯恩斯坦)开发了一种名为QMQP的SMTP替代方案。 据说这是更快,更少的间接费用。 因此,如果您使用Postfix替换旧的Qmail MTA,则可能需要启用对QMQP的支持。
我们这样做将以下内容添加到/etc/postfix/main.cf中
qmqpd_authorized_clients = $mynetworks
qmqpd_error_delay = 5s
qmqpd_timeout = 300s
实际上,您可以对任何事情进行验证,但我决定对mynetworks进行身份验证。 将上述内容添加到main.cf中后,需要进一步修改/etc/postfix/master.cf并确保包含以下内容:
628 inet n - - - 100 qmqpd
现在你需要去重新启动Postfix
/etc/init.d/postfix restart
您可以通过键入以下内容检查您的新的QMQP感知Postfix:
telnet localhost 628
通过IP进行身份验证(适用于MS Exchange服务器中的Smarthost中继 )
接下来,我们要修改指南,使mynetworks的设置比通过flatfiles更容易一些,比如/etc/postfix/main.cf
创建以下/etc/postfix/mysql-mynetworks.cf
user = mail_admin
password = password
dbname = mail
table = allowed_hosts
select_field = 'IP'
where_field = IP
hosts = 127.0.0.1
additional_conditions = and active='yes'
此时您将需要以下SQL
CREATE TABLE`allowed_hosts`(
`active`枚举('yes','no')NOT NULL默认'1'
`IP` varchar(15)NOT NULL default'',
`Client` varchar(128)NOT NULL default'',
`Comments`文本NOT NULL
)ENGINE = MyISAM DEFAULT CHARSET = latin1;
最后,通过将我们的mynetworks行的postfix main.cf更改为:
mynetworks = 127.0.0.0/8, proxy:mysql:/etc/postfix/mysql-mynetworks.cf
最后重新启动Postfix以使更改生效:
chmod o= /etc/postfix/mysql-mynetworks.cf
chgrp postfix /etc/postfix/mysql-mynetworks.cf
/etc/init.d/postfix restart