点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
Extmail是目前国内长期坚持自主研发并开源的邮件系统,并且是国内唯一活跃开发的中文开源邮件系统软件,定位于免费用户 ,适合注重成本的企业、开发者等群体使用,满足正常邮件收发、多域名和Web文件管理等基本需求。最早诞生于 2004 年底,于 2005/9/18 正式发布。从最初的 WebMail 逐步发展成完整的邮件系统,并最早发布集成 ExtMail 的定制版 linux 系统 EMOS,极大地简化了繁杂的安装设定,将用户从大量源码包和杂乱的文档中解放出来。目前 ExtMail 重点面向国内中小企业,是 0 成本自建企业邮箱的最佳解决方案。由于 ExtMail 较符合国内用户的使用习惯,提供本土化的论坛 QQ 群等技术支持,满足稳定收发和基本管理的需求,受到社区和商业用户的欢迎。
01ExtMail 的优势与特点开源、免费,符合中国人习惯,使用不受限制;拥有自主著作权、产权,用户不必担心版权问题;安装简便,友善的全 Web 方式后台管理;丰富的增值模块,应对不同客户的需求;与 LisPush 手机电邮无缝对接,满足移动办公要求;提供 VPS 模板,利用 LisVP 云主机系统实现 1 分钟安装。
02安装操作系统,初始化配置环境1.1 配置正式环境CentOS7+LAMP(YUM install)(Postfix+cyrus-sasl+Dovecot+Extmail&Extman)1.2 物理机主机名:mail.ebarafoodssh.cnIP address:192.168.88.197Internet IP:210.22.180.100
03初始化环境关闭IPTABLES/SELINUX:yum -y groupinstall 'Development Libraries' 'Development Tools'yum install -y httpd httpd-devel php php-mysql mysql mysql-server mysql-devel openssl-devel dovecot perl-DBD-MySQL tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl libtool-ltdl-devel expect db4 db4-devel cyrus-sasl-* dovecot-mysql perl-CGIrpm -ivh ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/perl-Unix-Syslog-1.1-1.el6.rf.x86_64.rpmwget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/extras/RPMS/perl-GD-2.45-1.el6.rfx.x86_64.rpm(perl-GD 下载好后使用 yum localinstall 安装)3.1 安装postfix#service sendmail stop#chkconfig sendmail off#yum remove postfix#userdel postfix#groupdel postfix[root@mail ]# groupadd -g 2525 postfix[root@mail ]# useradd -g postfix -u 2525 -s sbin/nologin -M postfix[root@mail ]# groupadd -g 2526 postdrop[root@mail ]# useradd -g postdrop -u 2526 -s /bin/false -M postdroptar -zxvf postfix-2.6.5.tar.gzcd postfix-2.6.5make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ' 'AUXLIBS=-L/usr/lib64/mysql -lmysqlclient -lz -lm -L/usr/lib64/sasl2 -lsasl2 -lssl -lcrypto'(上面make根据系统来64和32lib地址不同,后面make可能会出错。)make && make install安装完成后,可以看到postfix提示生成别名二进制文件:#newaliases启动时一定注意文件权限,用户的UID和GID都是新建和指定的。安装后目录初始配置install_root: [/]tempdir: [/home/soft/postfix-2.6.5]config_directory: [/etc/postfix]command_directory: [/usr/sbin]daemon_directory: [/usr/libexec/postfix]data_directory: [/var/lib/postfix]html_directory: [no]mail_owner: [postfix]mailq_path: [/usr/bin/mailq.postfix]manpage_directory: [/usr/share/man]newaliases_path: [/usr/bin/newaliases.postfix]queue_directory: [/var/spool/postfix]readme_directory: [/usr/share/doc/postfix-2.6.6/README_FILES]sendmail_path: [/usr/sbin/sendmail.postfix]setgid_group: [postdrop]3.2 修改postfix配置vim /etc/postfix/main.cfmynetworks = 127.X.X.1为postfix开户基于cryus-sasl的认证功能。查看否支持cyrus风格的sasl认证:# postconf -acyrus <---- 出现此提示说明支持 sasl 认证dovecot添加以下内容:#vim /etc/postfix/main.cf############################CYRUS-SASL############################broken_sasl_auth_clients = yessmtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destinationsmtpd_sasl_auth_enable = yessmtpd_sasl_local_domain = $myhostnamesmtpd_sasl_security_options = noanonymoussmtpd_sasl_application_name = smtpdsmtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!vim /usr/lib/sasl2/smtpd.conf添加如下内容:pwcheck_method: authdaemondlog_level: 3mech_list:PLAIN LOGINauthdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket3.3 新建 /etc/init.d/postfix#!/bin/bash## postfix Postfix Mail Transfer Agent## chkconfig: 2345 80 30# description: Postfix is a Mail Transport Agent, which is the program \# that moves mail from one machine to another.# processname: master# pidfile: /var/spool/postfix/pid/master.pid# config: /etc/postfix/main.cf# config: /etc/postfix/master.cf# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ $NETWORKING = "no" ] && exit 3[ -x /usr/sbin/postfix ] || exit 4[ -d /etc/postfix ] || exit 5[ -d /var/spool/postfix ] || exit 6RETVAL=0prog="postfix"start() {# Start daemons.echo -n $"Starting postfix: "/usr/bin/newaliases >/dev/null 2>&1/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"RETVAL=$?[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfixechoreturn $RETVAL}stop() {# Stop daemons.echo -n $"Shutting down postfix: "/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"RETVAL=$?[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfixechoreturn $RETVAL}reload() {echo -n $"Reloading postfix: "/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $"$prog reload"RETVAL=$?echoreturn $RETVAL}abort() {/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $"$prog abort"return $?}flush() {/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $"$prog flush"return $?}check() {/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $"$prog check"return $?}restart() {stopstart}# See how we were called.case "$1" instart)start;;stop)stop;;restart)stopstart;;reload)reload;;abort)abort;;flush)flush;;check)check;;status)status master;;condrestart)[ -f /var/lock/subsys/postfix ] && restart || :;;*)echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"exit 1esacexit $?为脚本添加权限并开机启动:[root@mail postfix]# chmod +x /etc/init.d/postfix[root@mail postfix]# chkconfig --add postfix[root@mail postfix]# chkconfig postfix on[root@mail postfix]# chown postfix.postfix -R /var/lib/postfix/[root@mail postfix]# chown postfix.postfix /var/spool/ -R3.4 安装Courier authentication library(Postfix链接Mysql数据库存放用户信息。)#wget http://jaist.dl.sourceforge.net/project/courier/authlib/0.70.0/courier-authlib-0.70.0.tar.bz2# tar xf courier-authlib-0.70.0.tar.bz2# cd courier-authlib-0.70.0# ./configure \--prefix=/usr/local/courier-authlib \--sysconfdir=/etc \--without-authpam \--without-authshadow \--without-authvchkpw \--without-authpgsql \--with-authmysql \--with-mysql-libs=/usr/lib64/mysql \--with-mysql-includes=/usr/include/mysql \--with-redhat \--with-authmysqlrc=/etc/authmysqlrc \--with-authdaemonrc=/etc/authdaemonrc \--with-mailuser=postfix# make && make install# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon# cp /etc/authdaemonrc.dist /etc/authdaemonrc# cp /etc/authmysqlrc.dist /etc/authmysqlrc# vim /etc/authdaemonrcauthmodulelist="authmysql" # 会支持很多认证方式,只保留authmysql即可。authmodulelistorig="authmysql"daemons=10 # 开户认证的进程数,也可以不用改,根据自己的情况。配置通过MySQL认证,修改/etc/authmysqlrc,其中2525,2525 为postfix 用户的UID和GID:[root@mail ~]# vim /etc/authmysqlrc[root@mail ~]# cat /etc/authmysqlrc|grep -v "^#"|grep -v "^$"MYSQL_SERVER localhostMYSQL_USERNAME postfixMYSQL_PASSWORD postfixMYSQL_PORT 3306MYSQL_OPT 0MYSQL_DATABASE postfixMYSQL_USER_TABLE mailboxMYSQL_CRYPT_PWFIELD passwordDEFAULT_DOMAIN ebarafoodssh.cnMYSQL_UID_FIELD '2525'MYSQL_GID_FIELD '2525'MYSQL_LOGIN_FIELD usernameMYSQL_HOME_FIELD concat('/var/mailbox/',homedir)MYSQL_NAME_FIELD nameMYSQL_MAILDIR_FIELD concat('/var/mailbox/',homedir)# cd /home/soft/courier-authlib-0.66.1/# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib# chmod 755 /etc/init.d/courier-authlib# chkconfig --add courier-authlib# chkconfig --level 2345 courier-authlib on# echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf# ldconfig -v# service courier-authlib start (启动服务)# chkconfig courier-authlib on新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:# mkdir –p /var/mailbox# chown -R postfix /var/mailbox配置SMTP 认证,编辑 /usr/lib64/sasl2/smtpd.conf:# vi /usr/lib64/sasl2/smtpd.confpwcheck_method: authdaemondlog_level: 3mech_list:PLAIN LOGINauthdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket配置虚拟域和虚拟用户并为postfix配置dovecot。# vim /etc/postfix/main.cf########################Virtual Mailbox Settings########################virtual_mailbox_base = /var/mailboxvirtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cfvirtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cfvirtual_alias_domains =virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cfvirtual_uid_maps = static:2525virtual_gid_maps = static:2525virtual_transport = virtualmaildrop_destination_recipient_limit = 10maildrop_destination_concurrency_limit = 10##########################QUOTA Settings########################message_size_limit = 14336000virtual_mailbox_limit = 20971520virtual_create_maildirsize = yesvirtual_mailbox_extended = yesvirtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cfvirtual_mailbox_limit_override = yesvirtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later.virtual_overquota_bounce = yes配置dovecot:# vim /etc/dovecot/dovecot.confprotocols = imap pop3 lmtpdisable_plaintext_auth = no# vim /etc/dovecot/conf.d/10-mail.confmail_location = maildir:/var/mailbox/%d/%n/Maildir# cp /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/auth-sql.conf# vim /etc/dovecot/conf.d/auth-sql.confpassdb {driver = sqlargs = /etc/dovecot-mysql.conf}userdb {driver = sqlargs = /etc/dovecot-mysql.conf}# vim /etc/dovecot-mysql.confdriver = mysqlconnect = host=localhost dbname=postfix user=postfix password=postfixdefault_pass_scheme = CRYPTpassword_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'# service dovecot start# chkconfig dovecot on3.5 安装Exmail(Extmail用于用户的登陆注册,发送接收邮件等。Extman是Extmain的管理工具,主要用于管理员来管理Extmail的信息,比如添加虚拟用,添加用户等)。下载地址:http://www.extmail.org/cgi-bin/download.cgi下载解压extmail:# tar zxvf extmail-1.2.tar.gz# mkdir -p /var/www/extsuite# mv extmail-1.2 /var/www/extsuite/extmail# cp /var/www/extsuite/extmail/webmail.cf.default /var/www/extsuite/extmail/webmail.cf修改Extmail的主配置文件:# vim /var/www/extsuite/extmail/webmail.cf部分修改选项的说明:
SYS_MESSAGE_SIZE_LIMIT = 5242880 用户可以发送的最大邮件;SYS_SESS_DIR = /tmp/extmail 用户的session保存的位置。
SYS_UPLOAD_TMPDIR = /tmp/extmail/uploadSYS_USER_LANG = en_US语言选项,可改作:SYS_USER_LANG = zh_CNSYS_MIN_PASS_LEN = 7 最短密码长度SYS_MAILDIR_BASE = /home/domains此处即为您在前文所设置的用户邮件的存放目录,可改作:SYS_MAILDIR_BASE = /var/mailboxSYS_MYSQL_USER = db_userSYS_MYSQL_PASS = db_pass以上两句用来设置连接数据库服务器所使用用户名、密码和邮件服务器用到的数据库,这里修改为:SYS_MYSQL_USER = postfixSYS_MYSQL_PASS = postfixSYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sockSYS_MYSQL_HOST = localhost指明数据库服务器主机名,这里默认即可。SYS_MYSQL_TABLE = mailboxSYS_MYSQL_ATTR_USERNAME = usernameSYS_MYSQL_ATTR_DOMAIN = domainSYS_MYSQL_ATTR_PASSWD = password以上用来指定验正用户登录里所用到的表,以及用户名、域名和用户密码分别对应的表中列的名称;这里默认即可。SYS_AUTHLIB_SOCKET = /var/spool/authdaemon/socket此句用来指明authdaemo socket文件的位置,这里修改为:SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket建立extmail的临时文件目录及session目录:# mkdir -p /tmp/extmail/upload# chown postfix.postfix -R /tmp/extmail/由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;如果apache打开了SUEXEC,需要配置suexec。# vim /etc/httpd/conf/httpd.confUser postfixGroup postfix#LoadModule suexec_module modules/mod_suexec.so # 注释掉,关闭suexec#DocumentRoot "/var/www/html" # 关闭中心主机,开户虚拟主机建立Extmail虚拟主机配置文件:# vim /etc/httpd/conf.d/extmail.conf
04安装maildrop-2.0.2maildrop是一个使用C++编写的用来代替本地MDA的带有过滤功能邮件投递代理,是courier邮件系统组件之一。它从标准输入接受信息并投递到用户邮箱;maildrop既可以将邮件投递到mailboxes格式邮箱,亦可以将其投递到maildirs格式邮箱。同时,maildrop可以从文件中读取入站邮件过滤指示,并由此决定是将邮件送入用户邮箱或者转发到其它地址等。和procmail不同的是,maildrop使用结构化的过滤语言,因此,邮件系统管理员可以开发自己的过滤规则并应用其中。我们在此将使用maildrop来代替postfix自带的MDA,并以此为基础扩展后文的邮件杀毒和反垃圾邮件功能的调用;在此可能会修改前文中的许多设置,请确保您的设置也做了相应的修改。4.1 安装将courier-authlib的头文件及库文件链接至/usr目录(编译maildrop时会到此目录下找此些相关的文件):# ln -sv /usr/local/courier-authlib/bin/courierauthconfig /usr/bin# ln -sv /usr/local/courier-authlib/include/* /usr/includemaildrop需要pcre的支持,因此,接下来将首先安装pcre:# tar jxvf pcre-7.3.tar.bz2# cd pcre-7.3# ./configure# make# make check# make install# tar jxvf maildrop-2.0.2.tar.bz2# cd maildrop-2.0.2# ./configure --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root vuser' --enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=1000 --enable-maildrop-gid=1000 --with-trashquota --with-dirsync# make# make install检查安装结果,请确保有"Courier Authentication Library extension enabled."一句出现:# maildrop -vmaildrop 2.0.2 Copyright 1998-2005 Double Precision, Inc.GDBM extensions enabled.Courier Authentication Library extension enabled.Maildir quota extension enabled.This program is distributed under the terms of the GNU General PublicLicense. See COPYING for additional information.4.2 新建其配置文件/etc/maildroprc文件,首先指定maildrop的日志记录位置:# vi /etc/maildroprc添加如下内容:logfile "/var/log/maildrop.log"# touch /var/log/maildrop.log# chown vuser.vgroup /var/log/maildrop.log4.3 配置Postfix编辑master.cf:# vi /etc/postfix/master.cf启用如下两行:maildrop unix - n n - - pipeflags=DRhu user=vuser argv=/usr/local/bin/maildrop -d ${recipient}注意:定义transport的时候,即如上两行中的第二行,其参数行必须以空格开头,否则会出错。设置postfix开机启动:# echo "/usr/sbin/postfix start">>/etc/rc.local报错。如果出现如下错误:Undefined subroutine &Ext::Utils::sort2name called at /var/www/extsuite/extmail/libs/Ext/App/Folders.pm line 387.解决办法:[root@node1 Ext]# cd /var/www/extsuite/extmail/libs/Ext[root@node1 Ext]# cp Utils.pm /var/www/extsuite/extman/libs/[root@node1 Ext]# cd /var/www/extsuite/extman/libs/Ext[root@node1 Ext]# mv Utils.pm ManUtils.pm[root@node1 Ext]# /var/www/extsuite/extmail/dispatch-init stop[root@node1 Ext]# /var/www/extsuite/extmail/dispatch-init startEND
本文作者:王小峰(上海新炬王翦团队)本文来源:“IT那活儿”公众号