您的位置:首页 > 其它

基于虚拟用户的邮件系统

2012-09-12 12:06 471 查看
拓扑图





在本邮件系统架构实验中,服务器所使用的相关配置环境如下:
邮件服务器IP地址:192.168.10.10
DNS服务器IP地址:192.168.10.10
Apache服务器:192.168.10.10
Mysql数据库:192.168.10.10
主机名:mail.163.com
邮件账号类型:使用虚拟用户,用户自由注册
POP3/IMAP服务器软件:编译安装的Dovecot
Webmail平台软件:Extmail、Extman
前期准备工作
1、dns指向
vim /etc/resolv.conf
search localdomain
nameserver 192.168.10.10
2、修改主机名称和域名
HOSTNAME=mail.163.com
3、安装所需要的所有软件包
yum install httpd php php-mysql mysql mysql-server mysql-devel openssl-devel dovecot perl-DBD-MySQL tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl libtool-ltdl-devel expect
一、配置DNS服务器
1、安装所需软件包
yum -y install bind-chroot caching-nameserver bind
cd /var/named/chroot/etc/
2、配置dns的配置文件
[root@localhost etc]# cp -p named.caching-nameserver.conf named.conf
[root@localhost etc]# vim named.conf
[align=left]listen-on port 53 { any; }; [/align]
allow-query { any; };
allow-query-cache { any; };
match-clients { any; };
match-destinations { any; };
[root@mail etc]# vim named.rfc1912.zones #声明区域文件
[root@mail ~]# cd /var/named/chroot/var/named/
27 zone "163.com" IN {
28 type master;
29 file "163.com.zone";
30 allow-update { none; };
31 };
3、正向解析区域文件的数据文件
[root@mail named]# cp -p named.zone 163.com.zone
vim 163.com.zone




[root@localhost named]# service named restart
关闭sendmail服务
[root@localhost named]# service sendmail stop
[root@localhost named]# chkconfig sendmail off
4、启动mysql数据库,并给mysql的root用户设置密码
service mysqld start
chkconfig mysqld on
方法一:
mysqladmin -u root password 'your_password' #创建数据库的管理员和密码
方法二:可以任选其一,在本实验中,本人采用第二种方案
---------------------------------授权本地用户
SET PASSWORD FOR root@'localhost'=PASSWORD('redhat');
SET PASSWORD FOR root@'127.0.0.1'=PASSWORD('redhat');
FLUSH PRIVILEGES;
-------------------------------授权远程用户
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'redhat';
FLUSH PRIVILEGES; #刷新策略,使以上配置生效
二、安装配置postfix
源代码安装postfix
tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/
1、创建Postfix运行时的组和账号
[root@mail ~]# cd /usr/local/src/postfix-2.8.2/
[root@mail postfix-2.8.2]# groupadd -g 2525 postfix #创建用户postfix
[root@mail postfix-2.8.2]# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
#将用户postfix加到postfix组中
[root@mail postfix-2.8.2]# groupadd -g 2526 postdrop
[root@mail postfix-2.8.2]# useradd -g postdrop -u 2526 -s /bin/false -M postdrop
2、由于postfix源代码安装过程没有预编译文件,需要手动产生Makefile文件
make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
进行编译
make
将产生的四类文件放置在合适的目录
make install
按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值,省略的表示采用默认值)
  install_root: [/] /
  tempdir: [/usr/local/src/ postfix-2.6.5] /tmp
  config_directory: [/etc/postfix] /etc/postfix
  daemon_directory: [/usr/libexec/postfix]
  command_directory: [/usr/sbin]
  queue_directory: [/var/spool/postfix]
  sendmail_path: [/usr/sbin/sendmail]
  newaliases_path: [/usr/bin/newaliases]
  mailq_path: [/usr/bin/mailq]
  mail_owner: [postfix]
  setgid_group: [postdrop]
