CentOS6.8搭建邮件服务器与详细配置

版权声明:转载请标明出处! https://blog.csdn.net/weixin_38642130/article/details/85941933

前言

博主搭建邮件服务器采用了如下几大组件:
postfix+courier-authlib+maildrop+extmail+cyrus-sasl+courier-imap

Postfix

postfix的产生是为了替代传统的sendmail。相较于sendmail,postfix在速度。性能和稳定性上都更胜一筹。如今眼下许多的主流邮件服务事实上都在采用postfix。当我们须要一个轻量级的的邮件server时,postfix不失为一种选择。

Courier-Authlib

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

maildrop

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

extmail

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

SASL

SASL的英文全称是Simple Authentication and Security Layer,即简单验证和安全层。SMTP 协议并没有提供用户验证功能,很容易匿名中转邮件。即使限制了可以转发的网段,也不安全。他的定义是: a method for adding authentication support to connection-based protocols,为基于连接的协议提供认证功能。SASL是一个胶合(glue)库,通过这个库把应用层 与 形式多样的认证系统整合在一起。这有点类似于PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。

Courier IMAP

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

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 libtool-ltdl libtool-ltdl-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"
安装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/lib64/
$ 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
<VirtualHost *:80>
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
</VirtualHost>
#################### stop ####################
$ service httpd restart
备注1:

上述导入初始化SQL时,默认的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 [email protected] extmail
Authentication succeeded.
 Authenticated: [email protected]  (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的正确安装,数据库也正确导入,courier-authlib能正确连接到mysql数据库。
最后访问http://mail.wege.com/extmail/,如无意外,将看到webmail的登陆页。如果报错,请参考https://www.cnblogs.com/linux-super-meng/p/3840347.html这篇文章解决。
访问http://mail.wege.com/extman/添加用户,extman的默认超级管理员帐户:[email protected],初始密码: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

测试发件

  1. 访问http://mail.wege.com/extman/,添加邮箱用户,extman的默认超级管理员帐户:[email protected],初始密码:extmail*123*
  2. 访问http://mail.wege.com/extmail/,使用新建的账号登录邮箱,测试发件
  3. 如发送或者接收失败,可以查看日志 /var/log/maillog 进行排错

参考链接:
1、Linux下开源邮件系统Postfix+Extmail+Extman环境部署记录
https://www.cnblogs.com/kevingrace/p/9383993.html
2、linux下extmail服务的搭建
https://www.cnblogs.com/linux-super-meng/p/3840347.html
3、postfix各类故障详细分析与解决
http://blog.51cto.com/linuxroad/999743
4、centos extmail 安装 记录
https://sinykk.iteye.com/blog/1030270

源码包下载链接:https://download.csdn.net/download/weixin_38642130/10900172

猜你喜欢

转载自blog.csdn.net/weixin_38642130/article/details/85941933