欢迎各位兄弟 发布技术文章
这里的技术是共享的
操作系统 | CentOS 5.6 | CentOS和RHEL是一样的,而且升级免费 |
邮件传输代理(MTA) | Postfix 2.6.2 | 最新 邮件系统主程序 |
WebMail 系统 | Extmail 1.1.0 | 支持多语言、全部模板化,功能基本齐全 |
Web 账户管理后台 | Extman 1.0.0 | 支持无限域名、无限用户 |
邮件投递代理(MDA) | maildrop 2.0.4 | 支持过滤和强大的功能 |
其它数据认证库 | courier-authlib 0.62..2 | 负责courier-imap,maildrop 的认证 |
SMTP 认证库 | cyrus-sasl 2.1.22 | 标准的SASL实现库,支持courier authlib |
POP3 认证库 | courier-imap 4.5.0 | Pop3 ,IMAP 认证功能 |
一、安装前准备
1.安装时加上mysql server ,其它以默认安装(如果安装时忘记安装mysql,可以运行 yum install mysql-server 来安装);
2.关闭防火墙;
3.关闭SELINUX
4.删除系统原来安好的sendmail # rpm -e --nodeps sendmail sendmail-cf
5.vi 使用高亮 # vi ~/.bashrc 中在alias下面另上一行 alias vi='vim' 后重启(这一步可有可无)
6.建立EMOS1.5 的YUM源
# vi /etc/yum.repos.d/EMOS-Base.repo #建立EMOS的库
# EMOS-Base.repo # # Created by ExtMail Dev Team: http://www.extmail.org/ # # $Id$
[EMOS-base] name=EMOS-Base baseurl=http://mirror.extmail.org/yum/emos/1.5/os/$basearch/ gpgcheck=0 priority=0 protect=0
[EMOS-update] name=EMOS-Updates baseurl=http://mirror.extmail.org/yum/emos/1.5/updates/$basearch/ gpgcheck=0 priority=0 protect=0
|
# yum clean all 保存退出后清空原来的记录
二、配置MTA—postfix
# yum install postfix #安装postfix 包
# postconf -n >/etc/postfix/main2.cf
# mv /etc/postfix/main.cf /etc/postfix/main.cf.bak
# mv /etc/postfix/main2.cf /etc/postfix/main.cf
# vi /etc/postfix/main.cf #修改main.cf 配置文件
增加以下内容
# hostname mynetworks = 127.0.0.1 myhostname = mail.rookie.com mydestination = $mynetworks $myhostname
# banner mail_name = Postfix - by extmail.org smtpd_banner = $myhostname ESMTP $mail_name
# response immediately smtpd_error_sleep_time = 0s
# Message and return co 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 |
三、配置courier-authlib
# yum install courier-authlib courier-authlib-mysql
修改authlib 配置文件
# rm -f /etc/authlib/authmysqlrc
# vi /etc/authlib/authmysqlrc
MYSQL_SERVER localhost MYSQL_USERNAME extmail MYSQL_PASSWORD extmail MYSQL_SOCKET /var/lib/mysql/mysql.sock MYSQL_PORT 3306 MYSQL_OPT 0 MYSQL_DATABASE extmail MYSQL_USER_TABLE mailbox MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD uidnumber MYSQL_GID_FIELD gidnumber MYSQL_LOGIN_FIELD username MYSQL_HOME_FIELD homedir MYSQL_NAME_FIELD name MYSQL_MAILDIR_FIELD maildir MYSQL_QUOTA_FIELD quota 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)'
|
修改authmysqlrc 的权限和拥有者
# chown daemon.daemon /etc/authlib/authmysqlrc
# chmod 660 /etc/authlib/authmysqlrc
修改authdaemonrc 以下内容
authmodulelist="authmysql" authmodulelistorig="authmysql" |
启动
# service courier-authlib start
Starting Courier authentication services: authdaemond
修改authdaemon socket 目录权限,否则以下面的测试SMTP认证就不能通过
# chmod 755 /var/spool/authdaemon/
四、配置maildrop
# yum install maildrop
配置master.cf 为了使Postfix支持Maildrop,必须修改/etc/postfix/master.cf文件,注释掉原来的maildrop的配置内容,并改为:
maildrop unix - n n - - pipe flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop} |
配置main.cf 由于maildrop不支持一次接收多个收件人,因此必须在/etc/postfix/main.cf里增加如下参数:
maildrop_destination_recipient_limit = 1 |
测试maildrop对authlib支持
# maildrop -v
注意事项:
1、如需重新编译Maildrop软件包,必须先获得其源码rpm包,并且必须先行安装courier-authlib及其devel软件包,否则编译后的maildrop将无法打开authlib支持。
2、maildrop RPM包安装时,会自动创建vuser用户及vgroup用户组,专门用于邮件的存储,vuser:vgroup的uid/gid都是1000,这与一般的邮件文档中提及用postfix用户存邮件不一样。因为postfix用户的uid一般都低于500,而Suexec模块编译时对UID/GID的要求是要大于500,因此使用postfix用户不能满足要求。其次,如果用Maildrop作为投递代理(MDA),以postfix身份投递的话,会导致postfix MTA错误。
五、配置apache
修改apache配置文件
# vi /etc/httpd/conf/httpd.conf
在最后一行加上
NameVirtualHost *:80 Include conf/vhost_*.conf |
新建vhost_extmail.conf
# vi /etc/httpd/conf/vhost_extmail.conf
# VirtualHost for ExtMail Solution <VirtualHost *:80> ServerName mail.rookie.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> |
设置apache开机启动
# chkconfig httpd on
六、配置 extmail+extman
安装extmail 和extman 自己安装的时候需要yum -y install perl-Unix-Syslog
# yum install extsuite-webmail extsuite-webman
# cp /var/www/extsuite/extmail/webmail.cf.default /var/www/extsuite/extmail/webmail.cf
# vi /var/www/extsuite/extmail/webmail.cf
修改以下两项
SYS_MYSQL_USER = extmail SYS_MYSQL_PASS = extmail |
更新cgi目录权限 由于SuEXEC的需要,必须将cgi目录修改成vuser:vgroup权限:
# chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/
# chown -R vuser:vgroup /var/www/extsuite/extman/cgi/
链接基本库到Extmail
# mkdir /tmp/extman
# chown -R vuser:vgroup /tmp/extman/
由于RedHat发行版中包含了一个叫tmpwatch的工具,该工具会定期扫描/tmp/下的文件,如果这些文件很久都没被使用,将被删除,因此如果后台长期不使用,/tmp/extman目录有可能被tmpwatch删除,所以要么定期登陆后台,要么修改 webman.cf将临时目录修改到另一个地方。此处暂以/tmp/extman默认值为例。
数据库库初始化
# service mysqld start
设置开机启动
# chkconfig mysqld on
导入数据且初始化(默认的mysql都没有密码的,所以以下命令都不需要认证密码)
# vi /var/www/extsuite/extman/docs/init.sql
把里面所有 extmail.org 的改为 rookie.com
# mysql </var/www/extsuite/extman/docs/extmail.sql
# mysql </var/www/extsuite/extman/docs/init.sql
上述导入初始化SQL时,默认的uidnumber/gidnumber都是1000,这和vuser:vgroup 的uid/gid一致,是因为maildrop投递时会从数据库里取uidnumber/gidnumber,而在master.cf里已经定义好了投递时的运行身份(vuser:vgroup),所以这两个字段的内容必须为1000,否则将出现投递错误,例如报0×06等错误。
设置虚拟域和虚拟用户的配置文件
# cp /var/www/extsuite/extman/docs/mysql_virtual_alias_maps.cf /etc/postfix/
# cp /var/www/extsuite/extman/docs/mysql_virtual_domains_maps.cf /etc/postfix/
# cp /var/www/extsuite/extman/docs/mysql_virtual_mailbox_maps.cf /etc/postfix/
# cp /var/www/extsuite/extman/docs/mysql_virtual_sender_maps.cf /etc/postfix/
# vi /etc/postfix/main.cf
增加以下内容
# 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: |
重启postfix
# service postfix restart
测试authlib
# /usr/sbin/authtest -s login postmaster@rookie.com extmail
如输出以下结果证明extman 正确安装,数据库也正确导入,courier-authlib 正确连接mysql数据库
Authentication succeeded.
Authenticated: postmaster@rookie.com (uid 1000, gid 1000) Home Directory: /home/domains/rookie.com/postmaster Maildir: /home/domains/rookie.com/postmaster/Maildir/ Quota: 104857600S Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0 Cleartext Password: extmail Options: (none)
|
配置图形化日志
# /usr/local/mailgraph_ext/mailgraph-init start
启动cmdserver(在后台显示系统信息)
# /var/www/extsuite/extman/daemon/cmdserver --daemon
加入开机自启动
# echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.d/rc.local
# echo "/var/www/extsuite/extman/daemon/cmdserver -v -d" >> /etc/rc.d/rc.local
注:
Extmail url: http://ip/extmail
Extman url: http://ip/extman
Extman 管理员用户名:root@rookie.com
管理员默认密码: extmail*123*
Extmail 登录时,域名项应改为 rookie.com
七、配置cyrus-sasl
删除系统自带的
# rpm -e --nodeps cyrus-sasl
rpm -qa |grep cyrus-sasl |xargs rpm -e --nodeps
安装EMOS1.5里的
# yum install cyrus-sasl
修改postfix 配置文件
# vi /etc/postfix/main.cf
增加以下内容
# 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
|
配置smtpd.conf
# vi /usr/lib/sasl2/smtpd.conf
清空后改为以下内容
pwcheck_method: authdaemond log_level: 3 mech_list: PLAIN LOGIN authdaemond_path:/var/spool/authdaemon/socket |
重启postfix后测试SMTP认证
# service postfix restart
通过以下命令获得postmaster@extmail.org的用户名及密码的BASE64编码:
# perl -e 'use MIME::Base64; print encode_base64("postmaster\@rookie.com"
)'
结果:
cG9zdG1hc3RlckByb29raWUuY29t
# perl -e 'use MIME::Base64; print encode_base64("extmail")'
结果:
ZXh0bWFpbA==
开始测试
# telnet localhost 25
Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 mail.rookie.com ESMTP Postfix - by extmail.org ehlo demo.domain.tld <<输入内容 250-mail.rookie.com 250-PIPELINING 250-SIZE 5242880 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN auth login <<输入内容 334 VXNlcm5hbWU6 cG9zdG1hc3RlckByb29raWUuY29t <<输入内容 334 UGFzc3dvcmQ6 ZXh0bWFpbA== <<输入内容 235 2.7.0 Authentication successful ##显示这个说明认证成功 Quit <<输入内容 221 2.0.0 Bye Connection closed by foreign host.
|
八、配置courier-imap
默认的courier-authlib及courier-imap都会增加系统自启动设置,因此下一次服务器启动将自动启动相应的authlib及POP3服务
# yum install courier-imap
由于Courier-imap的IMAP目录是按UTF-7编码的,ExtMail目前还没有正式支持IMAP目录,因此需要屏蔽IMAP,只提供pop3服务。而就目前的使用情况来看,IMAP使用的非常少,绝大部分OutLook/Foxmail用户都习惯使用POP3而非IMAP。
# vi /usr/lib/courier-imap/etc/imapd
修改以下内容
IMAPDSTART=NO |
# vi /usr/lib/courier-imap/etc/imapd-ssl
修改以下内容
IMAPDSSLSTART=NO |
启动courier-imap ,测试pop3(先登录extman 新建一个邮件用户,如用户名为staff1,密码为staff1)
# service courier-imap start
# telnet localhost 110
Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. +OK Hello there. user staff1@rookie.com <<输入内容 +OK Password required. pass staff1 <<输入内容 +OK logged in. list <<输入内容 +OK POP3 clients that break here, they violate STD53. . Quit <<输入内容 +OK Bye-bye. Connection closed by foreign host.
|
OK,SMTP和POP3的认证都通过,就意谓着邮件服务器能正常收发了,也就是邮件服务器能正常使用了~YEAH~~~~ 如需要添加杀毒Clamav、查毒amavisd-new、邮件过滤DSpam 的,可以继续看下一篇教程也可以到
http://wiki.extmail.org/extmail_solution_for_linux_centos-5
继续其他配置
来自 http://zs0760.blog.163.com/blog/static/16519525120114140342139/