序言

博主搭建短信服务器采用了如下几大组件:

postfix+courier-authlib+maildrop+extmail+cyrus-sasl+courier-imap

Postfix

postfix的形成是为了取代传统的sendmail。相较于sendmail,postfix在速率。性能和稳定性上都更胜一筹。现在眼下许多的主流短信服务事实上都在采用postfix。当我们需要一个轻量级的的电邮server时,postfix不失为一种选择。

Courier-Authlib

Courierauthenticationlibrary为其他Courier应用程序提供验证服务。

maildrop

具有过滤功能的电邮投递代理(MDA)。

extmail

Extmail是一个以perl语言编撰,面向大容量/ISP级应用,免费的高性能Webmail软件,主要包括ExtMail、Extman两个部份的程序套件。

SASL

SASL的英语全称是SimpleAuthenticationandSecurityLayer,即简单验证和安全层。SMTP合同并没有提供用户验证功能,很容易匿名中转电邮。虽然限制了可以转发的网关,也不安全。他的定义是:amethodforaddingauthenticationsupporttoconnection-basedprotocols,为基于联接的合同提供认证功能。SASL是一个胶合(glue)库,通过这个库把应用层与方式多样的认证系统整合在一起。这有点类似于PAM,然而前者是认证方法,决定哪些人可以访问哪些服务,而SASL是认证过程,着重于信任构建过程,这个过程可以调用PAM来构建信任关系。

CourierIMAP

CourierIMAPserver是使用Maildir储存格式的高速,可扩充,企业级IMAP服务器。许多E-mail提供商使用CourierIMAPserver来处理几十万的电邮用户,使用它完善IMAP和POP3集合代理,可以说CourierIMAPserver简直具有无限的水平扩充能力。在代理配置环境中,一些Courier服务器提供IMAP和POP3服务,它们等待顾客端登录恳求,查找并操作电邮用户的mailbox,与服务器构建代理联接centos安装邮件服务器,所有的这种操作都在一个单独的,无缝联接的进程中。

Courier-IMAP主要特征:

-精巧而高效;

-提供多种用户认证模块和方法;

-支持虚拟邮箱;

-可限制IMAP同时登陆的总数量及同一个IP地址同时登陆的数量,能有效保护系统在遭到拒绝服务(Denial-of-service)功击时不致因超员而截瘫;

安装依赖预装环境

$ yum install -y gcc gcc-c++
修改实验主机和客户端的hosts文件,将mail.wege.com指向实验主机的IP地址。
mail.wege.com 192.168.100.68
上传源码包到/usr/local/software目录下,获取源码包方式文章结尾有说明。

安装apache和mysql

$ yum install -y httpd mysql mysql-server mysql-devel
编辑配置文件,修改如下配置项
$ vim /etc/httpd/conf/httpd.conf 
#################### start ####################
ServerName 127.0.0.1:80
#################### stop ####################
$ service httpd start
$ service mysqld start
$ /usr/bin/mysqladmin -u root password '123456'
加入开机启动项
$ chkconfig --add httpd 
$ chkconfig httpd on
$ chkconfig --add mysqld 
$ chkconfig mysqld on

安装postfix

Centos6默认安装了postfix,所以要先进行卸载。
$ yum remove postfix
$ yum install -y postfix
$ cd /etc/postfix
$ postconf -n > /etc/postfix/main2.cf
$ mv main.cf main.cf_def
$ mv main2.cf main.cf
编辑main.cf文件,加入如下内容
$ vi main.cf
#################### start ####################
# hostname
mynetworks = 127.0.0.1
myhostname = mail.wege.com
mydomain = wege.com
mydestination = $mynetworks $myhostname
# banner
mail_name = Postfix - by wege.com
smtpd_banner = $myhostname ESMTP $mail_name

邮件服务器的安装与配置_centos安装邮件服务器_centos邮件服务器搭建

# response immediately smtpd_error_sleep_time = 0s # Message and return code control message_size_limit = 5242880 mailbox_size_limit = 5242880 show_user_unknown_table_name = no # Queue lifetime control bounce_queue_lifetime = 1d maximal_queue_lifetime = 1d #################### stop #################### 加入开机启动项 $ service postfix start $ chkconfig --add postfix $ chkconfig postfix on

安装courier-authlib安装courier-unicode

$ yum -y install expect perl-DBD-MySQL tcl tcl-devel libart_lgpl libart_lgpl-devel gdbm gdbm-devel
$ cd /usr/local/software/
$ tar -jxvf courier-unicode-2.1.tar.bz2 
$ cd courier-unicode-2.1
$ ./configure && make && make install && echo "say ok"

安装libtool

$ cd ..
$ tar -jxvf libtool-2.2.6b.tar.bz2
$ cd libtool-2.2.6b
$ ./configure && make && make install 

安装courier-authlib

$ cd ..
$ tar -jxvf courier-authlib-0.69.0.20181018.tar.bz2 
$ cd courier-authlib-0.69.0.20181018
$  ./configure --sysconfdir=/etc/authlib --with-authmysqlrc=/etc/authlib/authmysqlrc --with-authdaemonrc=/etc/authlib/authdaemonrc --with-authdaemonvar=/var/spool/authdaemon --with-ltdl-lib=/usr/local/lib --with-ltdl-include=/usr/local/include/ --without-stdheaderdir --without-authuserdb --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --without-authcustom --with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-redhat
$ make && make install && echo "say ok"

配置courier-authlib

加入系统服务
$ cp courier-authlib.sysvinit /etc/init.d/courier-authlib
$ chmod 755 /etc/init.d/courier-authlib
$ chmod 755 /var/spool/authdaemon/
$ cd /etc/authlib/
$ cp authdaemonrc.dist authdaemonrc
新建authmysqlrc配置文件
$ vim authmysqlrc
#################### start ####################
##VERSION: $Id: 01c3b327e4d5b8f4123500ce4c8d0ef7a690c10d-20160418083235$
##NAME: LOCATION:0
MYSQL_SERVER		localhost
MYSQL_USERNAME		extmail
MYSQL_PASSWORD		extmail
##NAME: SSLINFO:0
##NAME: MYSQL_SOCKET:0
MYSQL_SOCKET		/var/lib/mysql/mysql.sock
##NAME: MYSQL_PORT:0
MYSQL_PORT		3306
##NAME: MYSQL_OPT:0
MYSQL_OPT		0
##NAME: MYSQL_DATABASE:0
MYSQL_DATABASE		extmail
#NAME: MYSQL_CHARACTER_SET:0
##NAME: MYSQL_USER_TABLE:0
MYSQL_USER_TABLE	mailbox
##NAME: MYSQL_CRYPT_PWFIELD:0
MYSQL_CRYPT_PWFIELD	password
##NAME: MYSQL_CLEAR_PWFIELD:0
##NAME: MYSQL_DEFAULT_DOMAIN:0
##NAME: MYSQL_UID_FIELD:0
MYSQL_UID_FIELD		uidnumber
##NAME: MYSQL_GID_FIELD:0
MYSQL_GID_FIELD		gidnumber
##NAME: MYSQL_LOGIN_FIELD:0
MYSQL_LOGIN_FIELD	username
##NAME: MYSQL_HOME_FIELD:0
MYSQL_HOME_FIELD	homedir
##NAME: MYSQL_NAME_FIELD:0
MYSQL_NAME_FIELD	name
##NAME: MYSQL_MAILDIR_FIELD:0
MYSQL_MAILDIR_FIELD	maildir
##NAME: MYSQL_DEFAULTDELIVERY:0
##NAME: MYSQL_QUOTA_FIELD:0
MYSQL_QUOTA_FIELD	quota
##NAME: MYSQL_AUXOPTIONS:0
##NAME: MYSQL_WHERE_CLAUSE:0
##NAME: MYSQL_SELECT_CLAUSE:0
MYSQL_SELECT_CLAUSE     SELECT username,password,"",uidnumber,gidnumber,
                        CONCAT('/home/domains/',homedir),               
                        CONCAT('/home/domains/',maildir),               
                        quota,                                          
                        name                                            
                        FROM mailbox                                    
                        WHERE username = '$(local_part)@$(domain)'
##NAME: MYSQL_ENUMERATE_CLAUSE:1
##NAME: MYSQL_CHPASS_CLAUSE:0
##NAME: MARKER:0
#################### stop ####################
加入开机启动项
$ service courier-authlib start
$ chkconfig --add courier-authlib
$ chkconfig courier-authlib on

安装maildrop安装maildrop

新建用户
$ groupadd vgroup -g 1000
$ useradd vuser -u 1000 -g vgroup -d /home/domains -s /bin/true
$ chmod -R 700 /home/domains
$ yum install -y pcre pcre-devel libidn libidn-devel
$ cd /usr/local/software
$ tar -jxvf maildrop-3.0.0.tar.bz2 
$ cd maildrop-3.0.0
$ ./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 && echo "say ok"

配置maildrop

1)编辑master.cf文件如下所示
$ vim /etc/postfix/master.cf 
#################### start ####################
maildrop        unix    -       n       n       -       -       pipe
  flags=DRhu user=vuser argv=/usr/local/bin/maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}
#################### stop ####################
2)编辑main.cf配置文件,加入如下项
$ vim /etc/postfix/main.cf
#################### start ####################
maildrop_destination_recipient_limit = 1
#################### stop ####################
$ cp /usr/local/lib/libcourier-unicode.so.4 /usr/lib
$ ldconfig 
$ maildrop -v
maildrop 2.1.0 Copyright 1998-2005 Double Precision, Inc.
GDBM/DB extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.

安装extmail安装extmail

$ cd /usr/local/software/
$ tar -zxvf extmail-1.2.tar.gz 
$ mkdir /var/www/extsuit
$ mv extmail-1.2 /var/www/extsuite/extmail
$ cd /var/www/extsuite/extmail/
$ cp webmail.cf.default webmail.cf
编辑配置项如下所示
$ vim webmail.cf
#################### start ####################
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
#################### stop ####################
$ chown -R vuser:vgroup cgi

安装extman

$ cd /usr/local/software/
$ tar -zxvf extman-1.1.tar.gz 
$ mv extman-1.1 /var/www/extsuite/extman
$ cd /var/www/extsuite/extman
$ cp webman.cf.default  webman.cf
$ chown -R vuser:vgroup cgi/
$ cd docs
$ cp mysql_virtual_* /etc/postfix/
增加以下内容:
$ vi /etc/postfix/main.cf
#################### start ####################
# extmail config here
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = maildrop:
#################### stop ####################
$ mv init.sql init.sql_def
$ sed 's/extmail.org/wege.com/g' init.sql_def > init.sql
$ mysql -uroot -p123456 < extmail.sql 
$ mysql -uroot -p123456 <init.sql
$ mkdir /tmp/extman
$ chown -R vuser:vgroup /tmp/extman

配置apache

$ cd /etc/httpd/conf
编辑apache配置文件,在底部添加如下两句话
$ vim httpd.conf
#################### start ####################

邮件服务器的安装与配置_centos邮件服务器搭建_centos安装邮件服务器

NameVirtualHost *:80 Include conf/vhost_*.conf #################### stop #################### $ vim vhost_extmail.conf #################### start #################### # VirtualHost for ExtMail Solution ServerName mail.wege.com DocumentRoot /var/www/extsuite/extmail/html/ ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/ Alias /extmail /var/www/extsuite/extmail/html/ ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/ Alias /extman /var/www/extsuite/extman/html/ # Suexec config SuexecUserGroup vuser vgroup #################### stop #################### $ service httpd restart

备注1:

上述导出初始化SQL时linux 安装,默认的uidnumber/gidnumber都是1000,这和vuser:vgroup的uid/gid一致,是由于maildrop投递时会从数据库里取uidnumber/gidnumber,而在master.cf里早已定义好了投递时的运行身分(vuser:vgroup),所以这两个数组的内容必须为1000,否则将出现投递错误,比如报0x06等错误。

备注2:

MYSQL5.5.x版本不支持TYPE=MyISAM这样的句子,请执行以下后,再导出数据库。

$sed-i`s/TYPE=MyISAM/ENGINE=MyISAM/g`extmail.sql

$ /usr/local/software/courier-authlib-0.69.0.20181018/authtest -s login postmaster@wege.com extmail
Authentication succeeded.
 Authenticated: postmaster@wege.com  (uid 1000, gid 1000)
Home Directory: /home/domains/wege.com/postmaster
       Maildir: /home/domains/wege.com/postmaster/Maildir/
         Quota: 104857600S
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
Cleartext Password: extmail
           Options: (none)

这样表明extman的正确安装redhat linux 9.0下载,数据库也正确导出,courier-authlib能正确联接到mysql数据库。

最后访问,如无意外,将见到webmail的登入页。假如报错,请参考这篇文章解决。

访问添加用户,extman的默认超级管理员账户:,初始密码:extmail*123*,登录成功后,建议将密码更改,以确保安全。

安装cyrus-sasl

$ yum install -y cyrus-sasl cyrus-sasl-plain
编辑main.cf配置文件,增加以下内容
$ vim /etc/postfix/main.cf
#################### start ####################
# smtpd related config
smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_non_fqdn_hostname,
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unauth_destination,
        reject_unauth_pipelining,
        reject_invalid_hostname,
# SMTP sender login matching config
smtpd_sender_restrictions =
        permit_mynetworks,
        reject_sender_login_mismatch,
        reject_authenticated_sender_login_mismatch,
        reject_unauthenticated_sender_login_mismatch

邮件服务器的安装与配置_centos邮件服务器搭建_centos安装邮件服务器

smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_sender_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_maps.cf # SMTP AUTH config here broken_sasl_auth_clients = yes smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous #################### stop #################### 编辑smtpd.conf文件,确保其内容如下所示 $ vim /usr/lib64/sasl2/smtpd.conf #################### start #################### pwcheck_method: authdaemond log_level: 3 mech_list: PLAIN LOGIN authdaemond_path:/var/spool/authdaemon/socket #################### stop #################### $ /etc/init.d/postfix restart

安装courier-imap安装courier-imap

$ cd /usr/local/software/
$ tar -jxvf courier-imap-4.7.0.tar.bz2 
$ cd courier-imap-4.7.0
$ ./configure --enable-unicode --disable-root-check --with-trashquota
$ make && make install && make install-configure && echo "say ok"

配置安装courier-imap

$ cp courier-imap.sysvinit /etc/init.d/courier-imap
$ chmod +x /etc/init.d/courier-imap
$ cd /usr/lib/courier-imap/etc/
$ cp imapd.dist  imapd
$ cp imapd-ssl.dist imapd-ssl
$ cp pop3d.dist pop3d
$ cp pop3d-ssl.dist pop3d-ssl
如下修改配置项 
$ vim pop3d
#################### start ####################
POP3DSTART=YES
#################### stop ####################
$ vim pop3d-ssl
#################### start ####################
POP3DSSLSTART=YES
#################### stop ####################
加入开机启动项
$ service courier-imap start
$ chkconfig --add courier-imap
$ chkconfig courier-imap on

测试发件访问,添加邮箱用户,extman的默认超级管理员账户:,初始密码:extmail*123*访问,使用新建的帐号登入邮箱,测试发件如发送或则接收失败centos安装邮件服务器,可以查看日志/var/log/maillog进行排错防踩坑

遇见过一个情况,频繁发电邮会造成短信发送失败,是由于数据库的长链接问题,把以下两个参数注释了即可。

#wait_timeout = 10
#interactive_timeout = 20

参考链接:

1、Linux下开源短信系统Postfix+Extmail+Extman环境布署记录

2、linux下extmail服务的搭建

3、postfix各种故障详尽剖析与解决

4、centosextmail安装记录

5、CentOS7下搭建postfix邮箱服务器并实现extmail的web访问

源码包下载链接:

本文原创地址://q13zd.cn/djgxyjfwqpyc.html编辑:刘遄,审核员:暂无