我们来一步一步来构建MailServer,支持虚拟用户、虚拟域,支持Webmail,支持Mysql。这个实验化了两天的时间完成的,其中各种崎岖,认真的照着做,问题不大。不过新手还是不要做这个了,需要整合的东西太多。
原理见:http://laoguang.blog.51cto.com/6013350/1054674
我用的是redhat5.8,mail主机:IP:172.16.1.10,FQDN:mail.laoguang.me.,域laoguang.me ,SElinux已经关闭(切记这个新手最容易忘记这个,遇到错先查看它),iptables也已经关闭。
o.环境准备
0.1 安装开发库
yum -y groupinstall "Development Libraries" "Development Tools" \
"Legacy Software Development" "X Software Development"
0.2 安装post编译需要的一些库(rpm安装即可)
yum -y install tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl \
libtool-ltdl-devel expect
0.3 如果安装sendmail请关闭它,并禁止开机启动,否则会冲突的
service sendmail stop
chkconfig sendmail off
一,构建DNS服务器
为什么要构建DNS服务器呢?因为当用户发信的时候,比如发信给[email protected]时,postfix会查询163.com的MX记录,获得MX的A记录,然后把邮件发送给这个主机,同样当我们给自己给自己发送邮件的时候,如果是发送的地址类似 [email protected]时postfix也会去查询MX记录,如果你发送的是[email protected]时,则不需要解析MX记录。
1.1 安装bind (我就yum安装了,很轻松),由于redhat5.8带了两个版本的bind,于是我先卸载了低版本的bind,bind-libs,bind-utils,再安装高版本的bind97.
rpm -e bind bind-libs bind-utils
yum -y install bind97 bind97-libs bind-utils
1.2 配置bind配置文件 /etc/named.conf(由于不是本文的重点所以简单写一下过程)
mv /etvc/named.conf /etc/named.conf.bak
vim /etc/named.conf ##内容如下
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "laoguang.me" IN {
type master;
file "laoguang.me.zone";
};
zone "1.16.172.in-addr.arpa" IN {
type master;
file "172.16.1.zone";
};
1.3 建立区域文件 /var/named/laoguang.me /var/named/172.16.1.zone
vim /var/named/laoguang.me
$TTL 86400
@ IN SOA ns admin (
10
2H
5M
7D
3H )
IN NS ns
IN MX 10 mail
ns IN A 172.16.1.10
mail IN A 172.16.1.10
vim /var/named/172.16.1.zone
$TTL 86400
@ IN SOA ns admin (
10
2H
5M
7D
3H )
IN NS ns
ns IN A 172.16.1.10
10 IN PTR ns.laoguang.me.
10 IN PTR mail.laoguang.me.
chown :named /etc/named.conf /var/named/laoguang.me.zone /var/named/172.16.1.zone
1.4 启动named 并验证是否能正确解析,并更改本机dns记录
service named start
dig -t MX laoguang.me @127.0.0.1 ##如果能看到A记录代表成功了
vim /etc/resolv.conf
nameserver:172.16.1.10
二.安装配置Mysql
2.1 下载mysql
wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.28-linux2.6-i686.tar.gz
2.2 解压mysql
tar xvf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/
2.3 制作软连接
cd /usr/local ;
ln -sv mysql-5.5.28-linux2.6-i686 mysql
2.4 为mysql准备运行用户与数据目录
groupadd �Cr mysql
useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
mkdir -pv /data/mysql
chown mysql:mysql /data/mysql
2.5 初始化mysql
cd /usr/local/mysql
chown -R root:mysql .
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
ls /data/mysql 查看是否生成了系统数据库
cp support-files/my-huge.cnf /etc/my.cnf ##提供配置文件
##修改配置文件/etc/my.cnf添加一行
datadir = /data/mysql
cp support-files/mysql.server /etc/init.d/mysqld ##提供mysql脚本
##添加开机启动
chkconfig �Cadd mysqld
chkconfig mysqld on
##启动mysqld
service mysqld restart
2.6 把mysql的命令添加到path中,并更新man记录
echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
vim /etc/man.config ##文件MANPATH区位置添加如下
MANPATH /usr/local/mysql/man
2.7 把mysql库文件头文件导入到系统
echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
ln -sv /usr/local/mysql/include /usr/include/mysql
ldconfig -v ##重新加载库文件到缓存
到此mysql整理完毕了!!
三.编译安装配置postfix
3.1为postfix准备用户用户组,并为其MDA准备用户与组
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
3.2让postfix支持sasl与ssl需要cyrus 与openssl支持,查看是否安装了
rpm -qa | grep sasl
rpm -q openssl
cyrus-sasl-plain-2.1.22-5.el5_4.3
cyrus-sasl-lib-2.1.22-5.el5_4.3
cyrus-sasl-devel-2.1.22-5.el5_4.3
cyrus-sasl-2.1.22-5.el5_4.3
openssl-0.9.8e-22.el5
如果有以上包就继续,没有的话请安装,版本可以不一致。
3.3 下载安装postfix
wget ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-2.9.4.tar.gz
tar xvf postfix-2.9.4.tar.gz
cd postfix-2.9.4
make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH \
-DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS' 'AUXLIBS=-L/usr/local/mysql/lib \
-lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
##前半段指定头文件所在路径 后半段指定库文件所在路径##
make && make install
##把第二个选项[postfix的临时目录]改为如下所示,其它的都默认,回车完毕
tempdir: [/root/postfix-2.9.1] /tmp/postfix
##安装完毕后运行,根据提示运行
newaliases
3.4 修改配置文件/etc/postfix/main.cf
mv /etc/postfix/main.cf /etc/postfix/main.cf.org
# vim /etc/postfix/main.cf
##修改以下几项为您需要的配置
myhostname = mail.laoguang.me ##主机名
mydomain = laoguang.me ##域名
myorigin = $mydomain ##如果用户发邮件没有指定@域名,postfix发送时自动给补上
inet_interfaces = localhost,$myhostname ##postfix监听的端口
mydestination = $myhostname, localhost, $mydomain ##这个指的是postfix负责接收的区域
mynetworks = 172.16.0.0/16, 127.0.0.0/8 ##这个表示凡是这么来的客户端postfix才负责中继
说明:
1、在postfix的配置文件中,参数行和注释行是不能处在同一行中的;
2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用;
3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix;
4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix会把第一个字符为空格或tab的文本行视为上一行的延续;
3.5启动postfix,并测试
postfix start ##启动postfix查看是否报错,相应的关闭则为stop
netstat -tlnp | grep 25 ##查看是否监听了25端口
tcp 0 0 172.16.1.10:25 0.0.0.0:* LISTEN 15086/master
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 15086/master
##这块我得��嗦一下,sendmail把所有功能集合到一个程序中,导致其很复杂,并且不够安全,postfix作者采用模块化的设计思路,把各个功能剥离开来,形成一个个模块化程序,通过一个叫master的程序负责调用控制它们,所以比sendmail更安全,并且稳定。
添加一个用户测试:
useradd redhat
echo "admin" | passwd --stdin redhat
发信给redhat查看是否能收到,为了验证前面说的理论,我们用telnet来发送邮件
telnet 172.16.1.10 25
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
220 mail.laoguang.me ESMTP Postfix
helo mail.laoguang.me ##询问smtpd是否在线
250 mail.laoguang.me ##对方给了相应
mail from:root ##告诉smtpd谁发来的信
250 2.1.0 Ok ##smtpd给了回复
rcpt to:redhat ##告诉smtpd邮件是发给谁的,不加@主机名,smtpd会自动给补加$myorigin
250 2.1.5 Ok ##给了响应
data ##告诉smtpd下面是内容
354 End data with <CR><LF>.<CR><LF> ##服务器提示以 "." 结束内容
Subject hello linux ##指定邮件主题,可以省略
hello linux ,hell GNU ##随意写的内容
. ##结束
250 2.0.0 Ok: queued as E28CA167E3B ##smtpd提示发送序列号
su到redhat查看邮件是否收到了
su �C redhat
[redhat@mail ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/redhat": 1 message 1 new
>N 1 [email protected] Tue Nov 6 06:09 14/498
&
从中看到邮件redhat收到了,但是你不觉得这个很恐怖吗,因为每个连上主机的人都可以冒名的发邮件,这个可不得了,所以认证是非常必要的了,这到后面再说。
3.6 如果一切正常,那么让postfix开机启动,可以找个脚本,也可以直接 把命令写到/etc/rc.d/rc.local ,脚本由于太占版面了,所以还是采用第二种吧,其实第一种效果更不错,还能实现服务重启,如果有需要,就去网上找吧,或者把rpm安装后生成的脚本复制过来即可使用。
echo "/usr/sbin/postfix start " >> /etc/rc.d/rc.local
四.为postfix提供别名支持
4.1 vim /etc/postfix/main.cf
##取消alias_maps的注释
alias_maps = hash:/etc/aliases
##再添加一个账户,测试别名机制是否有效
useradd hadoop
echo "admin" | passwd --stdin hadoop
##修改/etc/aliases 最后添加
redhat: hadoop ##第一个字段为初始目标,第二个地址为最终地址
newaliase ##将刚修改的文件编成hash编码,也可以运行postaliase hash:/etc/aliases
##发信给redhat查看日志是否转发,并su到hadoop用户查看是否收到邮件
echo "hi,redhat" | mail -s "redhat" redhat
tail /var/log/maillog ##查看是否转发
su �C hadoop
五.postfix实现对客户端访问的基本控制
通过这几个参数来控制:
smtpd_client_restrictions ##这个是限制客户端来源ip
smtpd_data_restrictions ##这个是限制发送data 来源
smtpd_end_of_data_restrictions ##这个是限制那个 '.' 发送来源的
smtpd_etrn_restrictions ##这个是限制信件来源的即 mail from:
smtpd_helo_restrictions ##这个是限制发送helo IP来源
smtpd_recipient_restrictions ##这个是限制给谁中继的
smtpd_sender_restrictions ##这个是限制发送者地址的即mail from
自定义访问表的条件通常使用check_client_access, check_helo_access, check_sender_access, check_recipient_access进行,它们后面通常跟上type:mapname格式的访问表类型和名称。
下面我们来实现这个情况:禁止来自 [email protected],和来自 @microsoft域的的邮件发送到本机
5.1 编辑/etc/postfix/sender.deny (这个名字可以自己起)
[email protected] REJECT
microsoft.com REJECT
5.2 编码成hash编码
postmap hash:/etc/postfix/sender.deny
5.3 更改主配置文件,根据此文件限制
在主配置文件中查找smtpd_sender_restrictions如果没有就找合适文件添加
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender.deny
5.4 测试设置是否生效
[root@mail ~]# telnet 172.16.1.10 25
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
220 mail.laoguang.me ESMTP Postfix
helo mail.laoguang.me
250 mail.laoguang.me
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 <oracle@163.com>: Sender address rejected: Access denied
由此可知已经生效了.
六.安装dovecot用测试收信发信
6.1 安装dovecot
为了简便咱们yum安装吧
yum -y install dovecot
6.2 编辑dovecot配置文件 /etc/dovecont.conf
protocols = imap pop3 ##取消这个注释,启用对imap pop3的监听
6.3 启动dovecot
service dovecot start
6.4 验证pop3收信
6.4.1通过telnet验证
telnet 172.16.1.10 110
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
+OK Dovecot ready.
USER redhat
+OK
PASS admin
+OK Logged in.
LIST
+OK 1 messages:
1 387
6.4.2通过OE验证
新建立账户
下一步直到完成。
下面给自己发一封邮件测试能否收到:
接受邮件查看是否收到了 ##由于上面设置别名的时候把发往redhat的信全部转发给了Hadoop,通过日志查看到的,所以取消别名重新测试。##如果收不到请确认你的dns指向你刚才建立的dns服务器地址,这就是我们建立dns服务器的作用。
由此可知,一切正常。
七.为postfix开启Cyrus-sasl认证功能
7.1 查看postfix是否支持sasl认证
postconf -a ##如果显示以下代表支持cyrus
cyrus
dovecot
7.2 修改/etc/postfix/main.cf,修改mynetworks,并在配置文件中加入sasl的支持
mynetworks = 127.0.0.0/8
######################CYRUS-SASL############################
broken_sasl_auth_clients = yes
######下面这个代表给mynetworks与通过sasl认证的用户中继。其它的拒绝
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 ##启用sasl
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous ##不允许匿名
######################CYRUS-END##########################
7.3 修改/etc/sysconfig/saslauthd验证方法
MECH=shadow ##基于pam验证配置比较复杂,我们以shadow为例
7.4 建立/usr/lib/sasl2/smtpd.conf 添加以下内容
pwcheck_method: saslauthd ##用sasl认证程序检查密码
mech_list: PLAIN LOGIN
7.5 重新加载postfix,启动cyrus-sasl
postfix reload
service saslauthd start
7.6检测认证修改是否成功
7.6.1 命令测试 ##这个只能保证cyrus-sasl可以正常验证了,不能保证与postfix结合正确
testsaslauthd -u redhat -p admin
0: OK "Success."
7.6.2 telnet测试cyrus-sasl是否与postfix结合正确
[root@mail ~]# telnet 172.16.1.10 25
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
220 mail.laoguang.me ESMTP Postfix
auth login ##手动输入,意思是我要验证
334 VXNlcm5hbWU6 ##对方的响应,不过是base64编码的
cmVkaGF0 ##这个是账号redhat通过base64编码的 echo -n "redhat" | openssl base64
334 UGFzc3dvcmQ6 ##同样还是响应
YWRtaW4= ##密码 base64编码的见楼上
235 2.7.0 Authentication successful ##这个代表我们验证通过了
##下面测试通过认证后能否中继邮件
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
.
250 2.0.0 Ok: queued as D07A1167EBC
由此看见服务器是给中继的。
##下面测试不通过认证能否中继
telnet 172.16.1.10 25
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
220 mail.laoguang.me ESMTP Postfix
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 <jerry@qq.com>: Relay access denied
##提示不允许中继,看来设置都是正确的。
八,Dovecot基于ssl实现pop3s,imaps
由于用户登录验证都是基于明文的,所以对用户来说加密显得非常必要,下面我们来实现dovecot基于ssl实现加密验证与传输,过程是很是简单。
8.1 为mailserver提供私钥与证书,生成过程见http://laoguang.blog.51cto.com/6013350/1035608,我们把生成的密钥证书放到/etc/dovecot目录下分别为dovecot.key,dovecot.cert
8.2 修改dovecot配置文件/etc/dovecot.conf
protocols = imaps pop3s
ssl_cert_file = /etc/dovecot/dovecot.cert
ssl_key_file = /etc/dovecot/dovecot.key
8.3 重启dovecot 查看监听端口
service dovecot restart
netstat �Ctnlp | grep dovecot ##查看监听的是否为995与993
8.4 更改oe测试
直接收发信提示连接服务器失败,因为我们关闭了pop3与imap,下面设置OE为pop3s
再收发邮件测试,一切OK,你可以开个抓包工具测试是否能抓到有用的数据。
九.安装Courier authentication library
由于sasl直接调用mysql验证实现起来非常困难,而调用Courier authlib库,让它去调用mysql实现起来很是easy
9.1 下载Courier authlib ,解压
wget http://ncu.dl.sourceforge.net/project/courier/authlib/0.64.0/courier-authlib-0.64.0.tar.bz2
tar xvf courier-authlib-0.64.0.tar.bz2
cd courier-authlib-0.64.0
9.2 编译安装Couier-autlib
./configure \
--prefix=/usr/local/courier-authlib \
--sysconfdir=/etc \
--without-authpam \
--without-authshadow \
--without-authvchkpw \
--without-authpgsql \
--with-authmysql \
--with-mysql-libs=/usr/local/mysql/lib \
--with-mysql-includes=/usr/local/mysql/include \
--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
#####如果报如此错 --with-authmyql specified bu no mysqlclient.so 先把mysql的rpm卸载掉 rpm -e -nodeps msyql ,courier-authlib安装完毕后在把mysql安装上去##切记Courier-authlib安装成功够把msyql再安装回去,配置文件保留原来的,记得备份
make && make install
9.3 提供配置文件,把生成的实例配置文件改名为配置文件
cp /etc/authdaemonrc.dist /etc/authdaemonrc
cp /etc/authmysqlrc.dist /etc/authmysqlrc
##修改配置文件/etc/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=5 ##修改为合适值
##修改配置文件/etc/authmysqlrc下面内容
MYSQL_SERVER localhost
MYSQL_PORT 3306 ##指定你的mysql监听的端口,这里使用默认的3306
MYSQL_USERNAME extmail ##这时为后文要用的数据库的所有者的用户名
MYSQL_PASSWORD extmail ##数据库密码
MYSQL_SOCKET /tmp/mysql.sock ##mysql的套接字,我安装的mysql是/tmp/mysql.sock
MYSQL_DATABASE extmail ##数据库的名字
MYSQL_USER_TABLE mailbox ##记录用户信息的表名
MYSQL_CRYPT_PWFIELD password ##知道指定用户密码的列是psssword列
MYSQL_UID_FIELD '2525' ##填写postfix的uid
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) ##虚拟用户邮箱所在列名
##一些账号密码等一定与后面建立时的一致,由于建立这些表比较复杂,我们选泽了extmail提供的模板
## 将来初始化extmail时生成表名,账号密码都与上面填写相同。
建立/var/mailbox并更改属主数组为postfix
mkdir /var/mailbox
chown postfix:postfix
9.4 提供脚本
cp courier-authlib.sysvinit /etc/init.d/authlibd
chmod +x /etc/init.d/authlibd
chkconfig --add authlibd
chkconfig authlibd on
9.5 启动authlib
service authlibd start
authlib安装完毕
十.整合sasl与courier-authlib,以让postfix调用
10.1 编辑 /usr/lib/sasl2/smtpd.conf ,更改为如下内容
pwcheck_method: authdaemond ##更改sasl验证方式,由authdaemon来验证,而下面的authdaemon套接字指向的就是authlib
log_level: 3 ##日志级别,用于排错
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket ##套接字所在路径
十一.让postfix支持虚拟用户与虚拟域
11.1 编辑/etc/postfix/main.cf 添加内容如
########################Virtual Mailbox Settings########################
virtual_mailbox_base = /var/mailbox ##mailbox所在目录
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf ##虚拟邮箱映射,这些文件extmail中有模板
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
virtualvirtual_transport = virtual
########################Virtual Mailbox End########################
启用虚拟域后注销中心域中的myhostname, mydestination, mydomain, myorigin 以防与虚拟用户中的域冲突,假设你本机域为laoguang.me,虚拟域也为laoguang.me,那你说到底是哪个域?
11.2 用extmail的模板生成需要的数据库
11.2.1 下载 extmail 与extman
http://pan.baidu.com/share/link?shareid=127912&uk=2501966565
http://pan.baidu.com/share/link?shareid=127915&uk=2501966565
11.2.2 解压 extman 并用启用脚本生成数据库
tar xvf extman-1.1.tar.gz
tar xvf extman-1.1.tar.gz ;cd docs;
##由于mysql引擎定义由TYPE改为Engine所以先更改脚本extmail.sql与init.sql
sed -i 's@TYPE=MyISAM@Engine=MyISAM@g' extmail.sql
sed -i 's@TYPE=MyISAM@Engine=MyISAM@g' init.sql
##查看是否更改成功了
----------生成数据库---------
##如果没设置mysql的root密码
mysql <extmail.sql
mysql <init.sql
###如果你的数据库root设置密码了##
mysql -uroot -p <extmail.sql
mysql -uroot -p <init.sql
##可以去mysql中查看是否生成了extmail数据库
刚才postfix主配置文件定义了好几个映射文件也在此目录下,拷贝到/etc/postfix下
cp mysql_virtual_* /etc/postfix/ ##此步容易遗忘
11.3 授权生成的数据库给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;
十二.配置dovecot支持mysql
12.1 修改主配置文件 /etc/dovecot.conf
mail_location = maildir:/var/mailbox/%d/%n/Maildir
auth default { ##查找它
mechanisms = plain
#passdb pam { ##注销pam验证密码
#} ##注销
#userdb passwd { 注销用户名在passwd中查询
#}
passdb sql { ##启用sql的验证
args = /etc/dovecot-mysql.conf ##指定参数文件
}
userdb sql { ##启用用户信息的sql验证
args = /etc/dovecot-mysql.conf ##指定参数文件
}
12.2 建立dovecot使用msyql的配置文件
vim /etc/dovecot-mysql.conf ##内容如下
driver = mysql
connect = host=localhost=/tmp/mysql.sockdbname=extmailuser=extmailpassword=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'
##斜体部分请更改为你mysql套接字的位置
12.3 重启dovecot
service dovecot restart
十三.安装extmail提供webmail界面
13.1 在安装extmail之前请先安装apache,如果编译安装请参考http://laoguang.blog.51cto.com/6013350/1039208,我就以rpm安装为例了
yum -y install httpd
13.2 解压exmail并拷贝到适当目录
tar zxvf 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
##因为extmail配置文件中设置它的位置在/var/www/extsuite/中,
我们直接把它放到这个目录中,省的修改配置文件了
##拷贝实例配置文件,建立为配置文件
13.2 修改extmail配置文件 /var/www/exsuite/extmail/webmail.cf一下内容
SYS_USER_LANG = zh_CN ##设置字符集中文你懂得
SYS_MAILDIR_BASE = /var/mailbox ##邮箱目录
SYS_MYSQL_USER = extmail ##连接mysql的用户名
SYS_MYSQL_PASS = extmail ##连接mysql的密码
SYS_MYSQL_DB = extmail ##数据库名字
SYS_MYSQL_SOCKET = /tmp/mysql.sock ## msyql的套接字位置
SYS_MYSQL_HOST = localhost ##mysql的地址
SYS_MYSQL_TABLE = mailbox ##表名
SYS_MYSQL_ATTR_USERNAME = username ##验证时用户名在msyql中的列名
SYS_MYSQL_ATTR_DOMAIN = domain ##所在域在msyql中的列名
SYS_MYSQL_ATTR_PASSWD = password ##密码在mysql中的列名
SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket
##验证时使用的套接字
13.3 修改apache配置文件/etc/httpd/conf/httpd.conf 如果是编译的请自己根据自己编译的编辑配置文件。
vim /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html" ##注销中心主机 281行左右
NameVirtualHost *:80 ##启用虚拟主机 基本在最后了
###添加以下内容####
<VirtualHost *:80>
ServerName mail.laoguang.me
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
Alias /extmail /var/www/extsuite/extmail/html
SuexecUserGroup postfix postfix
</VirtualHost>
##修改 cgi执行文件属主为apache运行身份用户:
chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
##启动httpd
service httpd start
登陆网页测试,发现缺少一个组件Unix::Syslog,extmail需要依赖它,下面来安装
13.4 安装Unix::Syslog
wget http://mirrors.devlib.org/cpan/authors/id/M/MH/MHARNISCH/Unix-Syslog-1.1.tar.gz
##如果链接哪天失效了请去 http://http://search.cpan.org/ 搜索下载
tar xvf Unix-Syslog-1.1.tar.gz
cd Unix-Syslog-1.1
perl Makefile.PL
make && make install
##再次访问网页172.16.1.10发现无码的世界确实不错,不过还不能管理注册管理账户
十四,安装extman,支持邮箱管理
14.1 安装配置extman
前面已经解压并使用过extman了 直接移过去吧
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_CAPTCHA_ON = 0 ##是否使用验证码,暂不使用,需要额外组建支持
SYS_DEFAULT_UID = 2525
SYS_DEFAULT_GID = 2525
SYS_MYSQL_USER = extmail ##数据库账号
SYS_MYSQL_PASS = extmail ##密码
SYS_MYSQL_SOCKET = /tmp/mysql.sock ##mysql套接字
14.2 修改extman中cgi的属组属主并编辑httpd.conf
chown -R postfix.postfix /var/www/extsuite/extman/cgi/
在apache的主配置文件中Extmail的虚拟主机部分,添加如下两行:
ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
Alias /extman /var/www/extsuite/extman/html
根据配置文件创建extman运行时所需的临时目录,并修改其相应的权限:
mkdir -pv /tmp/extman
chown postfix.postfix /tmp/extman
14.3 登陆管理首页发现缺少一个DBD组件,它是perl-DBD-MySQL,安装它
到此为止你可以登陆并管理这个webmail了,登陆管理页面输入默认管理账号:[email protected] 密码:extmail*123*
新建一个域,如ibm.com
建立完毕后点击那个铅笔按钮,修改可以自由注册,建立时勾选的不生效。
新建两个账户extmail测试收发邮件.
由此可见webmail收发邮件正常,再来测试OE客户端收发邮件,因为他们的验证流程不一样,不记得了看最上面的原理图.
工具--账户--添加--邮件--显示名 linux --pop3 172.16.1.10 smtp 172.16.1.10 --账户名 [email protected] 密码 admin --完成
给自己发送一封邮件测试
看来整个过程是都是正确,下面再来完善一下,以为登陆Extmail管理后台发现状态没有日志,下面来开启日志,但是日志功能却依赖了好几个包。
十五.配置Mailgraph_ext,使用Extman的图形日志
15.1 安装图形日志的运行所需要的软件包Time::HiRes、File::Tail和rrdtool,其中前两个包您可以去http://search.cpan.org搜索并下载获得,后一个包您可以到 http://oss.oetiker.ch/rrdtool/pub/?M=D下载获得; 注意安装顺序不能改换。
15.3 安装Time::HiRes
tar zxvf Time-HiRes-1.9707.tar.gz
cd Time-HiRes-1.9707
perl Makefile.PL
make
make test
make install
15.4 安装File::Tail
tar zxvf File-Tail-0.99.3.tar.gz
cd File-Tail-0.99.3
perl Makefile
make
make test
make install
15.5 安装rrdtool-1.2.23
tar zxvf rrdtool-1.2.23.tar.gz
cd rrdtool-1.2.23
./configure --prefix=/usr/local/rrdtool
make
make install
15.6 创建必要的符号链接(Extman会到这些路径下找相关的库文件)
ln -sv /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/auto/RRDs/RRDs.so \
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/
ln -sv /usr/local/rrdtool/lib/perl/5.8.8/RRDp.pm /usr/lib/perl5/5.8.8
ln -sv /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/RRDs.pm \
/usr/lib/perl5/5.8.8
15.7 启动mailgraph图形化
##复制mailgraph_ext到/usr/local,并启动之
cp -r /var/www/extsuite/extman/addon/mailgraph_ext /usr/local
/usr/local/mailgraph_ext/mailgraph-init start
##启动cmdserver(在后台显示系统信息)
/var/www/extsuite/extman/daemon/cmdserver --daemon
15.8 添加到开机启动
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
到此图形日志已经可以实现了,发一些邮件,过几分钟查看日志,到此postfix基本配置完毕了,有时间再尝试与与maildrop,与反病毒垃圾软件结合实现过滤功能。
后记:理解了邮件收发的整个过程后配置这个邮件系统并不困难,尤其是那幅流程图要深入了解,出现问题后再结合日志基本能确定问题所在,由于整个的软件很多,所以配置时要万般小心,有时候一个空格可能导致不能正常运行,要按着流程慢慢来,细心点配置成功难度不是很高,另外再次郑重说明请把你的SElinux关了,最后感谢马老师。