我们来一步一步来构建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 安装开发库

  1. yum -y groupinstall "Development Libraries" "Development Tools" \

  2. "Legacy Software Development"  "X Software Development"

0.2 安装post编译需要的一些库(rpm安装即可)

  1. yum -y install tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl \

  2. libtool-ltdl-devel expect

0.3 如果安装sendmail请关闭它,并禁止开机启动,否则会冲突的

  1. service sendmail stop

  2. 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.

  1. rpm -e bind bind-libs bind-utils

  2. yum -y install bind97 bind97-libs bind-utils

1.2 配置bind配置文件 /etc/named.conf(由于不是本文的重点所以简单写一下过程)

  1. mv /etvc/named.conf /etc/named.conf.bak

  2. vim /etc/named.conf  ##内容如下

  3. options {

  4. directory "/var/named";

  5. };

  6. zone "." IN {

  7. type hint;

  8. file "named.ca";

  9. };

  10. zone "laoguang.me" IN {

  11. type master;

  12. file "laoguang.me.zone";

  13. };

  14. zone "1.16.172.in-addr.arpa" IN {

  15. type master;

  16. file "172.16.1.zone";

  17. };

1.3 建立区域文件 /var/named/laoguang.me  /var/named/172.16.1.zone

  1. vim /var/named/laoguang.me

  2. $TTL 86400

  3. @                       IN      SOA     ns      admin (

  4. 10

  5. 2H

  6. 5M

  7. 7D

  8. 3H )

  9. IN      NS      ns

  10. IN      MX  10  mail

  11. ns                      IN      A       172.16.1.10

  12. mail                    IN      A       172.16.1.10

  13. vim /var/named/172.16.1.zone

  14. $TTL 86400

  15. @                       IN      SOA     ns      admin (

  16. 10

  17. 2H

  18. 5M

  19. 7D

  20. 3H )

  21. IN      NS      ns

  22. ns                      IN      A       172.16.1.10

  23. 10                      IN      PTR     ns.laoguang.me.

  24. 10                      IN      PTR     mail.laoguang.me.

  25. chown :named /etc/named.conf /var/named/laoguang.me.zone /var/named/172.16.1.zone

1.4 启动named 并验证是否能正确解析,并更改本机dns记录

  1. service named start

  2. dig -t MX laoguang.me @127.0.0.1 ##如果能看到A记录代表成功了

  3. vim /etc/resolv.conf

  4. nameserver:172.16.1.10

二.安装配置Mysql 
2.1 下载mysql 
  1. wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.28-linux2.6-i686.tar.gz

2.2 解压mysql

  1. tar xvf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/

2.3 制作软连接

  1. cd /usr/local ;

  2. ln -sv mysql-5.5.28-linux2.6-i686 mysql

2.4 为mysql准备运行用户与数据目录

  1. groupadd –r mysql

  2. useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql

  3. mkdir -pv /data/mysql

  4. chown mysql:mysql /data/mysql

2.5 初始化mysql

  1. cd /usr/local/mysql

  2. chown -R root:mysql .

  3. ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql

  4. ls /data/mysql  查看是否生成了系统数据库

  5. cp support-files/my-huge.cnf /etc/my.cnf   ##提供配置文件

  6. ##修改配置文件/etc/my.cnf添加一行

  7. datadir = /data/mysql

  8. cp support-files/mysql.server /etc/init.d/mysqld  ##提供mysql脚本

  9. ##添加开机启动

  10. chkconfig –add mysqld

  11. chkconfig mysqld on

  12. ##启动mysqld

  13. service mysqld restart

2.6 把mysql的命令添加到path中,并更新man记录

  1. echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh

  2. vim /etc/man.config  ##文件MANPATH区位置添加如下

  3. MANPATH /usr/local/mysql/man

2.7 把mysql库文件头文件导入到系统

  1. echo "/usr/local/mysql/lib"  > /etc/ld.so.conf.d/mysql.conf

  2. ln -sv /usr/local/mysql/include /usr/include/mysql

  3. ldconfig -v  ##重新加载库文件到缓存

到此mysql整理完毕了!!

三.编译安装配置postfix

3.1为postfix准备用户用户组,并为其MDA准备用户与组

  1. groupadd -g 2525 postfix

  2. useradd -g postfix -u 2525 -s /sbin/nologin -M postfix

  3. groupadd -g 2526 postdrop

  4. useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop

