天天看点

Postfix实现代理Exchange邮件传输方案

由于公司Exchange环境的邮件过滤的硬件设备存在单点故障又不想再花更多的费用去做这方面的投资,所以想通过Postfix工具实现一个冗余的方案。

相关组件:

postfix+clamd+spamassassin+amavisd-new

clamd 反病毒引擎    

spamassassin 反垃圾邮件

amavisd-new是邮件代理服务器(MTA)和防毒软件之间的中介软件

基本原理:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950067Tvr.png" target="_blank"></a>

第一步:postfix 接收邮件

postfix,通过25端口,接受所有的邮件,这个步骤,是很好理解。

第二步:把邮件交给amavisd-new

在Linux的邮件系统里,amavisd-new的非常关键啊。可以这样理解,postfix,的所有额外的功能,都需要通过他才能实现。

从上面的这个图片,我们就可以看到,postfix,把邮件接收下来后,交给amavisd-new,让他想办法,解决杀毒,垃圾邮件过滤的问题。

交给杀毒软件

通过clamd,linux的杀毒软件,检查邮件是否带病毒。

交给SpamAssassin

通过他来实现垃圾邮件的过滤。

第三步:amavisd-new通过10025端口还给postfix

当所有的工作完成后,交给postfx,postfix在传递给exchange

安装的整个过程

主要参考文档

<a href="http://blog.linuxphp.org/archives/657/" target="_blank">http://blog.linuxphp.org/archives/657/</a>

<a href="http://wiki.extmail.org/%E5%8D%81%E4%BA%8C%E3%80%81%E9%85%8D%E7%BD%AE%E5%86%85%E5%AE%B9%E3%80%81%E7%97%85%E6%AF%92%E8%BF%87%E6%BB%A4#%E3%80%81%E9%85%8D%E7%BD%AEclamav" target="_blank">http://wiki.extmail.org/%E5%8D%81%E4%BA%8C%E3%80%81%E9%85%8D%E7%BD%AE%E5%86%85%E5%AE%B9%E3%80%81%E7%97%85%E6%AF%92%E8%BF%87%E6%BB%A4#、配置clamav</a>

操作系统版本 Centos 6.3

1 配置dns vim /etc/resolv.conf

添加一个能够解析的局域网DNSIP

2 配置hosts vim /etc/hosts

使其能解析自己

比如 1.1.1.1 postfix.contoso.com

一 安装配置Postfix使其能完成基本的邮件收发

1 修改相关配置文件

vim /etc/postfix/main.cf:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995006yIpI.png" target="_blank"></a>

2 vim /etc/postfix/transport,在配置文件的末尾添加以下内容。

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950105m12.png" target="_blank"></a>

3 vim /etc/postfix/master.cf 基本保持默认文件的原来的内容

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950107VDf.png" target="_blank"></a>

4 执行以下命令使transport生效

postmap transport

5 启动服务:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995010Seyk.png" target="_blank"></a>

6查看相关端口:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995010IlcO.png" target="_blank"></a>

7利用powershell  send-mailmessage测试一下发送邮件,10.7.2.53就是本台postfix服务器:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995010oi6w.png" target="_blank"></a>

8发现客户端已经可以收到了

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995010bPjG.png" target="_blank"></a>

二 添加相关的病毒过滤组件和反垃圾邮件组件

创建相关的账户:

添加ClamAV运行所需的组和用户:   

groupadd clamav    

useradd -g clamav -s /sbin/nologin -M clamav    

添加配合amavisd-new使用的用户amavis(我们这次是yum安装默认会创建)    

groupadd amavis    

useradd -g amavis -s /sbin/nologin -M amavis

本次组件的安装为了方便主要使用yum安装也可以使用源码安装。

1 安装Clamd(版本0.98.1)

yum install clamd (yum安装会自动创建clam组和账户这个需要后边更改一下)

发现默认的源没有相关的软件

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995013BvI9.png" target="_blank"></a>

