我们来一步一步来构建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
二.安装配置Mysql2.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 –r 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 –add 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 – 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 – 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 –tnlp | 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.sock 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'
- ##斜体部分请更改为你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关了,最后感谢马老师。