Postfix+Cyrus-sasl+courier-authlib+Dovecot+extmail+extman
一、 前提条件:
本实验是在LAMP平台上再做的。因为Extmail和Extman都需要Mysql和Apache的支持。
二、 安装Postfix:
1、如果现有的Linux系统中安装了Sendmail,则要把Sendmail给卸载:rpm -e sendmail --nodeps,或者把Sendmail服务停用。Service Sendmail Stop、Chkconfig Sendmail Off
2、添加Postfix服务的用户postfix、组postfix postdrop
# groupadd –g 1100 postdrop
# groupadd –g 1000 postfix
# useradd –M –u 1000 –g 1000 –G 1100 –s /sbin/nologin postfix
3、将Postfix源码包解压到“/usr/src”目录中:
# tar zxf /mnt/postfix-2.9.0.tar.gz –C /usr/src
# cd /usr/src/postfix-2.9.0
4、预配置编译参数:
在编译前需要使用“make makefiles”命令来调整编译参数,以便Postfix支持SASL认证和查询Mysql数据库。具体的编译参数可以参考源码目录中的README_FILES子目录下的说明文件,例如:SASL_README文件和MYSQL_README文件。现在我采用的是系统自带的cyrus-sasl认证软件,所以Mysql、Cyrus-sasl的库文件和头文件安装位置对编译参数CCARGS和AUXLIBS进行适当调整。如下:
****在编译的时候有一个Mysql的库文件会提示找不到,其实是有的,就在/usr/local/mysql/lib/这个目录下,既然它提示找不到,那我就把它cp到/usr/lib/目录下面,果然问题解决了。
#cp /usr/local/mysql/lib/libmysqlclient.so.15 /usr/lib/
#make makefiles \
'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH \
-DUSE_CYRUS_SASL -I/usr/include/sasl' \
'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 '
---注意:如果mysql是5.5.2版本的话,它的库路径不再是这个了,是/usr/local/mysql/lib/ ,还有就是在输入上面这些参数的时候一定要注意,不要出错,切记!切记!
其中编译参数CCARGS和AUXLIBS的作用如下:
◎CCARGS参数:为编译器提供额外的参数,“-I"选项指出标准的额外头文件的存放目录。例如,mysql和cyrus-sasl的头文件分别位于目录:/usr/local/mysql/lib/mysql、/usr/include/sasl
◎AUXLIBS参数:指出位于标准位置外的额外函数库。如果需要链接SASL、Mysql或者任何其它函数库,而且它们不是存放在标准位置(/usr/lib/目录),则必需在AUXLIBS参数中指出这些函数库的路径。例如mysql和cyrus-sasl的库文件分别位于目录:/usr/local/mysql/lib/mysql、/usr/lib/sasl2
5、编译并进行安装:
# make
# make install (执行make install 后会出现一些安装参数的设置,直接按回车保持默认就行了)。
6、安装完成后,可以通过postconf -n 来得到一个与系统默认配置不同的配置文件,具体做法如下:
#postconf -n > main2.cf
#mv main.cf main.cf.bak
#mv main2.cf main.cf
7、postfix的基本配置:
#vi /etc/postfix/main.cf
myhostname=mail.xfzhou.com --设置服务器的主机名
mydomain=xfzhou.com --设置域名
inet_interfaces=192.168.10.200,127.0.0.1 --设置服务器侦听的IP
myorigin=$mydomain --设置外发邮件时发件人的邮件域名
#mydestination=$myhostname,$mydomain --设置服务器可以接收的邮件中的域名,录有虚拟域的时候要把这项给注销了!
home_mailbox=Maildir/ --设置邮件的存储方法,有两方式,一种是Mailbox,一种是Maildir,Mailbox的存储方式比 较老了,它是把同一个用户的邮件放在同一个文件中,存放的位置是在/var/spool/mail/下面,以用户名命名,使用这种方式,当用户的 邮件比较多的时候,找邮件就有点麻烦了。而Maildir存储方式是在/var/spool/mail/文件夹下面为每个用户创建一个文件夹,然后在用户 的文件夹里,每封邮件使用单独的文件来存储。
##########################Virtual user setting##########################
virtual_mailbox_base = /mailbox //指定虚拟邮箱存储目录的起点
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf //指定虚拟用户对应的别名位置
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf //指定记录虚拟邮箱地址与存储位置对应关系的 映射文件位置
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf //设置postfix服务器可以接收的虚拟邮件域的域 名,作用类似于mydestination
virtual_uid_maps = static:1000 //设置所有虚拟邮件用户映射的本地用户的UID号
virtual_gid_maps = static:1000 //设置所有虚拟邮件用户映射的本地用户的GID号
#######################Sasl Authentication Setting#################
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
mynetworks = 127.0.0.1
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
:wq
8、将extman下面的docs里面的虚拟用户映射表样例文件都复制到/etc/postfix目录下面(我是提前把extmail、extman解压到了htdocs目录下面):
[root@mail extman]# cp ./docs/mysql_virtual_* /etc/postfix/
[root@mail extman]#
Postfix服务的控制:postfix start|stop|check|reload
三、Courier-authlib的安装,这个软件是为了弥补cyrus-sasl的不足的,cyrus-sasl只能做本地认证,不支持数据库认证。
1、#tar jxf /mnt/courier-authlib-0.63.0.tar.bz2
#cd courier-authlib-0.63.0
#./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --with-authmysql --with-mysql- libs=/usr/local/mysql/lib/mysql/ --with-mysql-includes=/usr/local/mysql/include/mysql
#make && make install
#make install-configure ---生成默认的配置文件authmysqlrc和authdaemonrc
在./configure编译的时候出现如下提示:
configure: WARNING: -----------------------------------------------------
configure: WARNING: expect not found - will not be able to change passwds
configure: WARNING: in webmail
configure: WARNING: -----------------------------------------------------
其实对于这种提示,不用担心的,事后经我测试发现是可以修改密码的!
2、将courier-authlib的库路径添加到系统的搜索的路径中。
#vi /etc/ld.so.conf
/usr/local/courier-authlib/lib/courier-authlib
:wq
#ldconfig ---加载设置
3、修改authdaemonrc主配置文件,仅保存authmysql认证方式,去掉其它方式:
vi /usr/local/courier-authlib/etc/authlib/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authmysql"
:wq
4、修改authdaemon这个文件夹的权限为755,以便postfix用记能够读取,然后里面的方法。
[root@mail courier-authlib]# chmod -R 755 /usr/local/courier-authlib/var/spool/authdaemon/
5、修改authmysqlrc文件,用于描述如何向mysql数据库查询信息:
MYSQL_SERVER localhost -----mysql数据库服务器位置
MYSQL_USERNAME extmail -----extmail这个数据库的管理员的用户名
MYSQL_PASSWORD extmail -----管理员的密码
MYSQL_PORT 3306 -----设置mysql服务器监听的端口,默认是0
MYSQL_SOCKET /tmp/mysqld.sock ----指定mysql.sock的位置
MYSQL_DATABASE extmail -----指定虚拟用户的数据库名称
MYSQL_USER_TABLE mailbox -----从mailbox表来获得邮件用户的信息
MYSQL_CRYPT_PASSWD password ----从password字段获得帐户密码
MYSQL_UID_FILED uidnumber ----从uidnumber来获得映射的本地用户的UID
MYSQL_GID_FILED gidnumber ----从gidnumber来获得映射的本地用户的GID
MYSQL_LOGIN_FILED username ----从username字段来获得帐户名称(带@后缀的)
MYSQL_HOME_FILED concat('/mailbox',homedir) ----合并出用户的宿主目录路径
MYSQL_NAME_FILED name -----从name字段获得帐户名称(不带@后缀)
MYSQL_MAILDIR_FILED concat('/mailbox',maildir) ---合并出用户的邮件存储路径
:wq
6、复制courier-authlib的服务脚本courier-authlib.sysvinit到/etc/init.d/目录下,并设置为开机自动启动。
[root@mail authlib]# cd /usr/src/courier-authlib-0.63.0/
[root@mail courier-authlib-0.63.0]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
[root@mail courier-authlib-0.63.0]# chmod 755 /etc/init.d/courier-authlib
[root@mail courier-authlib-0.63.0]# chkconfig --add courier-authlib
[root@mail courier-authlib-0.63.0]# chkconfig --level 35 courier-authlib on
[root@mail courier-authlib-0.63.0]# chkconfig --list courier-authlib
courier-authlib 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@mail courier-authlib-0.63.0]#
7、修改cyrus-sasl的设置:(我的理解是让cyrus-sasl把认证的请求转发给courier-authlib这个程序,让courier-authlib可以查询数据库)
vi /usr/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
authdaemond_path: /usr/local/courier-authlib/var/spool/authdaemon/socket
:wq
8、把saslauthd服务也改成开机自启动,不然在做认证的时候,会提示认证不成功,我做的时候就遇到这种情况,很是无语!!
#chkconfig --level 35 saslauthd on
#service saslauthd start
四、 构建Dovecot服务器:(如果使用的是dovecot-2.的版本的话,还要建立一个dovenull用户,再有就是它的配置文件不能像下面这样来写有点小复杂,所以我又换到1.0的版本了,不过做还是可以做的,只是它把几个配置文件相互关联,不是写在一个文件里而已。)
1、添加Dovecot要用的程序用户:
# useradd -M -s /sbin/nologin dovecot (-M 是不创建属主目录)
2、编译安装Dovecot软件包:
# tar zxf dovecot-1.2.16/.tar.gz -C /usr/src
# cd dovecot-1.2.16/
# ./configure --sysconfdir=/etc/ --with-mysql
# make && make install
3、复制配置文件到/etc/目录下面,并修改相关内容:
#cp /usr/local/share/doc/doevcot/example-config/dovecot.conf /etc/
#vi /etc/dovecot.conf
protocols = imap pop3
mail_location = maildir:/mailbox/%d/%n/Maildir
auth default {
mechanisms = plain
passdb sql {
args = /etc/dovecot/dovecot_mysql.conf
}
userdb sql {
args = /etc/dovecot/dovecot_mysql.conf
}
}
:wq
4、建立dovecot数据查询文件了:
[root@mail etc]# vi /etc/dovecot/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 usernmae='%u'
:wq
五、构建extmail、extman邮件Web平台,其中extmail是给普通用户来登陆邮箱使用的,extman是供管理员来管理邮件后台的。
1、先来说说extmail,前面我已经把extmail-1.2.tar.gz 和 extman-1.1.tar.gz这两个文件都解压到了网站的根目录/usr/local/apache/htdocs/下面,并给它们分别重命名为extmail、extman。现在就要用到extman/docs/里面的extmail.sql init.sql这两个文件导入到mysql数据库中去建相关的数据库和表。
#mysql -u root -p < extmail.sql ---这个是导入extmail数据库的一些模板。
#mysql -u root -p < init.sql ---这个是初始化extmail这个数据库。这两个的顺序不能错,想下应该先有数据库,再来初始化它。
***这里要注意的是如果你使用的是mysql-5.5.2及以上的版本的话,就要修改下extmail.sql这个文件,因为5.5的版本它不在支持使用 TYPE=MyISAM 这样的写法,要把“TYPE”改成:“ENGINE”就行了。这里可以用VI去修改,完成后,就可以直接导入了,否则会报错的。
2、由于安装和运行extmail套件需要用到三个Perl软件包:Unix-Syslog、DBI和DBD-MySQL。这些软件都可以从 www.chinaunix.net 这个网站上去下载的。下面就按顺序来安装这三个Perl软件包:
A、安装Unix-Syslog-1.1.tar.gz:
#cd Unix-Syslog-1.1
#perl Makefile.PL
#make && make install
B、安装DBI-1.607.tar.gz:
#cd DBI-1.607
#perl Makefile.PL
#make && make install
C、安装DBD-mysql-4.020.tar.gz:
#cd DBD-mysql-4.020
#perl Makefile.PL
#make && make install
3、调整/usr/local/apache/htdocs/extmail/cgi/ 这个目录的权限,以便让apache服务器能够有权限执行suexec操作:
#chown -R postfix:postfix cgi
4、建立并修改extmail的配置文件webmail.cf:
在extmail这个目录下面有一个默认的配置文件webmail.cf.default,我这把它复制一份成为webmail.cf
#cd /usr/local/apache/htdocs/extmail/
#cp webmail.cf.default webmail.cf
然后,再来修改webmail.cf这个配置文件:
#vi webmail.cf
SYS_CONFIG = /usr/local/apache/htdocs/extmail/ --程序根目录
SYS_LANGDIR = /usr/local/apache/htdocs/extmail/lang --语言包文件位置
SYS_TEMPDIR = /usr/local/apache/htdocs/extmail/html --系统模板的目录
SYS_MAILDIR_BASE = /mailbox --邮件的存储位置
SYS_MYSQL_USER = extmail --访问MYSQL的用户
SYS_MYSQL_PASS = extmail --访问MYSQL的用户的密码
SYS_MYSQL_DB = extmail --使用的数据库名称
SYS_MYSQL_HOST = localhost --指定MYSQL服务器的位置
SYS_MYSQL_SOCKET = /tmp/mysql.sock --MYSQL套接字文件位置
5、修改httpd.conf文件,给extmail添加一个虚拟主机(我这里使用的是同一IP,不同端口号的方法,80端口用来做普通用户使用邮件的访问,8080用来做管理员使用extman来管理的访问),这个添加完后要重新启动httpd这个服务。
#vi /usr/local/apache/conf/httpd.conf
Listen 192.168.10.200:80
Listen 192.168.10.200:8080
<VirtualHost 192.168.10.200:80>
ServerName mail.xfzhou.com
DocumentRoot /usr/local/apache/htdocs/extmail/html/
ScriptAlias /extmail/cgi/ /usr/local/apache/htdocs/extmail/cgi/
Alias /extmail /usr/local/apache/htdocs/extmail/html/
SuexecUserGroup postfix postfix --这里的配置,如果在编译apache的时候,没有开启这个功能,那还可以修改httpd.conf配置文件中的User postfix和Group postfix这两个地方来实现。
</VirtualHost>
现在来重启下httpd这个服务:
#/usr/local/apache/bin/apachectl stop
#/usr/local/apache/bin/apachectl start
现在就可以使用 http://192.168.10.200来访问extmail了。
6、安装和运行extman套件需要用到perl支持软件包GD、Fail-Tail和rrdtool绘图引擎工具包。GD软件包可以有效地解决extman登陆界面中图片验证无法显示的问题,Fail-Tail和rrdtool工具用于支持查看图形日志。
A、解压、安装GD软件包:
#tar zxf GD-2.41.tar.gz
#cd GD-2.41
#perl Makefile.PL
#make && make install
B、解压、安装Fail-Tail软件包:
#tar zxf File-Tail-0.99.3.tar.gz
#cd File-Tail-0.99.3
#perl Makefile.PL
#make && make install
C、安装rrdtool绘图引擎rpm包:
#rpm -ivh rrdtool-1.2.23-3.e15.i386.rpm
#rpm -ivh rrdtool-perl-1.2.23-3.e15.i386.rpm
安装的时候如果没有办法一个一个的安装,那就用#rpm -ivh rrdtool-* 的方法来把两个一次性给安装了!
7、同样要调整extman的cgi目录的权限:
#chown -R postfix:postfix cgi
8、编辑extman的配置文件webman.cf,基本上和那个webmail修改的一样,就是数据库的用户名和密码变了。
#vi /usr/local/apache/htdocs/extman/webman.cf
SYS_CONFIG = /usr/local/apache/htdocs/extman/
SYS_LANGDIR = /usr/local/apache/htdocs/extman/lang
SYS_TEMPDIR = /usr/local/apache/htdocs/extman/html
SYS_MAILDIR_BASE = /mailbox --邮件的存储位置
SYS_MYSQL_USER = webman --访问MYSQL的用户
SYS_MYSQL_PASS = webman --访问MYSQL的用户的密码
SYS_MYSQL_DB = extmail --使用的数据库名称
SYS_MYSQL_HOST = localhost --指定MYSQL服务器的位置
SYS_MYSQL_SOCKET = /tmp/mysql.sock --MYSQL套接字文件位置
:wq
9、再来给extman也来个虚拟主机,让管理员能够通过extman来管理邮件的后台:
#vi /usr/local/apache/conf/httpd.conf
<VirtualHost 192.168.10.200:8080>
ServerName mail.xfzhou.com
DocumentRoot /usr/local/apache/htdocs/extman/html/
ScriptAlias /extmail/cgi/ /usr/local/apache/htdocs/extmail/cgi/
Alias /extmail /usr/local/apache/htdocs/extmail/html/
ScriptAlias /extman/cgi/ /usr/local/apache/htdocs/extman/cgi/
Alias /extman /usr/local/apache/htdocs/extman/html/
SuexecUserGroup postfix postfix
</VirtualHost>
:wq
六、现在就可以通过 http://192.168.10.200:8080来访问extman了。现在我把在访问过程中可能会出现的问题写在下面:
1、当你登陆的时候,如果一直提示你验证码错误,但是你确定你没有输入错误的时候,你就要看下,你电脑的时间和服务器的时间是不是相差的太远了,如果相差太远是登陆不进去的。只要改下系统的时间就可以正常登陆了。
#date -s 08/04/2012
#date -s 14:09:00
#clock -w ----将设置的时候保存到BIOS中,不然这样在当时有用,当服务器一重启后,系统时间又错了!
2、登陆进去了后,显示 No such file or directory 或者 Connection refused,这时要把cmdserver这个命令执行下:
#/usr/local/apache/htdocs/extman/daemon/cmdserver -d (最后要加上这个参数d)
3、当点击图形日志的时候发现,有关邮件的一些图片出不来,是个叉。是因为你没有启动mailgraph-init这个程序。
[root@mail sbin]# cd /usr/local/apache/htdocs/extman/addon/mailgraph_ext/
[root@mail mailgraph_ext]# ./mailgraph-init start
Starting mail statistics grapher: mailgraph_ext
nice: /usr/local/mailgraph_ext/mailgraph_ext.pl: 没有那个文件或目录
Starting queue statistics grapher: qmonitor
nice: /usr/local/mailgraph_ext/qmonitor.pl: 没有那个文件或目录
提示:没有这两个文件,但是,我发现这两个文件都在/usr/local/apache/htdocs/extman/addon/mailgraph_ext/这个目录下面。我的做法是在/usr/local/下面创建一个mailgraph_ext目录,然后再把这两个文件做个软链接到/usr/local/mailgraph_ext/目录,最后:再来启动mailgraph-init 就不会出错了。
[root@mail local]# mkdir mailgraph_ext
[root@mail local]# cd mailgraph_ext/
[root@mail mailgraph_ext]# ln -s /usr/local/apache/htdocs/extman/addon/mailgraph_ext/mailgraph_ext.pl ./
[root@mail mailgraph_ext]# ln -s /usr/local/apache/htdocs/extman/addon/mailgraph_ext/qmonitor.pl ./
[root@mail mailgraph_ext]# cd /usr/local/apache/htdocs/extman/addon/mailgraph_ext/
[root@mail mailgraph_ext]# ./mailgraph-init start ---启动mailgraph-init
Starting mail statistics grapher: mailgraph_ext
Starting queue statistics grapher: qmonitor
[root@mail mailgraph_ext]#
现在再次进入extman的时候,就可以看到邮件队列等信息的图象了。
七、说下要开机自启动的程序:
1、postfix
#echo "/usr/sbin/postfix start" >> /etc/rc.local
2、cyrus-sasl
#chkconfig --level 35 sasld on
3、courier-authlib
#chkconfig --level 35 courier-authlib on
4、dovecot
# echo "/usr/local/sbin/dovecot -c /etc/dovecot.conf" >> /etc/rc.local
5、显示extman版本信息的cmdserver
#echo "/usr/local/apache/htdocs/extman/daemon/cmdserver -d" >> /etc/rc.local
6、mailgraph-init 绘图程序:
# echo "/usr/local/apache/htdocs/extman/addon/mailgraph_ext/mailgraph-init start" >> /etc/rc.local
最后把/etc/rc.local的内容给出来:
[root@mail ~]# cat /etc/rc.local
#!/bin/sh
#
# Thi s script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/usr/local/apache/bin/apachectl start
/usr/sbin/postfix start
/usr/local/sbin/dovecot -c /etc/dovecot.conf
/usr/local/apache/htdocs/extman/daemon/cmdserver -d
/usr/local/apache/htdocs/extman/addon/mailgraph_ext/mailgraph-init start
[root@mail ~]#
其实这只是一个具有收发邮件的一个邮件服务器,垃圾邮件的过滤,还没有写文档。可以根据企业的需要来对里面的内容进行修改。