html_directory: [no] /var/www/postfix_html
manpages: [/usr/local/man]
readme_directory: [no]
3、生成别名二进制文件,如果没有这个步骤,会造成postfix效率极低:
[root@mail postfix-2.8.2]# newaliases
启动postfix
[root@mail postfix-2.8.2]# postfix start
查看是否正常启动,既可以查看端口25是不是开启
[root@mail postfix-2.8.2]# netstat -tupln |less
4、查看postfix是不是支持mysql
[root@mail postfix-2.8.2]# postconf -m
mysql
查看是否支持验证
[root@mail postfix-2.8.2]# postconf -a
cyrus
dovecot
5、为了更方便的启动postfix服务,我们可以写一个脚本,如果编译路径与系统相同,我们可以将系统的控制脚本直接拿过来使用
[root@mail postfix-2.8.2]# mkdir /tmp/abc
[root@mail postfix-2.8.2]# cd /tmp/abc/
[root@mail abc]# cp /mnt/cdrom/Server/postfix-2.3.3-2.1.el5_2.i386.rpm ./
[root@mail abc]# rpm2cpio postfix-2.3.3-2.1.el5_2.i386.rpm |cpio –id #展开软件包,-id表示自动创建目录
把postfix的控制脚本放到系统的控制脚本存放的位置
[root@mail abc]# cd etc/rc.d/init.d/
[root@mail init.d]# cp postfix /etc/init.d/
chkconfig --add postfix
这样就方便的重启postfix服务了
service postfix restart
6、配置postfix的主配置文档
vim /etc/postfix/main.cf
75 myhostname = mail.163.com #主机名
83 mydomain = 163.com #域名
99 myorigin = $mydomain #启用地址伪装
113 inet_interfaces = all #监听所有接口
161 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
260 mynetworks = 127.0.0.0/8
三、为postfix开启基于cyrus-sasl的认证功能
1、vim /etc/postfix/main.cf
############################CYRUS-SASL############################
654 broken_sasl_auth_clients = yes
655 smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invali d_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sende r,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,r eject_unauth_destination
656 smtpd_sasl_auth_enable = yes
657 smtpd_sasl_local_domain = $myhostname
658 smtpd_sasl_security_options = noanonymous
659 smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!
2、cd /usr/lib/sasl2/
[root@mail sasl2]# cp -p Sendmail.conf smtpd.conf#为postfix启用验证的文件
[root@mail sasl2]# vim smtpd.conf
添加如下内容,表明验证机制
pwcheck_method:saslauthd
meth_list: LOGIN PLAIN
启动验证服务,并设置为开机启动
service saslauthd start
chkconfig saslauthd on
3、查看身份验证是不是生效
[root@mail sasl2]# telnet mail.163.com 25
220 Welcome to our mail.163.com ESMTP,Warning: Version not Available!
EHLO mail.163.com
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN#这两行带有AUTH字段,表示身份验证功能已经打开
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
四、安装Courier authentication library
解压源代码
tar -jxvf courier-authlib-0.63.1.20111230.tar.bz2 -C /usr/local/src/
cd /usr/local/src/courier-authlib-0.63.1.20111230/
1、检测预编译环境
[root@mail courier-authlib-0.63.1.20111230]#./configure --prefix=/usr/local/courier-authlib --sysconfdir=/etc --with-authmysql --with-mysql-libs=/usr/lib/mysql --with-mysql-includes=/usr/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc --with-ltdl-lib=/usr/lib --with-ltdl-include=/usr/include
编译
make
安装
make install
2、拷贝两个样例文件来产生两个脚本文件
chmod 755 /usr/local/courier-authlib/var/spool/authdaemon/ #修改权限
cp /etc/authdaemonrc.dist /etc/authdaemonrc #调用验证模块
cp /etc/authmysqlrc.dist /etc/authmysqlrc #调用数据库方法和种类
此处authdaemonrc用来文件指明调用mysql验证模块
vim /etc/authdaemonrc
修改authdaemonrc主配置文件,仅保留authmysql认证方式,去掉其他方式
27 authmodulelist="authmysql"
34 authmodulelistorig="authmysql" #采用mysql数据库的方式对用户验证
53 daemons=15 #进程数目
3、编辑authmysqlrc,用于描述如何向mysql数据库查询信息:
vim /etc/authmysqlrc
26 MYSQL_SERVER localhost
27 MYSQL_USERNAME exmail
28 MYSQL_PASSWORD exmail
49 MYSQL_SOCKET /var/lib/mysql/mysql.sock
56 MYSQL_PORT 3306
62 MYSQL_OPT 0
68 MYSQL_DATABASE exmail
83 MYSQL_USER_TABLE mailbox
92 MYSQL_CRYPT_PWFIELD password
113 MYSQL_UID_FIELD 2525
119 MYSQL_GID_FIELD 2526
128 MYSQL_LOGIN_FIELD username
133 MYSQL_HOME_FIELD concat('/var/mailbox/',homedir)
139 MYSQL_NAME_FIELD name
150 MYSQL_MAILDIR_FIELD concat('/var/mailbox',maildir)
4、修改courier-authlib权限
cd /usr/local/src/courier-authlib-0.63.1.20111230/
cp courier-authlib.sysvinit /etc/init.d/courier-authlib
chmod 755 /etc/init.d/courier-authlib
启动验证服务
service courier-authlib start
[root@mail courier-authlib-0.63.1.20111230]#chkconfig --add courier-authlib
[root@mail courier-authlib-0.63.1.20111230]# chkconfig courier-authlib on
5、把非标准的库文件路径重定向到/etc/ld.so.conf.d/并命名为courier-authlib.conf
echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf
手工调动
ldconfig –v
查看是否调动成功
ldconfig -pv |grep courier
重启服务
service courier-authlib restart
6、新建虚拟用户所在的目录,并将其权限赋予postfix用户
mkdir -pv /var/mailbox
chown -R postfix /var/mailbox
7、改变courier-authlib验证方式,因为用户账号到mysql验证账号需要在courier-authlib验证
vim /usr/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
log_level: 3
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
五、让postfix支持虚拟域和虚拟用户
1、/etc/postfix/main.cf
########################Virtual Mailbox Settings########################
663 virtual_mailbox_base = /var/mailbox
664 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
665 virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
666 virtual_alias_domains =
667 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
668 virtual_uid_maps = static:3001
669 virtual_gid_maps = static:3001
670 virtual_transport = virtual
671 maildrop_destination_recipient_limit = 1
672 maildrop_destination_concurrency_limit = 1
673 ##########################QUOTA Settings########################
674 message_size_limit = 14336000
675 virtual_mailbox_limit = 20971520
676 virtual_create_maildirsize = yes
677 virtual_mailbox_extended = yes
678 virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps. cf
679 virtual_mailbox_limit_override = yes
680 virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his disks pace quota, please Tidy your mailbox and try again later.
681 virtual_overquota_bounce = yes
2、使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库
解压源文件
tar -zxvf extman-1.1.tar.gz
导入数据库
[root@mail ~]# cd extman-1.1/docs/
[root@mail docs]# mysql -u root -p <extmail.sql
Enter password:
[root@mail docs]# mysql -u root -p <init.sql
Enter password:
3、查看是否导入成功
[root@mail docs]# mysql -u root -p
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| extmail |
| mysql |
| test |
+--------------------+
4 rows in set (0.03 sec)
将所有映射文件拷贝到/etc/postfix/目录下
[root@mail docs]# cp mysql_virtual_* /etc/postfix/
4、授予用户extmail访问extmail数据库的权限
[root@mail docs]# mysql -u root –p
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; #设置内容生效
重启postfix服务
service postfix restart
六、配置dovecot
1、vim /etc/dovecot.conf
211 mail_location =maildir:/var/mailbox/%d/%n/Maildir
验证机制改为mysql验证用户的身份密码验证,验证机制plain
指明用户的邮箱位置
211 mail_location =maildir:/var/mailbox/%d/%n/Maildir #%d表示域
762 mechanisms = plain #验证机制
禁用下列行
795 #passdb pam { #验证密码不采用可插拔模块
828 #}
896 #userdb passwd { #采用mysql数据库验证,不采用passwd
903 #}
启用下列行
869 passdb sql {
871 args = /etc/dovecot-mysql.conf #mysql查找密码
872 }
930 userdb sql {
932 args = /etc/dovecot-mysql.conf #mysql查找账户
933 }
2、vim /etc/dovecot-mysql.conf
ver = 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 username = '%u'
3、修改postfix的配置文件
vim /etc/postfix/main.cf
414 home_mailbox = Mailbox
启动dovecot服务,并设置为开机自动启动
[root@mail docs]# service dovecot start
[root@mail docs]# chkconfig dovecot on
七、安装和配置ExtMail邮件使用及管理平台
1、安装
拆解源文件
[root@mail ~]# tar -zxvf extmail-1.2.tar.gz
extmail的工作目录是固定的/var/www/extsuite,需要手动创建
[root@mail ~]# mkdir -pv /var/www/extsuite
[root@mail ~]# mv extman-1.1 /var/www/extsuite/extman
[root@mail ~]# mv extmail-1.2 /var/www/extsuite/extmail
拷贝样例文件
[root@mail ~]# cd /var/www/extsuite/extmail/
[root@mail extmail]# cp webmail.cf.default webmail.cf
2、修改主配置文件,修改页面的字符集,语言等
vim /var/www/extsuite/extmail/webmail.cf
77 SYS_USER_LANG = zh_CN
127 SYS_MAILDIR_BASE = /var/mailbox
139 SYS_MYSQL_USER = extmail
140 SYS_MYSQL_PASS = extmail
141 SYS_MYSQL_DB = extmail
142 SYS_MYSQL_HOST = localhost
197SYS_AUTHLIB_SOCKET=/usr/local/courier-authlib/var/spool/authdaemon/socket
3、apache相关配置
由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;本例中打开了apache服务器的suexec功能,故使用以下方法来实现虚拟主机运行身份的指定。此例中的MDA为postfix自带,因此将指定为postfix用户:
在虚拟主机配置加上SuexecUserGroup postfix postfix即可
<VirtualHost>
SuexecUserGroup postfix postfix
</VirtualHost>
如果您没有打开apache服务器的suexec功能,也可以使用以下方法解决
vim /etc/httpd/httpd.conf
231 User postfix #编辑httpd的用户和组,改为postfix
232 Group postfix
虚拟主机配置
993 <VirtualHost 192.168.10.10:80>
994 ServerName mail.163.com
995 DocumentRoot /var/www/extsuite/extmail/html/
996 ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
997 Alias /extmail /var/www/extsuite/extmail/html
998 </VirtualHost>
修改cgi执行文件的运行者身份为apache
chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
[root@mail extmail]# service httpd restart
[root@mail extmail]# chkconfig httpd on
4、解决依赖关系
tar -zxvf Unix-Syslog-1.1.tar.gz
cd Unix-Syslog-1.1
[root@mail Unix-Syslog-1.1]# perl Makefile.PL
[root@mail Unix-Syslog-1.1]# make
[root@mail Unix-Syslog-1.1]# make install
重启apache服务
service httpd restart
访问站点http://mail.163.com/extmail




