您的位置:首页 > 大数据 > 人工智能

基于postfix一步一步构建Mailserver,支持虚拟用户,支持WebMail

2013-11-20 17:46 423 查看
我们来一步一步来构建MailServer,支持虚拟用户、虚拟域,支持Webmail,支持Mysql。这个实验化了两天的时间完成的,其中各种崎岖,认真的照着做,问题不大。不过新手还是不要做这个了,需要整合的东西太多。
原理见:/article/4243217.html
我用的是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服务器呢?因为当用户发信的时候,比如发信给tom@163.com时,postfix会查询163.com的MX记录,获得MX的A记录,然后把邮件发送给这个主机,同样当我们给自己给自己发送邮件的时候,如果是发送的地址类似 admin@laoguang.me时postfix也会去查询MX记录,如果你发送的是admin@mail.laoguang.me时,则不需要解析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 –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.3openssl-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 root@mail.laoguang 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

mail

五.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格式的访问表类型和名称。
下面我们来实现这个情况:禁止来自 oracle@163.com,和来自 @microsoft域的的邮件发送到本机
5.1 编辑/etc/postfix/sender.deny (这个名字可以自己起)
oracle@163.com  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:oracle@163.com

250 2.1.0 Ok

rcpt to:redhat@qq.com

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:tom@163.com

250 2.1.0 Ok

rcpt to:jerry@qq.com

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:tom@163.com

250 2.1.0 Ok

rcpt to:jerry@qq.com

554 5.7.1 <jerry@qq.com>: Relay access denied

##提示不允许中继,看来设置都是正确的。

八,Dovecot基于ssl实现pop3s,imaps
由于用户登录验证都是基于明文的,所以对用户来说加密显得非常必要,下面我们来实现dovecot基于ssl实现加密验证与传输,过程是很是简单。
8.1 为mailserver提供私钥与证书,生成过程见/article/4243210.html,我们把生成的密钥证书放到/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 与extmanhttp://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,如果编译安装请参考/article/4243211.html,我就以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了,登陆管理页面输入默认管理账号:root@extmail.org 密码:extmail*123*



新建一个域,如ibm.com



建立完毕后点击那个铅笔按钮,修改可以自由注册,建立时勾选的不生效。
新建两个账户extmail测试收发邮件.





由此可见webmail收发邮件正常,再来测试OE客户端收发邮件,因为他们的验证流程不一样,不记得了看最上面的原理图.
工具--账户--添加--邮件--显示名 linux --pop3 172.16.1.10 smtp 172.16.1.10 --账户名 linux@ibm.com 密码 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关了,最后感谢马老师。
本文出自 “Free Linux,Share Linux” 博客,请务必保留此出处/article/4243216.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: