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。这些软件都可以从 这个网站上去下载的。下面就按顺序来安装这三个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 现在就可以使用 来访问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
六、现在就可以通过 来访问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 ~]#
其实这只是一个具有收发邮件的一个邮件服务器,垃圾邮件的过滤,还没有写文档。可以根据企业的需要来对里面的内容进行修改。