一、配置好yum源
确认开发包组“Development tools” “Development libraries”是否安装。# yum grouplist all
若没有则安装: # yum groupinstall “Development tools” “Development libraries” -y
二、上一篇的理论讲到了邮件服务与DNS 的关系,所以这里我们还要配置DNS服务。
# yum install bind -y
# yum install caching-nameserver -y
# vim /etc/named.conf
options {
directory "/var/named";
forwarders { 172.16.0.1; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
zone "magedu.com" IN {
type master;
file "magedu.com.zone";
forwarders {};
};
zone "16.172.in-addr.arpa" IN {
type master;
file "172.16.zone";
forwarders {};
};
# cd /var/named
# vim magedu.com.zone
$TTL 600
$ORIGIN magedu.com.
@ IN SOA ns.magedu.com. admin.magedu.com. (
2012040101
2H
20M
7D
1D )
IN NS ns
IN MX 10 mail
ns IN A 172.16.30.8
mail IN A 172.16.30.8
www IN CNAME mail
pop3 IN CNAME mail
imap IN CNAME mail
# vim 172.16.zone
$TTL 600
@ IN SOA ns.magedu.com. admin.magedu.com. (
2012040101
2H
20M
7D
1D )
IN NS ns.magedu.com.
IN MX 10 mail.magedu.com.
8.30 IN PTR ns.magedu.com.
8.30 IN PTR mail.magedu.com.
# vim /etc/hosts 添加如下行
172.16.30.8 mail.magedu.com 主机IP
# vim /etc/sysconfig/network 将hostname改为如下:
HOSTNAME=mail.magedu.com
# vim /etc/resolv.conf 用本机解析
nameserver 172.16.30.8
DNS服务准备好了接下来配置邮件服务器。
红帽系统默认已经安装好了sendmail,可以确认一下,看25号端口是否已经启用了
# netstat -tnlp 如图1-1 但是此时只监听在127.0.0.1本主机上,只对本机服务,不对外服务。图1-1
三、系统为什么会自带mail呢?
因为过一段时间邮件就会提示系统有哪些情况,所以mail是用来向管理员通告一些系统监控情况的,所以系统默认情况下是安装好的。
四、下面我们来讲postfix
两者不能同时监听在25号,可以把sendmail停掉或用命令在两者之间替换,这里演示停掉sendmail。
1、停掉sendmail
# service sendmail stop
# chkconfig sendmail off
安装额外的rpm包
httpd, mysql, mysql-server, mysql-devel, openssl-devel, dovecot, perl-DBD-MySQL, tcl, tcl-devel, libart_lgpl, libart_lgpl-devel, libtool-ltdl, libtool-ltdl-devel, expect
安装httpd是提供webmail的,为他几个是postfix的一些工具所依赖的,可装可不装,这里我配置好了yum源,直接用yum来装了
# yum install httpd mysql mysql-server dovecot tcl-devel perl-DBD-MySQL openssl-devel libart_lgpl-devel libtool-ltdl-devel expect -y
3、启动mysql数据库,并给mysql的root用户设置密码:
# service mysqld start
# chkconfig mysqld on
# mysqladmin -uroot password '123456' 不设置密码也可以
4、启动saslauthd服务,并将其加入到自动启动队列,启用认证功能:
# service saslauthd start
# chkconfig saslauthd on
需要注意的是用rpm包安装的postfix,默认不支持基于mysql虚拟用户,这不是我们要的,所以这里我们不用rpm包的postfix。
可以到postfix的官方网站www.postfix.org,选择download这项里可以下载,打开之后找到镜像China Hong Kong 或 China Chengdu 中去下载源码包,下载最新的。要想用基于mysql的虚拟用户,当然要事先安装好mysql。
安装postfix,这里用postfix-2.9.1.tar.gz
6、postfix依赖两个用户postfix和postdrop,所以先创建用户
# 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
Postdrop是用来实现邮件投递的专门用户。Postfix是收发邮件,运行postfix进程服务的用户帐号,这里的id号至关重要,一般来讲我们要让他们的id号大于500、大于1000,有些特定的服务如maildrop,它要求用户的id号必须大于1000,但是一定要记住这里用的id号后面会多次调用到所以与后面的一定要匹配起来。
7、安装postfix,事先一定要确保开发包组“Development Libraries” ”Development Tools“已经装上,因为postfix可能依赖其中的某些包
# tar xf postfix-2.9.1.tar.gz
# cd postfix-2.9.1
# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
# make
# make install
8、上面命令执行后会出现如图1-2所示,让你选一些文件的安装位置,根据自己的需求,这里我把tempdir的路径给为了临时路径/tmp/postfix
将html_directory: [no] 改为了 /var/www/html/postfix,其他均可不变
9、配置完成之后就可以启动postfix了 ,但是此时postfix只监听在0.0.0.0 的25号端口,但只能给本机的客户端发送邮件。Postfix程序是模块化,它启用的第一个模块是master,master负责启动其他几个子模块,它的子模块非常的多,但并不是都启动起来的,用到哪个才启动哪个子进程,master是最主要的进程,在/etc/postfix/master.cf 配置文件中,定义了,main.cf设定postfix工作的所有参数,这些文件中的参postfix的模块,postfix的主配置文件在/etc/postfix/main.cf,所以master进程会读取这两个配置文件master.cf是为了协调其他几个子进程的数都可以用一个二进制命令来查看, postconf
# newaliases 生成别名二进制文件
# postfix start 启动postfix
# tail /var/log/maillog 可以看日志
# netstat -tnlp 这时再看25号端口就启用了,如图1-3
图1-3
10、进行一些基本配置,测试启动postfix并进行发信
# vim /etc/postfix/main.cf
修改以下几项为您需要的配置
myhostname = mail.magedu.com
myorigin = magedu.com
mydomain = magedu.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8
11、为postfix提供SysV服务脚本/etc/rc.d/init.d/postfix,内容如下(#END 之前):
# vim /etc/rc.d/init.d/postfix
#!/bin/bash
#
# postfix Postfix Mail Transfer Agent
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program \
# that moves mail from one machine to another.
# processname: master
# pidfile: /var/spool/postfix/pid/master.pid
# config: /etc/postfix/main.cf
# config: /etc/postfix/master.cf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ $NETWORKING = "no" ] && exit 3
[ -x /usr/sbin/postfix ] || exit 4
[ -d /etc/postfix ] || exit 5
[ -d /var/spool/postfix ] || exit 6
RETVAL=0
prog="postfix"
start() {
# Start daemons.
echo -n $"Starting postfix: "
/usr/bin/newaliases >/dev/null 2>&1
/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
echo
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Shutting down postfix: "
/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
echo
return $RETVAL
}
reload() {
echo -n $"Reloading postfix: "
/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $"$prog reload"
RETVAL=$?
echo
return $RETVAL
}
abort() {
/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $"$prog abort"
return $?
}
flush() {
/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $"$prog flush"
return $?
}
check() {
/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $"$prog check"
return $?
}
restart() {
stop
start
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
reload
;;
abort)
abort
;;
flush)
flush
;;
check)
check
;;
status)
status master
;;
condrestart)
[ -f /var/lock/subsys/postfix ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"
exit 1
esac
exit $?
# END
12、修改脚本的权限
# chmod +x /etc/rc.d/init.d/postfix
将postfix添加进服务列表,使其开机可自动启用
#chkconfig --add postfix
# chkconfig postfix on
# chkconfig postfix restart 重新启用postfix
13、测试 如图1-4所示
五、为postfix开启基于cyrus-sasl的认证功能
1、 使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果, 则是支持的:
# /usr/local/postfix/sbin/postconf -a
cyrus
dovecot
#vim /etc/postfix/main.cf
添加以下内容:
############################CYRUS-SASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!
# vim /usr/lib/sasl2/smtpd.conf
添加如下内容:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
重启配置文件:# service postfix reload
2、测试如1-5所示
六、安装Courier authentication library
1、 简介:courier-authlib是Courier组件中的认证库,它是courier组件中一个独立的子项目,用于为Courier的其它组件提供认证服务。其认证功能通常包括验正登录时的帐号和密码、获取一个帐号相关的家目录或邮件目录等信息、改变帐号的密码等。而其认证的实现方式也包括基于PAM通过/etc/passwd和/etc/shadow进行认证,基于GDBM或DB进行认证,基于LDAP/MySQL/PostgreSQL进行认证等。因此,courier-authlib也常用来与courier之外的其它邮件组件(如postfix)整合为其提供认证服务。
2、开始编译安装
# tar xf courier-authlib-0.62.4.tar.bz2
# cd courier-authlib-0.62.4
#./configure \
--prefix=/usr/local/courier-authlib \
--sysconfdir=/etc \
--without-authpam \
--without-authshadow \
--without-authvchkpw \
--without-authpgsql \
--with-authmysql \
--with-mysql-libs=/usr/lib/mysql \
--with-mysql-includes=/usr/include/mysql \
--with-redhat \
--with-authmysqlrc=/etc/authmysqlrc \
--with-authdaemonrc=/etc/authdaemonrc \
--with-mailuser=postfix \
--with-mailgroup=postfix \
--with-ltdl-lib=/usr/lib \
--with-ltdl-include=/usr/include
# make
# make install
# cp /etc/authdaemonrc.dist /etc/authdaemonrc
# cp /etc/authmysqlrc.dist /etc/authmysqlrc
# vim /etc/authdaemonrc 找到authmodulelist和authmodulelistoring这两行将其值改为如下所示:
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=10
1、编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。
MYSQL_SERVER localhost
MYSQL_PORT 3306 (指定你的mysql监听的端口,这里使用默认的3306)
MYSQL_USERNAME extmail (这时为后文要用的数据库的所有者的用户名)
MYSQL_PASSWORD extmail (密码)
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD '2525'
MYSQL_GID_FIELD '2525'
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/var/mailbox/',homedir)
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir)
# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
# chmod 755 /etc/init.d/courier-authlib
# chkconfig --add courier-authlib
# chkconfig --level 2345 courier-authlib on
# ldconfig -v
# service courier-authlib start (启动服务)
新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:
#mkdir –pv /var/mailbox
#chown –R postfix /var/mailbox
# vim /usr/lib/sasl2/smtpd.conf 重新配置SMTP 认证,此配置文件,确保其为以下内容:
pwcheck_method: authdaemond
log_level: 3
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
# service postfix restart
十、让postfix支持虚拟域和虚拟用户
1、# vim /etc/postfix/main.cf编辑/etc/postfix/main.cf,添加如下内容:
########################Virtual Mailbox Settings########################
virtual_mailbox_base = /var/mailbox
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:2525
virtual_gid_maps = static:2525
virtual_transport = virtual
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
##########################QUOTA Settings########################
message_size_limit = 14336000
virtual_mailbox_limit = 20971520
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later.
virtual_overquota_bounce = yes
2、使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库:
# tar xf extman-1.1.tar.gz
# cd extman-1.1/docs
# mysql < extmail.sql mysql初始化
# mysql <init.sql
# cp mysql* /etc/postfix/
3、授予用户extmail访问extmail数据库的权限
mysql> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';
mysql> GRANT all privileges on extmail.* TO extmail@127.0.0.1 IDENTIFIED BY 'extmail';
Mysql > FLUSH PRIVILEGES
启用虚拟域以后,需要取消中心域,即注释掉myhostname, mydestination, mydomain, myorigin几个指令;当然,你也可以把mydestionation的值改为你自己需要的。
1、# vim /etc/dovecot.conf
启用 protocols = imap pop3
mail_location = maildir:/var/mailbox/%d/%n/Maildir
……
auth default {
mechanisms = plain
passdb sql {
args = /etc/dovecot-mysql.conf
}
userdb sql {
args = /etc/dovecot-mysql.conf
}
……
2、# vim /etc/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = CRYPT
password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'
3、启动dovecot服务:
# service dovecot start
# chkconfig dovecot on
十二、安装Extmail-1.2
1、安装
# tar xf extmail-1.2.tar.gz
# mkdir -pv /var/www/extsuite
# mv extmail-1.2 /var/www/extsuite/extmail
# cp /var/www/extsuite/extmail/webmail.cf.default /var/www/extsuite/extmail/webmail.cf
2、修改主配置文件
#vim /var/www/extsuite/extmail/webmail.cf 修改选项的说明:
SYS_USER_LANG = en_US
语言选项,可改作:
SYS_USER_LANG = zh_CN
此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE = /var/mailbox
SYS_MYSQL_PASS = db_pass
修改为:
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_DOMAIN = domain
SYS_MYSQL_ATTR_PASSWD = password
此句用来指明authdaemo socket文件的位置,这里修改为:
SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket
4、apache相关配置
<VirtualHost *:80>
ServerName mail.magedu.com
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
Alias /extmail /var/www/extsuite/extmail/html
</VirtualHost>
2)、将 User apache 和 Group apache
改为 User postfix 和 Group postfix
修改 cgi执行文件属主为apache运行身份用户:
# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
3)、启动 httpd 服务
# chkconfig httpd start
# chkconfig httpd on
5、依赖关系的解决,提供perl模块
1)、extmail将会用到perl的Unix::syslogd功能,您可以去http://search.cpan.org搜索下载原码包进行安装。
# tar xf Unix-Syslog-0.100.tar.gz
# cd Unix-Syslog-0.100
# perl Makefile.PL
# make
# make install
浏览器访问测试 如图1-6所示:
7、启动apache服务
# service httpd start
# chkconfig httpd on
12、安装Extman-1.1
1、安装及基本配置
# tar xf extman-1.1.tar.gz
# mv extman-1.1 /var/www/extsuite/extman
修改配置文件以符合本例的需要:
# cp /var/www/extsuite/extman/webman.cf.default /var/www/extsuite/extman/webman.cf
# vi /var/www/extsuite/extman/webman.cf
此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE = /var/mailbox
SYS_DEFAULT_GID = 1000
此两处后面设定的ID号需更改为前而创建的postfix用户和postfix组的id号,本文使用的是2525,因此,上述两项需要修改为:
SYS_DEFAULT_UID = 2525
SYS_DEFAULT_GID = 2525
SYS_MYSQL_PASS = webman
修改为:
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
# chown -R postfix.postfix /var/www/extsuite/extman/cgi/
ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
Alias /extman /var/www/extsuite/extman/html
#mkdir -pv /tmp/extman
#chown postfix.postfix /tmp/extman
SYS_CAPTCHA_ON = 1
为
SYS_CAPTCHA_ON = 0