我们需要将其他服务器的/etc/yum.repos.d目录下面的源文件拷贝到这台服务器上

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995017TdUu.png" target="_blank"></a>

到postfix服务器上查看已经有了相关的文件,并执行yum makecache使其生效

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995017FnKX.png" target="_blank"></a>

再次执行yum install clamd的时候虽然有了相关组件但又发现了错误

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995017drcu.png" target="_blank"></a>

需要更改/etc/yum.repos.d/epel.repo中的以下内容

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995017IgLI.png" target="_blank"></a>

再运行 yum makecache 然后再运行yum install clamd 发现已经可以安装了

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950174mQc.png" target="_blank"></a>

启动服务service clamd start,会有病毒库过期的提示:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995018EwU5.png" target="_blank"></a>

使用freshclam更新一下病毒库,重启一下clamd服务已经正常了:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950185Zdr.png" target="_blank"></a>

修改配置文件内容,/etc/clamd.conf 因为默认的用户是clam我们需要改为amavis

默认的用户:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995021cxL0.png" target="_blank"></a>

修改完的用户:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950213BOp.png" target="_blank"></a>

重启服务失败:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995021YDU0.png" target="_blank"></a>

原来是目录权限的问题:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950214uON.png" target="_blank"></a>

修改目录权限:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995022I9RS.png" target="_blank"></a>

删除/var/log/clamav目录线面的这两个文件:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995022PsbY.png" target="_blank"></a>

再起重启服务,还是有问题:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995022Hbm1.png" target="_blank"></a>

目录权限问题:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_139299502585BZ.png" target="_blank"></a>

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995025TWlW.png" target="_blank"></a>

重启服务成功:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995026fAC1.png" target="_blank"></a>

修改病毒库更新的配置文件

先检查配置文件/etc/freshclam.conf

默认账户:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995029i4wo.png" target="_blank"></a>

更新后的账户

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995029G4z8.png" target="_blank"></a>

配置文件更改完以后会出现病毒库更新错误

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995029woYB.png" target="_blank"></a>

还是权限的问题需要修改权限至下面的截图:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995029nXOv.png" target="_blank"></a>

更新成功:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950290IEL.png" target="_blank"></a>

2 安装spamassassin(版本3.3.1)

yum install spamassassin 这个是正常的。

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995030EE1N.png" target="_blank"></a>

修改配置文件/etc/mail/spamassassin/local.cf

required_score 5.0   

rewrite_header Subject *****SPAM*****    

report_safe     1    

use_bayes       1    

bayes_auto_learn        1    

skip_rbl_checks         1    

use_razor2      0    

use_pyzor       0    

ok_locales      all

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995030Rbsl.png" target="_blank"></a>

启动服务:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995030pe3r.png" target="_blank"></a>

3安装amavisd-new(版本2.8.0)

yum install amavisd-new 一切顺利

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995030iGDO.png" target="_blank"></a>

设置相关目录权限:     

将clamav加到amavis运行组里,并调整目录权限,否则clamav将无法扫描amavisd-new产生的临时文件

# gpasswd -a clamav amavis   

# usermod -G amavis clamav    

# chown amavis.amavis /var/spool/amavisd    

# chmod 750 /var/spool/amavisd    

# chown amavis.amavis /var/spool/amavisd/tmp    

# chmod 750 /var/spool/amavisd/tmp

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950307eNa.png" target="_blank"></a>

修改相关的配置文件/etc/amavisd/amavisd.conf内容。

$daemon_user  = 'amavis';#yum安装的时候会自动创建账户$daemon_group = 'amavis';#yum安装的时候会自动创建组和账户   

$mydomain = 'contoso.com'; #此处是你的Exchange或者其它邮件系统的邮件域

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995321FEOc.png" target="_blank"></a>

$virus_admin               = "postmaster\@$mydomain";   

$mailfrom_notify_admin     = "postmaster\@$mydomain";   

