云计算 频道

开源项目在中小云计算平台的应用:邮件

  【IT168信息化】前言:开放源代码项目为中小企业快速搭建运营平台已经成为普遍的选择,在降低TCO总拥有成本同时,提供了很高的可订制扩展性。互联网各种云服务目前很大一部分流量来自于LAMP(这是一组开源项目的缩写:Linux一种开源操作系统,Apache一种开源互联网服务器,Mysql一种开源数据库,Php一种开源跨平台开发语言)技术支持的应用。本文结合在作者所在公司远程心电监护云健康服务平台的搭建和运维过程所实施的各个开源平台项目经验为更多中小企业实施开源项目集成整合提供一定的指引。

  本文使用的名词解释参考

  一、邮件系统

  1.1 邮件系统应用情况介绍

开源项目在中小云计算平台的应用:邮件
▲图2-1

  本方案使用Extmail开源邮件系统作为解决方案核心,在保障安全性方面采用基于SSL数字证书PKI公私密钥体系建立的安全传输协议SMTPS/POP3S/HTTPS,实现邮件客户端和服务器通讯加密,有效降低邮件泄密风险。在管理易用性方面通过authlib插件集成windows active directory用户登录认证,使用户邮件密码和操作系统密码统一,提高用户易用性和管理效率。在阻止垃圾邮件方面,在保障邮件到达率前提下充分利用各种过滤插件过滤垃圾邮件及病毒,同时自行开发邮件屏蔽监控插件,保障被屏蔽的正常邮件可以被及时发现解决。

  1.2 开源项目介绍

  1.2.1 项目介绍

  “ExtMail最初以WebMail软件为主,后逐步完善配套并形成了ExtMail邮件系统,提供完整的SMTP/POP/IMAP/Web和管理支持。”—摘自www.extmail.org。为本方案提供HTTP服务。

  Postfix是一个著名的邮件传输代理(MTA)软件,出自IBM Research,是一个功能类似Sendmail,内核完全不同的MTA,基于模块化,致力于快速、易管理、安全等特性开发。为本方案提供SMTP服务。

  Courier项目是一个集成多个组件的邮件解决方案,本方案以Courier-IMAP实现POP3服务,以Courier-Authlib实现用户身份查询验证服务。

  Courier-IMAP,IMAP邮件服务器软件,来自Courier开源邮件项目,提供IMAP邮件收取服务,同样可提供POP3服务,除Courier外这个组件也能应用于Postfix、Qmail、Exim等其他支持投递Maildir的邮件服务器。为本方案提供POP3服务。

  Courier-Authlib,Courier邮件系统的身份验证库,独立软件包,用于发送接收邮件时的用户身份验证。通过集成后端的windows active directory为SMTP/POP3/HTTP三项邮件功能提供身份查询验证服务,实现域账户统一认证。

  1.2.2 横向对比

  邮件系统的核心是MTA(Message Transfer Agent),本邮件系统的MTA基于Postfix,Postfix相比Sendmail和Qmail等其他开源MTA来说性价比更高。其安装配置简单灵活,模块化设计,配置文件少,管理方便;扩展性好,源自sendmail,扩展配置丰富,提供外部对接API/protocol;低消耗高效率,单一队列,磁盘I/O开销小,发送效率高。新浪、yahoo使用qmail,网易、搜狐等使用Postfix支撑百万甚至千万用户级别的商业运营也说明Postfix的稳定性足够高。

  应用特性对比参考视图(http://shearer.org/MTA_Comparison#How_To_Compare_MTAs )--by Dan Shearer

开源项目在中小云计算平台的应用:邮件

  由此表格可以看出Postfix相比其他MTA在文档及社区支持、示例、安全性、可管理性上有明显优势,因此Extmail选择Postfix作为MTA,为邮件应用系统提供有力支撑。

${PageNumber}

  1.3 本地化定制

  1.3.1 安全配置

  本方案安全配置基于PKI公私密钥体系,使用OpenSSL工具包里的CA根证书认证机制,实现自主签发CA根证书和服务器端证书以及客户端证书,未来根据安全性的进一步需求可以升级为第三方可信CA签发数字证书提供SSL协议加密传输的SMTPS/POP3S/HTTPS服务。

  首先用OpenSSL工具生成所需CA根证书及密钥,pop3需要单独的证书,可用mkpop3dcert生成,然后配置courier-imap、postfix使其支持pop3s和smtps。Web页面访问的https需要先拷贝CA根证书到apache证书目录,并加载ssl模块,如果想只用https访问邮件web页面可通过Redirect跳转实现。配置完成之后重启pop3d-ssl、postfix、apache服务。如果客户端没有安装根证书会出现类似如下警告


▲(web页面提示)


▲(outlook邮件客户端提示)

  1.3.2 集成Windows Active Directory 用户登录认证

  Windows域增强了企业计算机网络管理的安全与高效,extmail邮件系统也可以集成域用户的认证机制,加强邮件系统安全与易用性。集成的关键是authlib插件,extmail采用authlib来进行用户认证,我们可以让authlib改为查询windows AD域的账户完成认证。要做到这些需要在域上新建一个OU组存放所有邮件账户,配置authlib查询此账户组,并分别修改postfix、courier-imap、extmail的配置文件,具体配置请参考互联网相关项目的说明文档或联系笔者。这里对域控的安全性结合配置进行特别说明,结合本方案的实际使用情况,一旦主域发生故障需要在5分钟之内切换到备域登录,可通过一个ping脚本,取其5次ping结果,如果为零则自动修改authlib配置文件中的LDAP_URI值为备份登录域IP地址,将此脚本加入crond任务每5分钟执行一次,脚本里可再加一条判断语句,当主域恢复时再自动切换回去。

i=0
pingresult
=`ping -c 5 master domain ip |grep transmitted |awk '{print $4}' `
checkhost=`cat /etc/authlib/authldaprc |grep slave domain ip |awk '{print $1}' `

if [ "$pingresult" -eq 0 ]
  
then
    i
=$(expr $i + 1)
    echo $i
> /root/ldapcheck.log
    sed
-i 's/ master domain ip / slave domain ip /g' /etc/authlib/authldaprc
    sleep 2
    authdaemond restart
  
else
    
if [ $checkhost = LDAP_URI ]
      
then
      sed
-i 's/ slave domain ip / master domain ip /g' /etc/authlib/authldaprc
      sleep 2
      authdaemond restart

    fi
fi

  1.3.3 群发限制

  利用postfix配置规则限制特定用户(local_sender)发送邮件到特定本地邮件组(local_recipient)的权限。

smtpd_restriction_classes = local_only
local_only
= check_sender_access hash:/etc/postfix/local_sender,reject
smtpd_recipient_restrictions
=
        check_recipient_access hash:
/etc/postfix/local_recipient,
smtpd_sender_restrictions
=
    check_sender_access hash:
/etc/postfix/sender

  1.3.4 垃圾邮件策略及拒收邮件监控

  Postfix 支持很多扩展插件,包括slockd、amavisd-new、clamav、spamassassin、dspam等各种防垃圾、内容过滤、病毒查杀等插件,以slockd为例,slockd是基于SMTP行为识别为核心的反垃圾邮件软件,它通过加载执行不同的插件在SMTP会话阶段判断屏蔽垃圾邮件,效率较高,但误报率也高,通过关闭一些默认开启的插件可有效提高邮件通过率,比如针对国内邮件错误率较高的RBL、SPF等,对于那些必须保证通过的邮件,例如重要的合作伙伴等的邮件可通过开启白名单来控制误报。

  发送失败的邮件有退信可查看,但有些被错误拒绝的邮件没有邮件提醒,为及时了解被屏蔽邮件的情况,可通过脚本捕捉maillog日志中的reject语句,将这些信息存放于一个临时文件并定期将内容发送到管理员邮箱,为及时发现被“错误”阻止的邮件提供有效手段。

MAIL_COMMAND=/bin/mail
TOMAIL
="管理员mail地址"
TMPMAILBODY
=/root/mailreject.tmp

cat
/var/log/maillog | grep 'reject' |egrep -v 'rejected: User unknown|NOQUEUE: reject|rejected: not logged in|reject: RCPT from unknown |tac  >/root/mailreject.log  //tac表示后面几种排除掉,因为这些都是‘正常’错误
if [ `cat  /root/mailreject.log | wc -l` -gt 0 ]
then
echo
-e "-----------------------------alert-log------------------------------" >$TMPMAILBODY
while read line
do
echo
"$line" >>$TMPMAILBODY
echo
-e "\n------------------------------------------------------------\n" >>$TMPMAILBODY
done
</root/mailreject.log
$MAIL_COMMAND
-s " REJECT mail Alert" $TOMAIL <$TMPMAILBODY
fi

  收到的信息大概如下

  1.4 系统应用总结

  本方案现管理用户120人,每天发送接收邮件4000封左右,系统从开始正式运行到现在2年多,除正常升级停机外,至目前为止没有出现故障。


 

  作者介绍:

  ·Tony汤文志 目前供职于中卫莱康任系统研发部总监兼IT支持部总监10年无线互联网软件研发经验,曾供职于多家无线互联网企业包括华友世纪(Nasdq:HRAY),搜狐(Nasdq:SOHU)负责无线互联网研发工作,参与多个电信级的运营商无线增值平台的开发。2007年进入远程健康管理企业中卫莱康负责远程心电监护平台的研发和系统支持工作,在远程健康管理平台建设过程中应用各种开源项目,积极推动开源项目的推广使用,倡导中小企业优先应用开源项目搭建支撑平台。点击作者微博 博客 邮件 

  ·Frank 赵杰 目前供职于中卫莱康 任it支持经理 参与本文邮件方案和监控方案编写

 

1
相关文章