centos7.2下搭建postfix++dovecot+courier-authlib+extmail邮件收发系统
以前搭建过一次,由于不熟悉,断断续续折腾了半个月
在此记录一下,搭建全过程使用root账号,中间有一些错误调试的,都给忽略了,这里只给出最的配置
在文章最后面会有一些错误调试的记录
#########################################
整个 extmail邮件系统,是由多个软件构成的:
ExtMan Web帐户管理后台(含mailgraph_ext 图形日志分析) ,web管理
ExtMail WebMail(perl 程序) ,web支持
Postfix SMTP服务器,邮件传输代理(MTA) ,收发邮件
Maildrop 邮件投递代理(MDA)
Courier-imap IMAP和POP3 服务器
Cyrus-sasl2 标准的SASL实现库,可以支持Courier Cyrus SMTP认证库
Courier-authlib 负责courier-imap,maildrop的认证 Courier 数据认证库(mysql)
MySQL 数据库,储存虚拟(域|用户|别名)等信息.
################################
postfix: 收发邮件
dovecot: 投递邮件
courier-authlib: 身份验证
mysql 存储账号信息
extmail: web支持
extman: web管理
#################################
主要就是安装几个大块的软件:
- 数据库
- postfix
- courier-authlib
- dovecot
- extmai+extman
系统版本:
#cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
#uname -a
Linux HOST_107_centos 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
准备工作:
[root@HOST_107_centos ~]# getenforce
Disabled
这里如果不是 Disabled , 可以用setenfore=0命令把它设置为Disabled
centos 7.2 默认是不直接用iptables的,我这里开了firewalld 服务,所以直接把端口给开了
[root@HOST_107_centos ~]# firewall-cmd --add-port=110/tcp
[root@HOST_107_centos ~]# firewall-cmd --add-port=110/tcp --permanent
[root@HOST_107_centos ~]# firewall-cmd --add-port=25/tcp
[root@HOST_107_centos ~]# firewall-cmd --add-port=25/tcp --permanent
--permanent 参数是为了使firewalld重启之后,这两条规则依然生效,如果不执行带--permanent参数的命令,重启firewalld 之后,这两条命令就无效了
一.安装数据库:
#yum -y install mariadb.x86_64 mariadb-server.x86_64 mariadb-devel.x86_64
由于CentOS7.2的系统没有mysql数据库了,安装mariadb,不行后面再换(到最后发现mariadb也是可以用的,没什么影响)
启动数据库:
[root@HOST_107_centos mailbox]# service mariadb start
Redirecting to /bin/systemctl start mariadb.service
[root@HOST_107_centos mailbox]#
检查数据库是否启动成功,发现OK了,进程如下:
[root@HOST_107_centos mailbox]# ps aux | grep mysql
mysql 22791 0.0 0.0 9512 1500 ? Ss 14:48 0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql 22947 2.1 1.1 920572 95864 ? Sl 14:48 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root 22984 0.0 0.0 112660 960 pts/0 R+ 14:48 0:00 grep --color mysql
登录数据库:
[root@HOST_107_centos mailbox]# mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.52-MariaDB MariaDB Server
MariaDB [mysql]> delete from user where host like 'vm%';
Query OK, 2 rows affected (0.00 sec)
MariaDB [mysql]> delete from user where host='localhost' and user='root';
Query OK, 1 row affected (0.00 sec)
MariaDB [mysql]> delete from user where host='::1' and user='root';
Query OK, 1 row affected (0.00 sec)
MariaDB [mysql]> delete from user where host='localhost' and password='';
Query OK, 1 row affected (0.00 sec)
MariaDB [mysql]> update user set password=password('ppppp902') where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
上面的操作删除了一些无用的账号,给剩下的root账号设置密码,改了之后只能这样# mysql -u root -p -h 127.0.0.1 用密码登录
安装一些必须的插件和库:
# yum install gcc gcc-c++ openssl openssl-devel db4-devel ntpdate bzip2 php-mysql cyrus-sasl-md5 perl-GD perl-DBD-MySQL perl-GD perl-CPAN perl-CGI perl-CGI-Session cyrus-sasl-lib cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel libtool-ltdl-devel telnet mail libicu-devel -y
卸载系统自带的postfix:yum remove postfix
添加用户和组:
groupadd -g 2525 postfix
useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
groupadd -g 2526 postdrop
useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop
这里把用户id和组id设置为2525和2526是因为后面的extman/webman.cf, postfix/main.cf这两个文件默认都用了这两个数字,不用改来改去那么麻烦
二.解压安装postfix:
tar xf postfix-3.2-20160327.tar.gz
cd postfix-3.2-20160327
安装之前先看一下目录下面有没有对应的头文件和库文件, makefile的时候要用到,如果没有这些文件,编译安装会出错的:
[root@HOST_107_centos postfix-3.2-20160327]# ls /usr/include/mysql/
auth_dialog_client.h ma_dyncol.h my_config_x86_64.h my_net.h mysql_time.h plugin_auth.h service_logger.h sql_common.h
client_plugin.h m_ctype.h my_dbug.h my_pthread.h mysql_version.h plugin_ftparser.h service_my_snprintf.h sql_state.h
decimal.h m_string.h my_decimal_limits.h mysql_com.h my_sys.h plugin.h service_progress_report.h sslopt-case.h
errmsg.h my_alloc.h my_dir.h mysqld_ername.h my_valgrind.h private services.h sslopt-longopts.h
handler_ername.h my_attribute.h my_getopt.h mysqld_error.h my_xml.h psi service_thd_alloc.h sslopt-vars.h
handler_state.h my_compiler.h my_global.h mysql_embed.h plugin_audit.h service_debug_sync.h service_thd_wait.h typelib.h
keycache.h my_config.h my_list.h mysql.h plugin_auth_common.h service_kill_statement.h service_thread_scheduler.h
[root@HOST_107_centos postfix-3.2-20160327]#
[root@HOST_107_centos postfix-3.2-20160327]# ls /usr/include/sasl/
hmac-md5.h md5global.h md5.h prop.h sasl.h saslplug.h saslutil.h
[root@HOST_107_centos postfix-3.2-20160327]#
[root@HOST_107_centos postfix-3.2-20160327]# ls /usr/lib64/mysql/
INFO_BIN INFO_SRC libmysqlclient_r.so libmysqlclient.so libmysqlclient.so.18 libmysqlclient.so.18.0.0 mysqlbug mysql_config plugin
[root@HOST_107_centos postfix-3.2-20160327]#
[root@HOST_107_centos postfix-3.2-20160327]# ls /usr/lib64/sasl2/
libanonymous.so libanonymous.so.3.0.0 libcrammd5.so.3 libdigestmd5.so libdigestmd5.so.3.0.0 liblogin.so.3 libplain.so libplain.so.3.0.0 libsasldb.so.3
libanonymous.so.3 libcrammd5.so libcrammd5.so.3.0.0 libdigestmd5.so.3 liblogin.so liblogin.so.3.0.0 libplain.so.3 libsasldb.so libsasldb.so.3.0.0
[root@HOST_107_centos postfix-3.2-20160327]#
postfix编译和安装(这里-I指定的头文件和库,就是上面ls查看的那些,像mysql这些如果手动安装指定了不同的目录,这里要用-I指定对应的目录才行):
[root@HOST_107_centos postfix-3.2-20160327]#make 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 -lrt -lm -L/usr/lib64/sasl2 -lsasl2 -lssl –lcrypto'
[root@HOST_107_centos postfix-3.2-20160