Linux自建邮局之本人现在所在公司反垃圾邮件配置+Reject的邮件统计脚本

  • A+
所属分类:Linux  postfix  Shell脚本  随手小记
摘要

经过全公司受垃圾邮件骚扰的痛苦,只好出宁可错杀三千不放过一万的手段了,经过这个配置确实有几个客户被误杀了。没办法谁叫他们的mail server在在线黑名单呢。

smtpd_recipient_restrictions =
        permit_sasl_authenticated,#检测用户认证是否通过的,认证通过的返回状态OK,否则返回DUNNO状态码。
        permit_auth_destination,#不管客户端的主机名,只要符合以下的条件,就接受SMTP连接请求:
#* 解析后的目标地址符合$relay_domains及其子域
#* 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps
        permit_mynetworks,#检测客户端是否来自mynetworks或者mynetworks_style的网络,是的话返回OK,否则返回DUNNO状态码。
        reject_unauth_destination,#RCPT TO时:收件人不在postfix管辖的区域(由mydestination定义),返回REJECT,否则返回DUNNO状态码。
        check_client_access hash:/etc/postfix/rbl_whitelist,#误杀白名单,只要在白名单就允许通过。
        reject_unknown_client,#如果客户端的ip地址在DNS中没有PTR记录则拒绝转发该客户端的连接请求。可以用unknown_client_reject_code参数指定返回给客户机的错误代码(缺省为450)。如果你有用户没有作DNS记录则不要启用该选项。
        reject_unknown_hostname,#如果客户端执行HELO命令时的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为450)。
        reject_unknown_recipient_domain,#如果收件人的邮件地址在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码(缺省为450)。
        reject_unknown_sender_domain,#如果MAIL FROM命令提供的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码(缺省为450)。
        reject_invalid_hostname,#如果HELO命令所带的主机名参数不符合语法规范则拒绝客户机的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为501)。
        reject_non_fqdn_hostname,#HELO/EHLO时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。
        reject_non_fqdn_recipient,#RCPT TO时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。
        reject_non_fqdn_sender,#MAIL FROM时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。
        reject_unauth_pipelining,#禁止非授权客户端使用pipelining
        reject_unauthenticated_sender_login_mismatch#拒绝认证失败的发送者在
####在线反垃圾SPAM 开始######检测客户端的IP地址或主机名称
        reject_rbl_client cblless.anti-spam.org.cn,
        reject_rbl_client proxies.relays.monkeys.com,
        reject_rbl_client sbl-xbl.spamhaus.org,
        reject_rbl_client bl.spamcop.net,
        reject_rbl_client cbl.abuseat.org,
        reject_rbl_client dul.dnsbl.sorbs.net,
        reject_rbl_client relays.ordb.org,
        reject_rbl_client dnsbl.njabl.org,
        reject_rbl_client relays.osirusoft.com,
        reject_rbl_client blackholes.mail-abuse.org,
        reject_rbl_client dialups.mail-abuse.org,
        reject_rbl_client relays.mail-abuse.org,
        reject_rbl_client rbl-plus.mail-abuse.ja.net,
        reject_rbl_client blackholes.easynet.nl,
        reject_rbl_client proxies.blackholes.easynet.nl,
        reject_rbl_client dynablock.easynet.nl,
        reject_rbl_client spews.relays.osirusoft.com
####在线反垃圾SPAM 结束######
#=============邮件内容检测================#
body_checks = regexp:/etc/postfix/body_checks
#正文过滤
#=============邮件附件检测================#
header_checks = regexp:/etc/postfix/header_checks
#通过header_checks参数限制接收邮件的信头的格式,如果符合指定的格式,则拒绝接收该邮件。可以指定一个或多个查询列表,如果新邮件的信头符合列表中的某一项则拒绝该接收邮件。
#默认postfix不进行信头过滤。
#=============队列里邮件超时退信设置======#
queue_run_delay = 200s
#用于设定队列处理程序对拖延邮件的扫描周期。缺省为1000秒。
maximal_queue_lifetime = 1
#用于设定队列处理程序对滞留邮件的最长保存期。缺省为5天.
minimal_backoff_time= 200s
#用于设定队列处理程序对无法投递的邮件的最短巡回时间。缺省为1000秒
maximal_backoff_time= 300s
#用于设定队列处理程序对无法投递的邮件的最长巡回时间。缺省为4000秒
bounce_queue_lifetime = 18000s
#退信(弹回)在队列中的保留时间。超过此时间,被认为是无法投递的
maximal_queue_lifetime = 18000s
#普通邮件在队列中的最长保留时间。超过此时间,被认为是无法投递的

现在来看看我们reject掉多少垃圾邮件
Linux自建邮局之本人现在所在公司反垃圾邮件配置+Reject的邮件统计脚本
Linux自建邮局之本人现在所在公司反垃圾邮件配置+Reject的邮件统计脚本

Linux自建邮局之本人现在所在公司反垃圾邮件配置+Reject的邮件统计脚本

下面这个脚本可以实现对postfix日志分析然后统计并输出web,这样方便公司员工查看是否有自己的误杀邮件。
脚本下载地址:

#!/bin/bash
#########################################################################
# File Name: /home/script/YesterdayFailMail.sh
# Author: LookBack
# Email: admin#dwhd.org
# Version:
# Created Time: 2015年06月06日 星期六 17时25分30秒
#########################################################################

webhtml="/home/wwwroot/www.dwhd.org/Yesterday_FailMail.html"
grep 'reject: RCPT' /var/log/maillog | awk '$1=="Jun" && $2==""'$(date +%d --date "1 days ago")'""{print}' | \
        grep -Eo 'to=<\b\w+@\w+(-)?.\w+(.\w+)>' | sort -u |uniq | sed -r 's/to=<|>//g' | \
        awk '/这里换成自己公司邮箱的域名/{print "<p><b><font color=\"red\" size="5">"$0"</font></b></p>"}' \
        >$webhtml

grep -Eo '\b\w+@\w+(-)?.\w+(.\w+)?' $webhtml | while read line;do
        sum=`grep 'reject: RCPT' /var/log/maillog | grep "$line" | wc -l`
        sed -i "s/$line/&\&emsp;\&emsp;\&emsp;\&emsp;总计拦截:${sum}次/" $webhtml
done

grep 'reject: RCPT' /var/log/maillog | awk '$1=="Jun" && $2==""'$(date +%d --date "1 days ago")'""{print}' >> $webhtml

sed -i '/<p>/!s/</\&lt;/g' $webhtml
sed -i '/<p>/!s/>/\&gt;/g' $webhtml
sed -i '/<p>/!s/$/<\/p>/' $webhtml
sed -i '/<p>/!s/^/<p>/' $webhtml
sed -i '1i <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' $webhtml

文件下载

博客主机
lookback

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: