Chinaunix

标题: 邮件中转实现 clamav解析处理 [打印本页]

作者: j_cle    时间: 2015-10-26 09:57
标题: 邮件中转实现 clamav解析处理
各位好,麻烦问个关于邮件服务器中转的问题,
现在自己搭建了一个基于linux 系统实现的sendmail的邮件服务器,以实现和公网邮箱的转发,现在还有一个需求就是在MTA和邮件服务器之间搭建一个邮件过滤器,对邮件进行解析过滤,已阻止可疑邮件,初步打算用 clamav实现,
但是现在有个问题,如何在中转过滤器上实现对正常邮件的转发呢,现在邮件服务器和邮件过滤器分别是在两个系统上,查看了资料,说要更改邮件域名的mx记录到邮件过过滤器上,这个很好做,但是如何实现将邮件过滤器上的邮件重新
发送到邮件服务器上呢? 说是要做更改邮件路由,可是不知道怎么来实现,所以在这里向各位过来人请教下。
系统现在打算做的雏形是
sendmail + dovecot + saslauthd + webmail ,过滤系统使用 clamav 实现对邮件的解析处理。目前是卡在过滤系统这块了!
作者: j_cle    时间: 2015-10-26 10:03
没人么,在线等啊
作者: woxizishen    时间: 2015-10-26 14:10
邮件服务器MTA一般都有一个强制将某个域名下的邮件,投递到某个邮件服务器的ip上,就可以实现你的功能。postfix是可以做到,sendmail肯定也是没问题
作者: j_cle    时间: 2015-10-26 15:59
回复 3# woxizishen


    嗯,这样理解是没问题的,只是不太清楚具体怎么实践,上午看了一下 sendmail的配置文件,没找到具体配置项,所以才发的帖子。。

作者: woxizishen    时间: 2015-10-27 07:59
回复 4# j_cle

postfix就是从sendmail发展过来的,功能是绝对有,就好人帮到底吧。

vi /etc/mail/mailertable                                       
abc.efg.com       smtp:[202.xx.x.xx]

所有发往abc.efg.com邮件,都将直接强制法给202这个邮件服务器上

postfix的transport功能和它是一样一样的。
作者: 3645636    时间: 2015-10-31 16:51
本帖最后由 3645636 于 2015-10-31 16:53 编辑

我好几年前就使用过这方面的,我给你链接。使用Milter
http://bbs.chinaunix.net/thread-1926477-1-1.html
http://bbs.chinaunix.net/thread-1757719-1-1.html
作者: j_cle    时间: 2015-11-05 14:01
回复 6# 3645636


    谢谢,今天才看到,最近被拉去干其他事情了,所以这个工作也没有太大进展,会详细学习您之前的帖子,
另外
请问是否有qq或者邮箱,想详细跟您请教下,坛子上经常忘记。
作者: j_cle    时间: 2015-11-05 14:03
回复 6# 3645636


    前段时间,自己也又做了些调研,发现现在用posix的比较多了,sendmail相对会冷门些,不知道您对此有什么看法。
作者: j_cle    时间: 2015-11-05 14:07
回复 5# woxizishen


    好的,谢谢,最近都没忙这块了,之前的工作没太大进展,先学习了,实在不行打算用posix了,也是再考虑中
作者: woxizishen    时间: 2015-11-05 14:25
回复 8# j_cle

1.RHEL新版本直接抛弃了sendmail,只预装postfix,你懂的。postfix说句实话稳定性还是非常强的,不说平时用的企业就是网易的coremail也和postfix脱不了干系。

   
作者: j_cle    时间: 2015-11-05 14:32
回复 10# woxizishen


    恩,现在关于sendmail的资料都非常少了,而且比较老了,学习起来比较困难
作者: j_cle    时间: 2015-11-19 14:49
回复 5# woxizishen


    版主您好,这几天我把“sendmail + dovecot + saslauthd + webmail + clamav ”都成功集成了,现在面临的一个难题是怎么实现 过滤器和 邮件服务器的连接,目前打算做的思路是按照下图这样的做法来弄的,但目前仅仅做到了 在邮件服务器上实现了对邮件的杀毒功能,所以还需要一个独立的过滤器系统,参考了您所给的修改/etc/mail/mailertable  文件的做法,但是不太明白,我现在只有个公网ip 和一个域名 ,不知道要怎么转? 能详细讲解下么,谢谢


作者: woxizishen    时间: 2015-11-19 16:31
和你打个比方:
一般一个企业较完整的邮件系统架构如这样:
有一台网关邮件服务器---这个是专门用于过滤和对外收发邮件
有一台内部邮件服务器---这个邮件服务器基本上不会做过滤动作,用于内部收发邮件,内部用户自己互相收发邮件是没必要再去做过滤动作的,当然如果是发往外部的邮件,他就会从那台网关邮件服务器走。
另外你的域名就一个,你没有自己的dns服务器的话,一个域名肯定不够用,你这是要把2个MTA邮件服务器单独分离,你可以架设一个域名服务器,在这个域名下面可以设定多个子域分配给多个邮件服务器,这里就牵扯到架设dns服务器问题,问题会变得越来越复杂。

如果你只是为了过滤邮件,你可以不必把过滤功能进行分离到另外一台单独的MTA邮件服务器上,你要记得过滤并不只是在MTA上才能做的,MDA上也可以实现过滤。
作者: j_cle    时间: 2015-11-19 17:16
回复 13# woxizishen


    对的,我现在做的事情就是你说的这些,而且要把邮件网关也就是过滤器单独拿出来布置在邮件服务器的前端,实现对发送和接收邮件的过滤,之后再转发给邮件服务器; 那按照您的意思是我还需要给邮件网关配置一个域名是吧?
比如现在的邮件服务器域名是 a.com , 邮件网关的域名是b.com ,那之后整个的流程就是
______________________________________
邮件-》b.com 过滤转发-》 a.com, 必须使用两个域名才能实现这两个服务器的互通吧?
作者: woxizishen    时间: 2015-11-19 18:15
回复 14# j_cle


你首先要申请一个顶级域名,然后告诉域名提供商你要自己架设dns服务器,域名提供商会给你做相关处理。比方:

你申请到一个ABC.COM域名,然后你自己又架设了一个dns服务器。那么你只需要在这个自己架设dns服务器上,增加多个子域名。
比如AAA.ABC.COM或BBB.ABC.COM。只要你的DNS服务器联入了互联网,大家都可以找到你的AAA.ABC.COM的子域名可懂,不需要再申请多个。除非你变更了顶级域名
作者: j_cle    时间: 2015-11-19 22:50
回复 15# woxizishen


    那按照您的意思就是要实现邮件服务器和过滤网关之间的通信,需要分别给这两个服务器分配子域名是吧?  比如AAA.ABC.com  (邮件服务器)  BBB.ABC.com(过滤网关)之后在这两个子域名之间实现邮件的转发是么
作者: woxizishen    时间: 2015-11-20 08:11
回复 16# j_cle

分配域名主要是让外界如何投递邮箱给你,你域名别人都查询不到,怎么投邮件给你,别人的邮件服务器还像人工那样给你打个电话,告诉我你的邮件服务器的ip是多少。
邮件服务器域名中最重要的一个记录就是MX记录。
当然没有这个MX记录一样可以投递邮件。但是那必须别人知道你的IP地址,然后配置MTA,针对你的ip进行投递,你说不大可能吧,指定ip投递的情况一般是我们自己内部邮件服务器针对某些域名来调整投递方式的,即要不要经过网关或者是直接投递到另外一个邮件服务器等等情况。比如台湾总公司投递到大陆分公司邮件服务器的邮件,你要他经过外层网关过滤,再进到内部,那就很有可能有些正常邮件会被误判或者域名不正常时候,无法投递邮件,所以我们为了规避这些问题,为了保证通信99.9%稳定,那么总公司邮件服务器只要设定直接投递到大陆分公司的某个邮件服务器上(ip)即可,而大陆分公司也可针对台湾总公司或其他分公司进行ip直接投递,这样中间需要再架设一台邮件服务器中转。这样整个邮件架构会相当复杂,再和你讨论就有点头晕了。

一句话你如果要架设多台邮件服务器,你必须要保证别的MTA邮件服务器如何投递给你,不管是域名好还是ip好。域名的话大家就根本不需要知道你的ip,你发给他,他也能够发回给你,
如果是ip直接投递的话,你的这个邮件服务器的域名又无法解析,那么对方邮件服务器就得设定投递给你的邮件服务器ip上。这样是否明白?
作者: j_cle    时间: 2015-11-20 08:48
回复 17# woxizishen


    明白了,非常感谢
作者: j_cle    时间: 2015-12-01 09:56
回复 5# woxizishen


    试了您说的这种方法,没有成功,没有看到出错的日志信息, 我在上面文件中更改的是
dddd.cn     smtp:[192.168.10.111]   
邮件并没有如想象的那样发往192.168.10.111啊。
作者: woxizishen    时间: 2015-12-01 13:47
回复 19# j_cle

sendmail.cf里面是否有这一行参数:
Kmailertable hash -o /etc/mail/mailertable.db


mailertable 加入一行修改过后,你还需重新生成mailertables.db资料库啊,他才是真正起作用的。


作者: j_cle    时间: 2015-12-02 13:39
本帖最后由 j_cle 于 2015-12-02 13:45 编辑

回复 20# woxizishen


    有的,


之后

makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable
makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
service sendmail restart

从outlook发邮件给服务器,中间的邮件代理网关现在是能收到邮件的


但是从邮件代理就没有再跟邮件服务器通信了,在邮件服务器上单独发送邮件测试正常,难道是因为我邮件代理网关和邮件服务器都开了 sendmail 和pop3 服务? 直接中间代理网关就把邮件给收了,没有中转到邮件服务器上?
作者: woxizishen    时间: 2015-12-02 16:36
本帖最后由 woxizishen 于 2015-12-02 16:46 编辑

回复 21# j_cle

中间代理如果只是转寄邮件到另外一台邮件服务器(MTA),不需要再配置pop3服务器。你的整个邮件架构思路是怎样的,我有点呗你弄混了,什么是从邮件服务器?

我的理解你是不是这样的


用户内部直接登录收发邮件的内部邮件服务器--------------------->中间过滤用并进行转发的邮件服务器------------------------------>最外层网关的邮件服务器。

如果你要配置某个域名邮件转发到中间的那台邮件服务器上,再由中间过滤后,再次转发到最外层网关的邮件服务器,你首先得在第一内部邮件服务器上进行配置转发,然后在中间过滤那台也要配置转发。你如果只配置了第一台,中间那台就把邮件收了哦,就不会再做转发了。
   
作者: j_cle    时间: 2015-12-02 17:22
回复 22# woxizishen


    可能是我没有说清楚,真实麻烦了,我的场景是这样的,
1,在用户和邮件服务器之间打算铺设一个邮件过滤的网关用户对用户发出的邮件在到达邮件服务器之前进行截获分析
2,用户发邮件时经过邮件过滤的网关对用户发的邮件进行分析,分析完之后邮件转发给邮件服务器,再由邮件服务器转发给内网用户或者外网用户
3,接收有件时再接从邮件服务器上通过pop3或者imap获取邮件
目前我在邮件过滤的网关和邮件服务器上都开了smtp和pop3以及imap的服务的,当从用户侧Outlook发邮件时,邮件会发到邮件过滤的网关,但是邮件网关没有向之前所说的转给邮件服务器;
另外从邮件服务器单独收发情况来看,只要收到邮件,Outlook是能够正常接收到邮件的;现在问题卡在了中间的转发环节上。


我在想是不是因为我邮件过滤的网关也开启了pop3和imap服务,直接把邮件给接收到了本地?
之后我关闭了这个服务,但是邮件还是没有被转发到邮件服务器上去。

问题还没有得到解决。
作者: woxizishen    时间: 2015-12-03 11:57
本帖最后由 woxizishen 于 2015-12-03 11:59 编辑

回复 23# j_cle

你们公司用户发邮件出去,你还要让他们经过过滤,哪有自己给自己设定过滤规则的啊。一般都是过滤外部进来公司的邮件呀。。。。

我看了你的大意,你现在规划就是下面这样的。
MUA(用户)-------->MTA1(中间邮件过滤)-------->MTA2(你所谓的最外层外网邮件服务器)。


你是不是整个逻辑弄错了呀,你要过滤也是放在最外层的外网邮件服务器上对外面进来的邮件进行过滤,MTA1应该是你们内部用户直接使用的邮件服务器,你却当做中间邮件过滤。 把用户使用的邮件服务器给丢到最外层,难怪你过滤邮件服务器不起作用。你最外层那台就是用户用来收发邮件的,当然不会再跑回到那台过滤邮件服务器啊。你好好理清下你的邮件架构。



正确的应该是这样,这样做的话,用户发一封邮件才可以先从MTA1转发到MTA2,由MTA2转发出去,外部进来的邮件,先必须经过MTA2过滤,没问题邮件就可以直接再转法到MTA1上。
MUA------------->MTA1(用户直接收发使用的邮件服务器)-------------->MTA2(最外层邮件过滤用的)

这样的话。MTA1要开启转发本地所有外发邮件到MTA2的功能,如果目的地址是本地域名的,邮件服务器不会做转发直接由MDA投递到本地,MTA2要开启转发本地域名邮件到MTA1的配置。

范例:
比如你公司邮件服务器域名为test.com。那么就要设个MX记录,让MX指定到你最外层的邮件过滤器上。这样别人外面投递邮件时候,会投到你最外层邮件服务器上而不是直接投递到你内部邮件服务器。
作者: j_cle    时间: 2015-12-04 14:16
回复 24# woxizishen


    恩,对的,可能我之前说的没有描述清楚,大体上的流程就是前面贴子上说的那张图,今天又搞了一上午,发现了几点问题:

1,邮件网关过滤器,开启了po3和imap的服务
2,在做转发的过程中过滤器 按照您的说法 要配置 在mailertable上配置 对应的域名要转发到的邮件服务器之外,还要在local-host-names 配置文件中禁用 所有的配置,保证不对此域名中的邮件进行接收
3,需要在access配置文件中添加 公网ip的relay

经过测试修改了以上几点之后,能达到预期效果:
经外网邮件发到的公司邮件服务器的,会首先经过邮件过滤网关进行处理,处理之后再转发给邮件服务器;
用户在MUA(OUTLOOK)上直接通过邮件服务器接收邮件。

——————————————————————————————————————
经过这么多坎坷,总算是将这个模型搭建完成了,余下的就是修修补补了,因为我自己的这个环境搭建条件有些简陋,可能会跟版主认为的有些小出入,等有时间,我再把详细的结构图和配置步骤贴上来,也给大家做个参考,
先谢过版主了






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2