$mailfrom_notify_recip     = "postmaster\@$mydomain";   

$mailfrom_notify_spamadmin = "postmaster\@$mydomain";    

$mailfrom_to_quarantine = '';

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995031xSXH.png" target="_blank"></a>

virus_admin_maps =&gt; ["postmaster\@$mydomain"]    (指定报告病毒和垃圾邮件时发送系统邮件的用户身份)   

spam_admin_maps  =&gt; ["postmaster\@$mydomain"]

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995031qVpZ.png" target="_blank"></a>

取消以下内容的注释并修改相关内容。

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995031rDIV.png" target="_blank"></a>

将配置文件中的以下内容修改成以下内容   

 ['ClamAV-clamd',    

   \&amp;ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],    

   qr/\bOK$/m, qr/\bFOUND$/m,    

   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

这是默认的配置文件。

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995031Ysrc.png" target="_blank"></a>

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995031OasA.png" target="_blank"></a>

启动服务,正常。

service amavisd start

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995031ItWX.png" target="_blank"></a>

三 所有组件安装完毕需要将所有的组件与postfix关联

修改/etc/postfix/master.cf 添加以下内容

smtp-amavis unix - - n - 2 smtp   

 -o smtp_data-done_timeout=1200    

 -o disable_dns_lookup=yes    

#符号前面有一个空格用于连续下面的内容    

127.0.0.1:10025 inet n -        n       -       -       smtpd    

 -o content_filter=    

 -o local_recipient_maps=    

 -o relay_recipient_maps=    

 -o smtpd_restriction_classes=    

 -o smtpd_client_restrictions=    

 -o smtpd_helo_restrictions=    

 -o smtpd_sender_restrictions=    

 -o smtpd_recipient_restrictions=permit_mynetworks,reject    

 -o mynetworks=127.0.0.0/8    

 -o strict_rfc821_envelopes=yes

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995032MC5J.png" target="_blank"></a>

修改/etc/postfix/main.cf 添加以下内容:

content_filter=amavisfeed:[127.0.0.1]:10024

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950359vUB.png" target="_blank"></a>

重启一下服务,相关的端口已经启动:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995035xuLY.png" target="_blank"></a>

我们将相关的服务设置为开机启动:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995035qMX6.png" target="_blank"></a>

四 相关的一些测试:

1我们先发送一份正常的邮件:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995035yGlu.png" target="_blank"></a>

查看相关的日志,没有检测到病毒。邮件已经传送成功:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_13929950369eSe.png" target="_blank"></a>

2 我们发送一份带病毒的邮件。

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995039VeOf.png" target="_blank"></a>

查看一下日志发现被隔离了。

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995039YhCU.png" target="_blank"></a>

然后会产生一封退信:

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995039wsL1.png" target="_blank"></a>

说明病毒过滤成功了。

3 测试反垃圾邮件功能.

# telnet localhost 25  

Trying 127.0.0.1...  

Connected to localhost.localdomain (127.0.0.1).  

Escape character is '^]'.  

220 xt.contoso.com ESMTP Postfix    

ehlo localhost //打招呼    

250-xt.contoso.com    

250-PIPELINING    

250-SIZE 10240000    

250-ETRN    

250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN  

250-ENHANCEDSTATUSCODES    

250-8BITMIME    

250 DSN    

250 2.1.0 Ok  

250 2.1.5 Ok  

data    //邮件内容    

354 End data with .   //下面那行为测试内容    

Subject: XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X    

.   //以.结束邮件内容    

250 2.0.0 Ok: queued as BC24E85260  

quit //退出    

221 2.0.0 Bye  

Connection closed by foreign host.

发送方出现了退信

<a href="http://lixiaosong.blog.51cto.com/attachment/201402/21/705126_1392995042gv8m.png" target="_blank"></a>

整个方案测试成功

本文转自handsome7038 51CTO博客,原文链接:http://blog.51cto.com/lixiaosong/1361914

继续阅读