八、安装Extman-1.1
tar zxvf extman-1.1.tar.gz
mv extman-1.1 /var/www/extsuite/extman
12 SYS_MAILDIR_BASE = /var/mailbox
21 SYS_CAPTCHA_ON = 0
1、修改cgi目录的属主:
chown -R postfix.postfix /var/www/extsuite/extman/cgi/
vim /etc/httpd/conf/httpd.conf
2、在apache的主配置文件中Extmail的虚拟主机部分加上998和999两行
993 <VirtualHost 192.168.10.10:80>
994 ServerName mail.163.com
995 DocumentRoot /var/www/extsuite/extmail/html/
996 ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
997 Alias /extmail /var/www/extsuite/extmail/html
998 ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
999 Alias /extman /var/www/extsuite/extman/html
1000 </VirtualHost>
3、创建其运行时所需的临时目录,并修改其相应的权限
[root@mail extman]# mkdir -pv /tmp/extman
[root@mail extman]# chown postfix.postfix /tmp/extman
选择管理即可登入extman进行后台管理了。默认管理帐号为:root@extmail.org 密码为:extmail*123*
登录并管理Extman邮件系统




管理邮箱,新建域名163.com和162.com,支持虚拟域可以创建多个域






在163.com域名下注册用户user1和user2
在162.com域名下注册用户user3和user4




四个用户之间可以互发邮件,实现不同域名之间用户的信件传输




行文至此,基于虚拟用户的邮件系统的框架已经基本形成。当然还需要作电子邮件过滤和防病毒的设置,以保障邮件服务器和用户计算机的安全。

本文出自 “我们之间” 博客,请务必保留此出处http://myheart.blog.51cto.com/5635718/988591
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: