序言
博主搭建短信服务器采用了如下几大组件:
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
# 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 ####################
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
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编辑:刘遄,审核员:暂无