3.2让postfix支持sasl与ssl需要cyrus 与openssl支持,查看是否安装了

  1. rpm -qa | grep sasl

  2. 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

  1. wget ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-2.9.4.tar.gz

  2. tar xvf postfix-2.9.4.tar.gz

  3. cd postfix-2.9.4

  4. make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH \

  5. -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS' 'AUXLIBS=-L/usr/local/mysql/lib \

  6. -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'

  7. ##前半段指定头文件所在路径 后半段指定库文件所在路径##

  8. make && make install

  9. ##把第二个选项[postfix的临时目录]改为如下所示,其它的都默认,回车完毕

  10. tempdir: [/root/postfix-2.9.1] /tmp/postfix

  11. ##安装完毕后运行,根据提示运行

  12. newaliases

3.4 修改配置文件/etc/postfix/main.cf

  1. mv /etc/postfix/main.cf /etc/postfix/main.cf.org

  2. # vim /etc/postfix/main.cf

  3. ##修改以下几项为您需要的配置

  4. myhostname = mail.laoguang.me   ##主机名

  5. mydomain = laoguang.me   ##域名

  6. myorigin = $mydomain       ##如果用户发邮件没有指定@域名,postfix发送时自动给补上

  7. inet_interfaces = localhost,$myhostname   ##postfix监听的端口

  8. mydestination = $myhostname, localhost, $mydomain ##这个指的是postfix负责接收的区域

  9. 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,并测试

  1. postfix start    ##启动postfix查看是否报错,相应的关闭则为stop

  2. netstat -tlnp | grep 25  ##查看是否监听了25端口

  3. tcp     0      0 172.16.1.10:25         0.0.0.0:*         LISTEN     15086/master

  4. tcp     0      0 127.0.0.1:25           0.0.0.0:*         LISTEN     15086/master

##这块我得啰嗦一下,sendmail把所有功能集合到一个程序中,导致其很复杂,并且不够安全,postfix作者采用模块化的设计思路,把各个功能剥离开来,形成一个个模块化程序,通过一个叫master的程序负责调用控制它们,所以比sendmail更安全,并且稳定。

添加一个用户测试:

  1. useradd redhat

  2. echo "admin" | passwd --stdin redhat

发信给redhat查看是否能收到,为了验证前面说的理论,我们用telnet来发送邮件

  1. telnet 172.16.1.10 25

  2. Trying 172.16.1.10...

  3. Connected to mail.laoguang.me (172.16.1.10).

  4. Escape character is '^]'.

  5. 220 mail.laoguang.me ESMTP Postfix

  6. helo mail.laoguang.me              ##询问smtpd是否在线

  7. 250 mail.laoguang.me              ##对方给了相应

  8. mail from:root                    ##告诉smtpd谁发来的信

  9. 250 2.1.0 Ok                      ##smtpd给了回复

  10. rcpt to:redhat              ##告诉smtpd邮件是发给谁的,不加@主机名,smtpd会自动给补加$myorigin

  11. 250 2.1.5 Ok                      ##给了响应

  12. data                              ##告诉smtpd下面是内容

  13. 354 End data with <CR><LF>.<CR><LF> ##服务器提示以 "." 结束内容

  14. Subject hello linux                 ##指定邮件主题,可以省略

  15. hello linux ,hell GNU               ##随意写的内容

  16. .                                   ##结束

  17. 250 2.0.0 Ok: queued as E28CA167E3B  ##smtpd提示发送序列号

su到redhat查看邮件是否收到了

  1. su – redhat

  2. [redhat@mail ~]$ mail

  3. Mail version 8.1 6/6/93.  Type ? for help.

  4. "/var/spool/mail/redhat": 1 message 1 new

  5. >N  1 root@mail.laoguang  Tue Nov  6 06:09  14/498

  6. &

从中看到邮件redhat收到了,但是你不觉得这个很恐怖吗,因为每个连上主机的人都可以冒名的发邮件,这个可不得了,所以认证是非常必要的了,这到后面再说。

