postfix+Courier-authlib+extmail
一、安装DNS服务:
1、配置本地yum
[root@localhost ~]# vim/etc/yum.repos.d/rhel-debuginfo.repo
2、使用本地yum安装DNS软件包。
编辑好本地yum之后,使用yum安装DNS服务所需的软件包。
[root@localhost ~]# yum install bind bind-chrootcaching-nameserver
3、编辑DNS的配置文件。
[root@localhost ~]# cd /var/named/chroot/etc/
[root@localhost etc]# cp -pnamed.caching-nameserver.conf named.conf
[root@localhost etc]# vim named.conf
[root@localhost etc]# vim named.rfc1912.zones
[root@localhost etc]# cd ../var/named/
[root@localhost named]# cp -p localhost.zone a.com.zone
至此DNS服务已经配置完成。启动DNS服务,service named start。让named服务随系统启动,chkconfig named on。
因为该服务器是mail.a.com.域中的邮件交换器,所以要将服务的主机名改为mail.a.com。修改主机名的方法有两种,一种是临时修改,注销之后再次登录生效,重启失效。使用命令:“hostname主机名”另一种是永久修改,需要重启生效,编辑/etc/sysconfig/network文件,修改“HOSTNAME=主机名”。
[root@localhost named]# vim /etc/sysconfig/network
//HOSTNAME=mail.a.com
注销后重新登录,即可生效。
二、安装extmail前的准备工作
因为extmail是通过web来进行收发邮件,在线注册,身份验证的,所以需要httpd和mysql,openssl一些软件包。
httpd mysql mysql-server mysql-developenssl-devel dovecot perl-DBD-MySQL tcl tcl-devel libart_lgpl libart_lgpl-devel
libtool-ltdl libtool-ltdl-devel expect
主要的软件包是:
dovecot //邮件的接收服务
httpd //利用web来进行收发电子邮件
mysql //mysql客户端
mysql-server //mysql的服务
其它的就是一些依赖的软件包,安装完成后,需要对某些服务进行设置。
①给mysql添加管理员登录口令,以及对其操作的授权。
[root@mail~]# mysqladmin -u root -p password 'redhat'
mysql>mysql -uroot -p 密码:redhat
mysql>grant all privileges on *.* to root@'%' identified by 'redhat'; 对网络上的账号进行授权
mysql>flush privileges; 刷新数据库里面的权限
三、安装extmail相关软件
软件包介绍:
Unix-Syslog-0.100.tar.gz //日志补丁软件包
courier-authlib-0.63.1.20111230.tar.bz //结合mysql进行身份验证
extmail-1.2.tar.gz //实现收发信件
extman-1.1.tar.gz // 实现web注册
postfix-2.8.2.tar.gz //postfix安装包,提供smtp服务
因为使用的是源代码进行安装,安装时需要进行编译,所以系统要具备基本的开发环境,安装圆满了才能够顺利进行。使用:yum grouplist查看系统开发环境所具备的基本组。
1、安装postfix
注意在安装postfix之前,要先关闭掉系统自带的sendmail,否则会和postfix的安装冲突。
servic sendmail stop //关闭sendmail服务
chkconfig sendmail off //不随系统启动
① tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/
//解压缩postfix压缩包到/usr/local/src目录中
② cd /usr/local/src/postfix-2.8.2
//进入解压缩后的目录中
③ groupadd -g 2525 postfix
//添加一个组,组ID:2525
④ useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
//创建一个无登录权限无家目录的用户postfix到组postfix中
⑤ groupadd -g 2526 postdrop
//添加一个组,组ID:2526
⑥ useradd -g postdrop –u 2526 -s /sbin/nologin -M postdrop
//创建一个无登录权限无家目录的用户postdropx到组postdrop中
⑦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'
//生成postfix的make文件
⑧ make //编译
⑨ make install //安装
按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值,省略的表示采用默认值)
install_root: [/] /
tempdir: [/usr/local/src/postfix-2.6.5] /tmp
config_directory: [/etc/postfix]
command_directory: [/usr/sbin]
daemon_directory:[/usr/libexec/postfix]
data_directory:[/var/lib/postfix]
html_directory: [no]/var/www/postfix_html
mail_owner: [postfix] //系统中要有postfix这个用户
mailq_path: [/usr/bin/mailq]
manpage_directory: [/usr/local/man]
newaliases_path: [/usr/bin/newaliases]
queue_directory: [/var/spool/postfix]
readme_directory: [no]
sendmail_path:[/usr/sbin/sendmail]
setgid_group: [postdrop] //系统中要有postdrop这个组
⑩ newaliases
//生成别名二进制文件,这个步骤如果忽略,会造成postfix效率极低:
安装好postfix之后,为它编写一个服务控制脚本或者利用rpm包中的postfix中的控制脚本。这里使用的是rpm包中postfix的服务控制脚本来控制源码安装的postfix。
2、编辑postfix的配置文件。
#vi /etc/postfix/main.cf
修改以下几项为您需要的配置
myhostname = mail.a.com
mydomain = a.com
inet_interfaces = all
mydestination = $myhostname,localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.30.0/24,127.0.0.0/8
myorigin=$mydomain
说明:
myhostname 参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;
mydomain 参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值;
inet_interfaces 参数指定postfix系统监听的网络接口;
mydestination 参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件;
mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问;
myorigin 参数用来指明发件人所在的域名;
注意:
每修改参数及其值后执行 postfixreload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix;
四、为postfix开启基于cyrus-sasl的认证功能
1、查看postfix是否支持cyrus-sasl认证。
2、产生postfix与sasl结合的文件。
利用sasl与sendmail结合的文件产生sasl与postfix认证的文件
[root@mailinit.d]# cd /usr/lib/sasl2/
[root@mailsasl2]# cp -p Sendmail.conf smtpd.conf
[root@mailsasl2]# service saslauthd start
[root@mailsasl2]# chkconfig saslauthd on
启动saslauthd服务:service saslauthd start
3、修改postfix的配置文件,启用sasl认证。
#vim /etc/postfix/main.cf
添加如下内容:
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_banner = Welcome to our$myhostname ESMTP,Warning: Version not Available!//登录时的提示信息
4、重新加载配置文件:service postfix reload
五、安装Courier authenticationlibrary
1、安装
①tar -jxvfcourier-authlib-0.63.1.20111230.tar.bz2 -C/usr/local/src/
//解压缩courier-authlib压缩包
② cd/usr/local/src/courier-authlib-0.63.1.20111230/
//进入解压缩后的文件中
③ ./configure \
--prefix=/usr/local/courier-authlib \
--sysconfdir=/etc \
--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-ltdl-lib=/usr/lib \
--with-ltdl-include=/usr/include
//对环境进行配置,红色参数至关重要,要确保路径的正确性。
④ make //编译
⑤ make install //安装
2、共享库文件以及头文件
为了使其它程序能够查找到courier-authlib的库文件和头文件,需要将它的这些文件共享到系统的库文件和头文件中.
①共享库文件
在/etc/ld.so.conf.d/目录中创建一个文件:courier-authlib.conf
#touch /etc/ld.so.conf.d/courier-authlib.conf
内容是:courier-authlib的库文件的路径:/usr/local/courier-authlib/lib/courier-authlib/
②共享头文件
ln -s/usr/local/courier-authlib/include /usr/include/courier-authlib
//创建一个连接,将courier-authlib的头文件链接到系统的库文件目录中
4、修改文件的权限
chmod 755/usr/local/courier-authlib/var/spool/authdaemon
5、修改认证模块文件和mysql结合文件
# cp /etc/authdaemonrc.dist /etc/authdaemonrc
# cp /etc/authmysqlrc.dist /etc/authmysqlrc
① 修改/etc/authdaemonrc文件
② 修改/etc/authmysqlrc
编辑/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 (msyql的sock文件路径)
MYSQL_DATABASE extmail (访问extmail的数据库)
MYSQL_USER_TABLE mailbox (存放extmail用户的表)
MYSQL_CRYPT_PWFIELD password (对passwo字段加密)
MYSQL_UID_FIELD '2525' (extmail用户文件的用户ID)
MYSQL_GID_FIELD '2525' (extmail用户文件的组ID)
MYSQL_LOGIN_FIELD username (登录时的字段名username)
MYSQL_HOME_FIELD concat('/var/mailbox/',homedir) (用户的家目录)
MYSQL_NAME_FIELD name (用户名字段name)
MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir) (用户邮件目录)
6、产生courier-authlib的服务控制脚本
# cd/usr/local/src/courier-authlib-0.63.1.20111230/
# cp courier-authlib.sysvinit/etc/init.d/courier-authlib
# chmod 755 /etc/init.d/courier-authlib
# chkconfig --add courier-authlib
# chkconfig --level 2345courier-authlib on
# service courier-authlib start (启动服务)
7、创建extmail用户的虚拟家目录
新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:
#mkdir -pv /var/mailbox
#chown –R postfix:postfix /var/mailbox
8、cyrus-sasl与courier-authlib结合
接下来重新配置SMTP 认证,编辑 /usr/local/lib/sasl2/smtpd.conf ,确保其为以下内容:
pwcheck_method: authdaemond
log_level: 3
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
然后重启saslauthd服务:service saslauthd restart
六、安装extman及其相关配置
让postfix支持虚拟域和虚拟用户
1、编辑/etc/postfix/main.cf,添加如下内容:
########################Virtual MailboxSettings########################
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
##########################QUOTASettings########################
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 mailboxand try again later.
virtual_overquota_bounce = yes
2、安装extman
① tar -zxvf extman-1.1.tar.gz
//解压缩extman软件包到当前目录
② 使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库:
# cd extman-1.1/docs
-------------------------------------------------------------------------------------------------------------
# mysql -u root -p <extmail.sql
# mysql -u root -p <init.sql
# mysql -u root -p 进行验证
③ 授予用户extmail访问extmail数据库的权限
mysql> GRANT all privileges onextmail.* TO extmail@localhost IDENTIFIED BY 'extmail';
mysql> GRANT all privileges onextmail.* TO extmail@127.0.0.1 IDENTIFIED BY 'extmail';
mysql>FLUSH PRIVILEGES; 让设置的内容生效
cp mysql_virtual_* /etc/postfix/
//将extman-1.0.1/docs目录中的mysql开头的文件拷贝到/etc/postfix,设置虚拟域文件
service postfix restart
七、配置dovecot
1、在开始我们使用的是yum来安装dovecot,这里只需要对其进行配置
# vi /etc/dovecot.conf
要修改的内容如下:
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、产生dovecot与mysql结合的文件
首先要修改postf的配置文件:
# vim /etc/postfix/main.cf
#vim /etc/dovecot-mysql.conf //产生一个文件,内容如下:
driver = mysql
connect = host=localhost dbname=extmailuser=extmail password=extmail (如mysql源码安装,host=/tmp/mysql.sock)
default_pass_scheme = CRYPT
password_query = SELECT username ASuser,password AS password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, uidnumberAS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'
重启dovecot服务:service dovecot restart 。
监控日志,tail -f /var/log/maillog/ 出现如下信息说明正常:
八、安装Extmail (首先要确保安装了httpd)
1、安装
① # tar -zxvf extmail-1.2.tar.gz
//解压缩到当前目录
② # mkdir -pv/var/www/extsuite
//创建一个目录,用来作为一个web站点
# mv extmail-1.2/var/www/extsuite/extmail
# mv extman-1.1/var/www/extsuite/extman
//将extmail和extman拷贝到新建的站点目录下,以便通过web访问。
③ 修改extmail目录下的cgi目录下文件的属性
④ 修改主配置文件
# cd /var/www/extsuite/extmail/
# cp webmail.cf.default webmail.cf
# vim webmail.cf
部分修改选项的说明:
------------------------------------------------------------------
SYS_MESSAGE_SIZE_LIMIT = 5242880
用户可以发送的最大邮件
SYS_USER_LANG = en_US
语言选项,可改作:
SYS_USER_LANG = zh_CN
SYS_MAILDIR_BASE = /home/domains
此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE = /var/mailbox
SYS_MYSQL_USER = db_user
SYS_MYSQL_PASS = db_pass
以上两句句用来设置连接数据库服务器所使用用户名、密码和邮件服务器用到的数据库,这里修改为:
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_HOST = localhost
指明数据库服务器主机名,这里默认即可
SYS_MYSQL_TABLE = mailbox
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_DOMAIN = domain
SYS_MYSQL_ATTR_PASSWD = password
以上用来指定验正用户登录里所用到的表,以及用户名、域名和用户密码分别对应的表中列的名称;这里默认即可
SYS_AUTHLIB_SOCKET =/var/spool/authdaemon/socket
此句用来指明authdaemo socket文件的位置,这里修改为:
SYS_AUTHLIB_SOCKET =
usr/local/courier-authlib/var/spool/authdaemon/socket
⑤ 重启相关服务
九、配置httpd
由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;本例中打开了apache服务器的suexec功能,故使用以下方法来实现虚拟主机运行身份的指定。此例中的MDA为postfix自带,因此将指定为postfix用户:
如果您没有打开apache服务器的suexec功能,也可以使用以下方法解决:
# vi /etc/httpd/httpd.conf
User postfix
Group postfix
<VirtualHost *:80>
ServerName mail.a.com
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
Alias /extmail /var/www/extsuite/extmail/html
</VirtualHost>
十、安装extamil日志补丁
extmail将会用到perl的Unix::syslogd功能,您可以去http://search.cpan.org搜索下载原码包进行安装。
① # tar -zxvf Unix-Syslog-0.100.tar.gz
//解压缩文件
② # cd Unix-Syslog-0.100
# perl Makefile.PL //使用perl工具进行配置
# make //编译
# make install //安装
十一、extmail与extman结合
修改配置文件以符合本例的需要:
# cd /var/www/extsuite/extman
# chown -R postfix:postfix cgi/
# cp webman.cf.default webman.cf
# vi webman.cf
修改内容如下:
----------------------------------------------------------------
SYS_MAILDIR_BASE = /home/domains
此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE = /var/mailbox
修改
SYS_CAPTCHA_ON = 1 为 SYS_CAPTCHA_ON =0
修改
SYS_LANG = en_US 为 SYS_LANG = zh_CN
③ 通过web访问extman的目录
在apache的主配置文件中Extmail的虚拟主机部分,添加如下两行:
ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
Alias /extman /var/www/extsuite/extman/html
重启httpd服务:service httpd restart
④创建其运行时所需的临时目录,并修改其相应的权限:
#mkdir -pv /tmp/extman
#chown postfix.postfix /tmp/extman
⑤ 使用虚拟域
在postfix主配置文件中的mydestination选项中,我们指明了哪些域是本地的域,但是在extmail中,我们使用了虚拟域,为了产生冲突,需要禁用到postfix中的mydestination选项,如果不禁用,那在设置邮箱域时,必须和postfix中指明的相同。
十二、测试
好了,到此为止,重新启动apache服务器后,您的Webmail和Extman已经可以使用了,可以在浏览器中输入指定的虚拟主机的名称进行访问,如下:
选择管理即可登入extman进行后台管理了。默认管理帐号为:root@extmail.org 密码为:extmail*123*。首先应该添加一些域名。
说明:
(1) 添加域名后,如果无法自由注册,请重新编辑该域的属性,允许自由注册。
(2) 如果您安装后无法正常显示校验码,安装perl-GD模块会解决这个问题。如果想简单,您可以到以下地址下载适合您的平台的rpm包,安装即可: http://dries.ulyssis.org/rpm/packages/perl-GD/info.html
(3) extman-1.1自带了图形化显示日志的功能;此功能需要rrdtool的支持,您需要安装此些模块才可能正常显示图形日志。
(4)如果登陆http://ip/extmail后出现:
DBIconnect(‘database=extmail;host=localhost;mysql_socket=/var/lib/mysql/mysql.sock’,'extmail’,…)failed: Access denied for user ‘extmail’@'localhost’ (using password: YES) at/opt/test/htdocs/extsuite/extmail/libs/Ext/Auth/MySQL.pm line 45
检查webmail.cf中于数据库连接的设置是否正确,以及authmysqlrc的数据库设置是否正确即可