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

我只是一个虾纸丫 提交于 2020-01-25 20:26:21

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

postfix是Wietse Venema在IBMGPL协议之下开发的MTA(邮件传输代理)软件,是linux世界的一个开源的邮件传输代理工具,通过一些组件可以实现反垃圾邮件和防病毒的功能。

相关组件:

postfix+clamd+spamassassin+amavisd-new

clamd 反病毒引擎    
spamassassin 反垃圾邮件

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

基本原理:

第一步:postfix 接收邮件

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

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

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

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

交给杀毒软件

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

交给SpamAssassin

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

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

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

 

安装的整个过程

主要参考文档

http://blog.linuxphp.org/archives/657/

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

操作系统版本 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:

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

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

4 执行以下命令使transport生效

postmap transport

5 启动服务:

6查看相关端口:

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

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

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

创建相关的账户:

添加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组和账户这个需要后边更改一下)

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

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

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

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

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

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

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

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

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

默认的用户:

修改完的用户:

重启服务失败:

原来是目录权限的问题:

修改目录权限:

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

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

目录权限问题:

重启服务成功:

 

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

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

默认账户:

更新后的账户

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

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

更新成功:

2 安装spamassassin(版本3.3.1)

yum install spamassassin 这个是正常的。

修改配置文件/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

启动服务:

3安装amavisd-new(版本2.8.0)

yum install amavisd-new 一切顺利

设置相关目录权限:     
将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

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

$daemon_user  = 'amavis';#yum安装的时候会自动创建账户$daemon_group = 'amavis';#yum安装的时候会自动创建组和账户   
$mydomain = 'contoso.com'; #此处是你的Exchange或者其它邮件系统的邮件域

$virus_admin               = "postmaster\@$mydomain";   
$mailfrom_notify_admin     = "postmaster\@$mydomain";   
$mailfrom_notify_recip     = "postmaster\@$mydomain";   
$mailfrom_notify_spamadmin = "postmaster\@$mydomain";    
$mailfrom_to_quarantine = '';

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

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

将配置文件中的以下内容修改成以下内容   
 ['ClamAV-clamd',    
   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],    
   qr/\bOK$/m, qr/\bFOUND$/m,    
   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

这是默认的配置文件。

启动服务,正常。

service amavisd start

 

三 所有组件安装完毕需要将所有的组件与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

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

content_filter=amavisfeed:[127.0.0.1]:10024

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

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

 

四 相关的一些测试:

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

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

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

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

然后会产生一封退信:

说明病毒过滤成功了。

 

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    
mail from:<xiaosong.li1@contoso.com > // 发件人    
250 2.1.0 Ok  
rcpt to:<xiaosong.li1@contoso.com//收件人    
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.

发送方出现了退信

整个方案测试成功

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!