3.6 如果一切正常,那么让postfix开机启动,可以找个脚本,也可以直接 把命令写到/etc/rc.d/rc.local  ,脚本由于太占版面了,所以还是采用第二种吧,其实第一种效果更不错,还能实现服务重启,如果有需要,就去网上找吧,或者把rpm安装后生成的脚本复制过来即可使用。

  1. echo "/usr/sbin/postfix start " >> /etc/rc.d/rc.local

四.为postfix提供别名支持

4.1 vim /etc/postfix/main.cf

##取消alias_maps的注释

  1. alias_maps = hash:/etc/aliases

##再添加一个账户,测试别名机制是否有效

  1. useradd hadoop

  2. echo "admin" | passwd --stdin hadoop

##修改/etc/aliases 最后添加

redhat:         hadoop   ##第一个字段为初始目标,第二个地址为最终地址

newaliase ##将刚修改的文件编成hash编码,也可以运行postaliase hash:/etc/aliases

##发信给redhat查看日志是否转发,并su到hadoop用户查看是否收到邮件

  1. echo "hi,redhat" | mail -s "redhat"  redhat

  2. tail /var/log/maillog  ##查看是否转发

  3. su – hadoop

  4. 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 (这个名字可以自己起)

  1. oracle@163.com  REJECT

  2. microsoft.com   REJECT

5.2 编码成hash编码

  1. postmap hash:/etc/postfix/sender.deny

5.3 更改主配置文件,根据此文件限制

在主配置文件中查找smtpd_sender_restrictions如果没有就找合适文件添加

  1. smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender.deny

5.4 测试设置是否生效

  1. [root@mail ~]# telnet 172.16.1.10 25

  2. Trying 172.16.1.10...

  3. Connected to mail.laoguang.me (172.16.1.10).

  4. Escape character is '^]'.

  5. 220 mail.laoguang.me ESMTP Postfix

  6. helo mail.laoguang.me

  7. 250 mail.laoguang.me

  8. mail from:oracle@163.com

  9. 250 2.1.0 Ok

  10. rcpt to:redhat@qq.com

  11. 554 5.7.1 <oracle@163.com>: Sender address rejected: Access denied

由此可知已经生效了.

六.安装dovecot用测试收信发信

6.1 安装dovecot

为了简便咱们yum安装吧

  1. yum -y install dovecot

6.2 编辑dovecot配置文件 /etc/dovecont.conf

  1. protocols = imap pop3    ##取消这个注释,启用对imap pop3的监听

6.3 启动dovecot

  1. service dovecot start

6.4 验证pop3收信

6.4.1通过telnet验证

  1. telnet 172.16.1.10 110

  2. Trying 172.16.1.10...

  3. Connected to mail.laoguang.me (172.16.1.10).

  4. Escape character is '^]'.

  5. +OK Dovecot ready.

  6. USER redhat

  7. +OK

  8. PASS admin

  9. +OK Logged in.

  10. LIST

  11. +OK 1 messages:

  12. 1 387

6.4.2通过OE验证

新建立账户

下一步直到完成。

下面给自己发一封邮件测试能否收到:

接受邮件查看是否收到了   ##由于上面设置别名的时候把发往redhat的信全部转发给了Hadoop,通过日志查看到的,所以取消别名重新测试。##如果收不到请确认你的dns指向你刚才建立的dns服务器地址,这就是我们建立dns服务器的作用。

由此可知,一切正常。

七.为postfix开启Cyrus-sasl认证功能

7.1 查看postfix是否支持sasl认证

  1. postconf -a   ##如果显示以下代表支持cyrus

  2. cyrus

  3. dovecot

7.2 修改/etc/postfix/main.cf,修改mynetworks,并在配置文件中加入sasl的支持

  1. mynetworks = 127.0.0.0/8

  2. ######################CYRUS-SASL############################

  3. broken_sasl_auth_clients = yes

  4. ######下面这个代表给mynetworks与通过sasl认证的用户中继。其它的拒绝

  5. smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,

  6. reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,

  7. reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,

  8. reject_unauth_pipelining,reject_unauth_destination

  9. smtpd_sasl_auth_enable = yes       ##启用sasl

  10. smtpd_sasl_local_domain = $myhostname

  11. smtpd_sasl_security_options = noanonymous  ##不允许匿名

  12. ######################CYRUS-END##########################

7.3 修改/etc/sysconfig/saslauthd验证方法

  1. MECH=shadow      ##基于pam验证配置比较复杂,我们以shadow为例

7.4 建立/usr/lib/sasl2/smtpd.conf  添加以下内容

  1. pwcheck_method: saslauthd  ##用sasl认证程序检查密码

  2. mech_list: PLAIN LOGIN

7.5 重新加载postfix,启动cyrus-sasl

  1. postfix reload

  2. service saslauthd start

7.6检测认证修改是否成功

7.6.1  命令测试 ##这个只能保证cyrus-sasl可以正常验证了,不能保证与postfix结合正确

  1. testsaslauthd -u redhat -p admin

  2. 0: OK "Success."

7.6.2 telnet测试cyrus-sasl是否与postfix结合正确

  1. [root@mail ~]# telnet 172.16.1.10 25

  2. Trying 172.16.1.10...

  3. Connected to mail.laoguang.me (172.16.1.10).

  4. Escape character is '^]'.

  5. 220 mail.laoguang.me ESMTP Postfix

  6. auth login                          ##手动输入,意思是我要验证

  7. 334 VXNlcm5hbWU6          ##对方的响应,不过是base64编码的

  8. cmVkaGF0             ##这个是账号redhat通过base64编码的 echo -n "redhat" | openssl base64

  9. 334 UGFzc3dvcmQ6            ##同样还是响应

  10. YWRtaW4=                        ##密码 base64编码的见楼上

  11. 235 2.7.0 Authentication successful   ##这个代表我们验证通过了

  12. ##下面测试通过认证后能否中继邮件

  13. mail from:tom@163.com

  14. 250 2.1.0 Ok

  15. rcpt to:jerry@qq.com

  16. 250 2.1.5 Ok

  17. data

  18. 354 End data with <CR><LF>.<CR><LF>

  19. .

  20. 250 2.0.0 Ok: queued as D07A1167EBC

  21. 由此看见服务器是给中继的。

  22. ##下面测试不通过认证能否中继

  23. telnet 172.16.1.10 25

  24. Trying 172.16.1.10...

  25. Connected to mail.laoguang.me (172.16.1.10).

  26. Escape character is '^]'.

  27. 220 mail.laoguang.me ESMTP Postfix

  28. mail from:tom@163.com

  29. 250 2.1.0 Ok

  30. rcpt to:jerry@qq.com

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

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

八,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

  1. protocols = imaps pop3s

  2. ssl_cert_file = /etc/dovecot/dovecot.cert

  3. ssl_key_file = /etc/dovecot/dovecot.key

8.3 重启dovecot 查看监听端口

  1. service dovecot restart

  2. 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 ,解压

  1. wget http://ncu.dl.sourceforge.net/project/courier/authlib/0.64.0/courier-authlib-0.64.0.tar.bz2

  2. tar xvf courier-authlib-0.64.0.tar.bz2

  3. cd courier-authlib-0.64.0

9.2 编译安装Couier-autlib

  1. ./configure \

  2. --prefix=/usr/local/courier-authlib \

  3. --sysconfdir=/etc \

  4. --without-authpam \

  5. --without-authshadow \

  6. --without-authvchkpw \

  7. --without-authpgsql \

  8. --with-authmysql \

  9. --with-mysql-libs=/usr/local/mysql/lib \

  10. --with-mysql-includes=/usr/local/mysql/include \

  11. --with-redhat \

  12. --with-authmysqlrc=/etc/authmysqlrc \

  13. --with-authdaemonrc=/etc/authdaemonrc \

  14. --with-mailuser=postfix \

  15. --with-mailgroup=postfix \

  16. --with-ltdl-lib=/usr/lib \

  17. --with-ltdl-include=/usr/include

#####如果报如此错 --with-authmyql specified bu no mysqlclient.so 先把mysql的rpm卸载掉  rpm -e -nodeps msyql  ,courier-authlib安装完毕后在把mysql安装上去##切记Courier-authlib安装成功够把msyql再安装回去,配置文件保留原来的,记得备份

  1. make && make install

9.3 提供配置文件,把生成的实例配置文件改名为配置文件

  1. cp /etc/authdaemonrc.dist /etc/authdaemonrc

  2. cp /etc/authmysqlrc.dist /etc/authmysqlrc

  3. ##修改配置文件/etc/authdaemonrc

  4. authmodulelist="authmysql"

  5. authmodulelistorig="authmysql"

  6. daemons=5   ##修改为合适值

  7. ##修改配置文件/etc/authmysqlrc下面内容

  8. MYSQL_SERVER localhost

  9. MYSQL_PORT 3306              ##指定你的mysql监听的端口,这里使用默认的3306

  10. MYSQL_USERNAME  extmail      ##这时为后文要用的数据库的所有者的用户名

  11. MYSQL_PASSWORD extmail       ##数据库密码

  12. MYSQL_SOCKET  /tmp/mysql.sock   ##mysql的套接字,我安装的mysql是/tmp/mysql.sock

  13. MYSQL_DATABASE  extmail         ##数据库的名字

  14. MYSQL_USER_TABLE  mailbox       ##记录用户信息的表名

  15. MYSQL_CRYPT_PWFIELD  password   ##知道指定用户密码的列是psssword列

  16. MYSQL_UID_FIELD  '2525'         ##填写postfix的uid

  17. MYSQL_GID_FIELD  '2525'

  18. MYSQL_LOGIN_FIELD  username     ##用户名在表中的列名

  19. MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)  ##虚拟用户家目录列名

  20. MYSQL_NAME_FIELD  name

  21. MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir) ##虚拟用户邮箱所在列名

  22. ##一些账号密码等一定与后面建立时的一致,由于建立这些表比较复杂,我们选泽了extmail提供的模板

  23. ## 将来初始化extmail时生成表名,账号密码都与上面填写相同。

  24. 建立/var/mailbox并更改属主数组为postfix

  25. mkdir /var/mailbox

  26. chown postfix:postfix

9.4 提供脚本

  1. cp courier-authlib.sysvinit /etc/init.d/authlibd

  2. chmod +x /etc/init.d/authlibd

  3. chkconfig --add authlibd

  4. chkconfig authlibd on

9.5 启动authlib

  1. service authlibd start

authlib安装完毕

十.整合sasl与courier-authlib,以让postfix调用

10.1 编辑 /usr/lib/sasl2/smtpd.conf ,更改为如下内容

  1. pwcheck_method: authdaemond  ##更改sasl验证方式,由authdaemon来验证,而下面的authdaemon套接字指向的就是authlib

  2. log_level: 3                                ##日志级别,用于排错

  3. mech_list:PLAIN LOGIN

  4. authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket  ##套接字所在路径

十一.让postfix支持虚拟用户与虚拟域

11.1 编辑/etc/postfix/main.cf 添加内容如

  1. ########################Virtual Mailbox Settings########################

  2. virtual_mailbox_base = /var/mailbox                                      ##mailbox所在目录

  3. virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf    ##虚拟邮箱映射,这些文件extmail中有模板

  4. virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf   ##虚拟域映射

  5. virtual_alias_domains =

  6. virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf        ##别名映射

  7. virtual_uid_maps = static:2525

  8. virtual_gid_maps = static:2525

  9. virtualvirtual_transport = virtual

  10. ########################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 并用启用脚本生成数据库

  1. tar xvf extman-1.1.tar.gz

  2. tar xvf extman-1.1.tar.gz ;cd docs;

  3. ##由于mysql引擎定义由TYPE改为Engine所以先更改脚本extmail.sql与init.sql

  4. sed -i 's@TYPE=MyISAM@Engine=MyISAM@g' extmail.sql

  5. sed -i 's@TYPE=MyISAM@Engine=MyISAM@g' init.sql

##查看是否更改成功了

----------生成数据库---------

##如果没设置mysql的root密码

  1. mysql <extmail.sql

  2. mysql <init.sql

###如果你的数据库root设置密码了##

  1. mysql -uroot -p  <extmail.sql

  2. mysql -uroot -p <init.sql

##可以去mysql中查看是否生成了extmail数据库

刚才postfix主配置文件定义了好几个映射文件也在此目录下,拷贝到/etc/postfix下

  1. cp mysql_virtual_* /etc/postfix/     ##此步容易遗忘

11.3 授权生成的数据库给extmail用户

  1. mysql> GRANT all privileges on extmail.* TO 'extmail'@'localhost' IDENTIFIED BY 'extmail';

  2. mysql> GRANT all privileges on extmail.* TO 'extmail'@'127.0.0.1' IDENTIFIED BY 'extmail';

  3. mysql>flush privileges;

十二.配置dovecot支持mysql

12.1 修改主配置文件 /etc/dovecot.conf

  1. mail_location = maildir:/var/mailbox/%d/%n/Maildir

  2. auth default {                     ##查找它

  3. mechanisms = plain

  4. #passdb pam {                  ##注销pam验证密码

  5. #}                                    ##注销

  6. #userdb passwd { 注销用户名在passwd中查询

  7. #}

  8. passdb sql {  ##启用sql的验证

  9. args = /etc/dovecot-mysql.conf  ##指定参数文件

  10. }

  11. userdb sql {  ##启用用户信息的sql验证

  12. args = /etc/dovecot-mysql.conf  ##指定参数文件

  13. }

12.2 建立dovecot使用msyql的配置文件

  1. vim /etc/dovecot-mysql.conf ##内容如下

  2. driver = mysql

  3. connect = host=localhost=/tmp/mysql.sockdbname=extmailuser=extmailpassword=extmail

  4. default_pass_scheme = CRYPT

  5. password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'

  6. user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'

  7. ##斜体部分请更改为你mysql套接字的位置

12.3 重启dovecot

service dovecot restart

十三.安装extmail提供webmail界面

13.1 在安装extmail之前请先安装apache,如果编译安装请参考http://laoguang.blog.51cto.com/6013350/1039208,我就以rpm安装为例了

  1. yum -y install httpd

13.2 解压exmail并拷贝到适当目录

  1. tar zxvf extmail-1.2.tar.gz

  2. mkdir -pv /var/www/extsuite

  3. mv extmail-1.2 /var/www/extsuite/extmail

  4. cp /var/www/extsuite/extmail/webmail.cf.default  /var/www/extsuite/extmail/webmail.cf

  5. ##因为extmail配置文件中设置它的位置在/var/www/extsuite/中,

  6. 我们直接把它放到这个目录中,省的修改配置文件了

  7. ##拷贝实例配置文件,建立为配置文件

13.2 修改extmail配置文件 /var/www/exsuite/extmail/webmail.cf一下内容

  1. SYS_USER_LANG = zh_CN                 ##设置字符集中文你懂得

  2. SYS_MAILDIR_BASE = /var/mailbox    ##邮箱目录

  3. SYS_MYSQL_USER = extmail             ##连接mysql的用户名

  4. SYS_MYSQL_PASS = extmail             ##连接mysql的密码

  5. SYS_MYSQL_DB = extmail              ##数据库名字

  6. SYS_MYSQL_SOCKET = /tmp/mysql.sock   ## msyql的套接字位置

  7. SYS_MYSQL_HOST = localhost          ##mysql的地址

  8. SYS_MYSQL_TABLE = mailbox          ##表名

  9. SYS_MYSQL_ATTR_USERNAME = username   ##验证时用户名在msyql中的列名

  10. SYS_MYSQL_ATTR_DOMAIN = domain           ##所在域在msyql中的列名

  11. SYS_MYSQL_ATTR_PASSWD = password       ##密码在mysql中的列名

  12. SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket

  13. ##验证时使用的套接字

13.3 修改apache配置文件/etc/httpd/conf/httpd.conf  如果是编译的请自己根据自己编译的编辑配置文件。

  1. vim /etc/httpd/conf/httpd.conf

  2. #DocumentRoot "/var/www/html"  ##注销中心主机 281行左右

  3. NameVirtualHost *:80         ##启用虚拟主机 基本在最后了

  4. ###添加以下内容####

  5. <VirtualHost *:80>

  6. ServerName mail.laoguang.me

  7. DocumentRoot /var/www/extsuite/extmail/html/

  8. ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi

  9. Alias /extmail /var/www/extsuite/extmail/html

  10. SuexecUserGroup postfix postfix

  11. </VirtualHost>

  12. ##修改 cgi执行文件属主为apache运行身份用户:

  13. chown -R postfix.postfix /var/www/extsuite/extmail/cgi/

  14. ##启动httpd

  15. service httpd start

登陆网页测试,发现缺少一个组件Unix::Syslog,extmail需要依赖它,下面来安装

13.4 安装Unix::Syslog

  1. wget http://mirrors.devlib.org/cpan/authors/id/M/MH/MHARNISCH/Unix-Syslog-1.1.tar.gz

  2. ##如果链接哪天失效了请去 http://http://search.cpan.org/ 搜索下载

  3. tar xvf Unix-Syslog-1.1.tar.gz

  4. cd Unix-Syslog-1.1

  5. perl Makefile.PL

  6. make && make install

##再次访问网页172.16.1.10发现无码的世界确实不错,不过还不能管理注册管理账户

十四,安装extman,支持邮箱管理

14.1 安装配置extman

前面已经解压并使用过extman了 直接移过去吧

  1. mv extman-1.1 /var/www/extsuite/extman

  2. cp /var/www/extsuite/extman/webman.cf.default  /var/www/extsuite/extman/webman.cf

  3. ##实例文件拷贝为配置文件

  4. ##编辑配置文件vi /var/www/extsuite/extman/webman.cf 调整以下参数,其它的符合要求

  5. SYS_MAILDIR_BASE = /var/mailbox    ##邮箱目录

  6. SYS_CAPTCHA_ON = 0   ##是否使用验证码,暂不使用,需要额外组建支持

  7. SYS_DEFAULT_UID = 2525

  8. SYS_DEFAULT_GID = 2525

  9. SYS_MYSQL_USER = extmail           ##数据库账号

  10. SYS_MYSQL_PASS = extmail           ##密码

  11. SYS_MYSQL_SOCKET = /tmp/mysql.sock   ##mysql套接字

14.2 修改extman中cgi的属组属主并编辑httpd.conf

  1. chown -R postfix.postfix /var/www/extsuite/extman/cgi/

在apache的主配置文件中Extmail的虚拟主机部分,添加如下两行:

  1. ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi

  2. Alias /extman /var/www/extsuite/extman/html

根据配置文件创建extman运行时所需的临时目录,并修改其相应的权限:

  1. mkdir  -pv  /tmp/extman

  2. 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

  1. tar zxvf Time-HiRes-1.9707.tar.gz

  2. cd Time-HiRes-1.9707

  3. perl Makefile.PL

  4. make

  5. make test

  6. make install

15.4 安装File::Tail

  1. tar zxvf File-Tail-0.99.3.tar.gz

  2. cd File-Tail-0.99.3

  3. perl Makefile

  4. make

  5. make test

  6. make install

15.5 安装rrdtool-1.2.23

  1. tar zxvf rrdtool-1.2.23.tar.gz

  2. cd rrdtool-1.2.23

  3. ./configure --prefix=/usr/local/rrdtool

  4. make

  5. make install

15.6 创建必要的符号链接(Extman会到这些路径下找相关的库文件)

  1. ln -sv /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/auto/RRDs/RRDs.so  \

  2. /usr/lib/perl5/5.8.8/i386-linux-thread-multi/

  3. ln -sv /usr/local/rrdtool/lib/perl/5.8.8/RRDp.pm   /usr/lib/perl5/5.8.8

  4. ln -sv /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/RRDs.pm  \

  5. /usr/lib/perl5/5.8.8

15.7 启动mailgraph图形化

  1. ##复制mailgraph_ext到/usr/local,并启动之

  2. cp -r /var/www/extsuite/extman/addon/mailgraph_ext  /usr/local

  3. /usr/local/mailgraph_ext/mailgraph-init start

  4. ##启动cmdserver(在后台显示系统信息)

  5. /var/www/extsuite/extman/daemon/cmdserver --daemon

15.8 添加到开机启动

  1. echo “/usr/local/mailgraph_ext/mailgraph-init start” >> /etc/rc.d/rc.local

  2. echo “/var/www/extsuite/extman/daemon/cmdserver -v -d” >> /etc/rc.d/rc.local

到此图形日志已经可以实现了,发一些邮件,过几分钟查看日志,到此postfix基本配置完毕了,有时间再尝试与与maildrop,与反病毒垃圾软件结合实现过滤功能。

后记:理解了邮件收发的整个过程后配置这个邮件系统并不困难,尤其是那幅流程图要深入了解,出现问题后再结合日志基本能确定问题所在,由于整个的软件很多,所以配置时要万般小心,有时候一个空格可能导致不能正常运行,要按着流程慢慢来,细心点配置成功难度不是很高,另外再次郑重说明请把你的SElinux关了,最后感谢马老师。

本文出自 “Free Linux,Share Linux” 博客,请务必保留此出处http://laoguang.blog.51cto.com/6013350/1050936

转载于:https://blog.51cto.com/narcotics/1329195

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

  1. 基于虚拟用户的电子邮件系统

    在现实生活中,我们根本不可能为邮件用户在邮件服务器上添加系统账号.互联网上成千上万的人每天都在进行邮件传输和邮箱申请. 正是采用了利用虚拟账号映射成我们邮件系统的系统账号.现实生活中的126 .QQ. ...

  2. mysql开启邮件服务_邮件服务之实现基于虚拟用户的虚拟域邮件系统

    postfix+dovecot+SASL+mysql+apache+extmail+extman实现基于虚拟用户的虚拟域邮件系统 声明:省略了前面的基础配置包括安装MYSQL,postfix等,这里用 ...

  3. linux ftp 团队认证,linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建

    linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建 1.FTP协议:有命令和数据连接两种 命令连接,控制连接:21/tcp 数据连接: 主动模式,运行在20/tcp端口 和 ...

  4. linux ftp mysql_linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建

    命令连接,控制连接:21/tcp 数据连接: 主动模式,运行在20/tcp端口 和 被动模式,运行在随机端口 数据传输模式(自动模式):有二进制(mp3,jpg等)和文本(html)两种传输模式 ft ...

  5. Postfix邮件服务器搭建之虚拟用户配置

    参考烂泥的文章 在前一篇文章<烂泥:Postfix邮件服务器搭建之软件安装与配置>中,我们介绍了psotfix邮件服务器搭建所需要的软件,以及各个软件的基本配置. 目前已经达到了通过系统用 ...

  6. postfix+dovecot+foxmail虚拟用户配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 在前一篇文章<烂泥:Postfix邮件服务器搭建之软件安装与配置>中,我们介 ...

  7. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层...

    系列回顾 在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出 ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容...

    上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...

  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定...

    如果说Actor是dapr有状态服务的内部体现的话,那绑定应该是dapr对serverless这部分的体现了.我们可以通过绑定极大的扩展应用的能力,甚至未来会成为serverless的基础.最开始接触 ...

最新文章

  1. 依赖注入与Unity
  2. python 求直线交点坐标
  3. 子网划分为什么全0全1子网号不能使用?CIDR为什么能使用全0全1子网号?
  4. JSR311发布Restful WebService工程
  5. log4j日志文件配置说明及使用
  6. mysql还原txt表的字段结构,mysql 修改表结构(转)
  7. Tomcat 5.0.18 安装配置指南
  8. Startlsback常见使用过程中的问题
  9. 数据:BTC全网算力为134.40 EH/s,新增地址数54.03万
  10. java怎么反编译_java如何进行反编译
  11. DIAView 嵌入视频监控(海康威视)
  12. dicom worklist下载病例程序/dicom worklist scu (c#版本)
  13. 快速开发实用工具VRTK-011
  14. android 使用流量监控,android流量监控
  15. 网络安全必会的基础知识
  16. SANGFOR深信服远程办公客户端EasyConnect在Windows11使用兼容性问题解决案例
  17. Gabor滤波器 pytorch实现
  18. 使用Canal ClientAdapter实现Mysql的DDL、DML同步到PostgreSQL
  19. amd为什么还用针脚_闲聊CPU针脚 一年一换都怪AMD不给力?
  20. 2019北邮计算机机试

热门文章

  1. SAP MM 如何查询物料凭证号是由哪个IDoc Post后产生的?
  2. 《数学之美》第4章 谈谈分词
  3. 在近期,美众议院为何密集提出了15项新兴技术法案?
  4. 柳叶刀发布陈薇团队新冠疫苗试验结果:安全,能诱导免疫反应
  5. AI时代的高科技读心术:算法解码脑中图像
  6. 机器人也需要拥有属于自己的性格
  7. 倒计时|全场书籍低至 3.5 折起,无门槛包邮!
  8. 库克喜提 8 亿年终奖,2020 年整体薪酬增长 28%
  9. 想获得50亿专项激励?关于穿山甲新星助推计划你必须了解的几件事
  10. 别学前端了!前端程序员:凭啥??网友:来钱太快你会飘!