首页 > 代码库 > 邮件服务系列之四基于虚拟用户的虚拟域的邮件系统(安装courier-authlib以及部分配置方法)

邮件服务系列之四基于虚拟用户的虚拟域的邮件系统(安装courier-authlib以及部分配置方法)


要受使用Mutt必须安装一个收邮件的代理,例如dovecot,配置完成之后启动服务,

Mutt用户的邮件代理

mutt -f 指定用户的邮箱,路径,一般指定对应的协议即可访问,


mutt用户的界面如下所示,是纯文本界面

具体的使用如下所示

#mutt -f pop://opensatck@mail.hostname.com

出现如下所示的界面,输入对应的密码

登陆以后出现一个界面

技术分享

根据提示可以进行简单的查看以及收发删除邮件的操作,是一个很方便使用的纯文本的邮件收发系统

技术分享


虚拟主机,虚拟域

1.web服务器中虚拟主机:

中心主机一个服务器只能实现一个站点,但是使用虚拟主机后可以实现多个虚拟主机,登陆多个虚拟用户,更好地利用了资源以及节省成本



邮件服务器,基于自己的域名建立,

物理服务器即为定义了邮件中心域的服务器,为了实现虚拟用户,需要取消mydestination ,要在mydomain中添加多个域名,在查找表中查找到相应文件,post_map较为复杂,因此我们采用mysql的方法,将用户的账号密码,以及负责收发邮件的域的账号以及密码放入到mysql数据中的某一表中,然后使用php的 方法实现调用 ,直接开发一个php的程序,直接在php的页面中进行创建删除等操作,并且添加用户等操作也可以直接通过后台,实现用户的在线注册。


虚拟域:

用户别名

用户账号:以前的账号是使用useradd建立的账号,但是这样的方法建立的账号使得别人不仅能够使用邮件法务,而是能够访问更加多的其他的系统的访问,不能够保证安全,保存在非/etc/passwd,增大系统安全性,这样的账号即为虚拟用户,只为一个域实现收发邮件的功能。



由下面一张来自于互联网的图来进行解释

技术分享


如上图所示


完成一个基于虚拟用户的虚拟域邮件系统,并且要拥有认证的功能,还要进行以下组件的安装以及配置


1.courier-authlib的安装以及配置过程


1、courier简介


courier-authlib是Courier组件中的认证库,它是courier组件中一个独立的子项目,用于为Courier的其它组件提供认证服务。其认证功能通常包括验正登录时的帐号和密码、获取一个帐号相关的家目录或邮件目录等信息、改变帐号的密码等。而其认证的实现方式也包括基于PAM通过/etc/passwd和/etc/shadow进行认证,基于GDBM或DB进行认证,基于LDAP/MySQL/PostgreSQL进行认证等。因此,courier-authlib也常用来与courier之外的其它邮件组件(如postfix)整合为其提供认证服务。


备注:在RHEL5上要使用0.64.0及之前的版本,否则,可能会由于sqlite版本过低问题导致configure检查无法通过或编译无法进行。


2、安装


接下来开始编译安装

# tar jxvf courier-authlib-0.64.0.tar.bz2

# cd courier-authlib-0.64.0

#./configure \

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

    --sysconfdir=/etc \

    --without-authpam \

    --without-authshadow \

    --without-authvchkpw \

    --without-authpgsql \

    --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-mailuser=postfix \

    --with-mailgroup=postfix \

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

    --with-ltdl-include=/usr/include

# make

# make install


备注:可以使用--with-authdaemonvar=/var/spool/authdaemon选项来指定进程套按字目录路径。



# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon

# cp /etc/authdaemonrc.dist  /etc/authdaemonrc

# cp /etc/authmysqlrc.dist  /etc/authmysqlrc


修改/etc/authdaemonrc 文件

authmodulelist="authmysql"

authmodulelistorig="authmysql"

daemons=10


3、配置其通过mysql进行邮件帐号认证


编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。

MYSQL_SERVER localhost

MYSQL_PORT 3306                   (指定你的mysql监听的端口,这里使用默认的3306)

MYSQL_USERNAME  extmail      (这时为后文要用的数据库的所有者的用户名)

MYSQL_PASSWORD extmail        (密码)

MYSQL_SOCKET  /var/lib/mysql/mysql.sock

MYSQL_DATABASE  extmail

MYSQL_USER_TABLE  mailbox

MYSQL_CRYPT_PWFIELD  password

MYSQL_UID_FIELD  ‘2525‘

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)


4、提供SysV服务脚本


# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib

# chmod 755 /etc/init.d/courier-authlib

# chkconfig --add courier-authlib

# chkconfig --level 2345 courier-authlib on


# echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf

# ldconfig -v

# service courier-authlib start   (启动服务)


5、配置postfix和courier-authlib


新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:

#mkdir –pv /var/mailbox

#chown –R postfix /var/mailbox


接下来重新配置SMTP 认证,编辑 /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



2.让postfix支持虚拟域和虚拟用户


1、编辑/etc/postfix/main.cf,添加如下内容:

########################Virtual Mailbox Settings########################

virtual_mailbox_base = /var/mailbox

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

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

virtual_transport = virtual

maildrop_destination_recipient_limit = 1

maildrop_destination_concurrency_limit = 1

##########################QUOTA Settings########################

message_size_limit = 14336000

virtual_mailbox_limit = 20971520

virtual_create_maildirsize = yes

virtual_mailbox_extended = yes

virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf

virtual_mailbox_limit_override = yes

virtual_maildir_limit_message = Sorry, the user‘s maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later.

virtual_overquota_bounce = yes


2、使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库:


# tar zxvf  extman-1.1.tar.gz

# cd extman-1.1/docs

# mysql -u root -p < extmail.sql

# mysql -u root -p <init.sql

# cp mysql*  /etc/postfix/


3、授予用户extmail访问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‘;


说明:

1、启用虚拟域以后,需要取消中心域,即注释掉myhostname, mydestination, mydomain, myorigin几个指令;当然,你也可以把mydestionation的值改为你自己需要的。

2、对于MySQL-5.1以后版本,其中的服务脚本extmail.sql执行会有语法错误;可先使用如下命令修改extmail.sql配置文件,而后再执行。修改方法如下:

# sed -i ‘s@TYPE=MyISAM@ENGINE=InnoDB@g‘ extmail.sql


三.配置dovecot


# vi /etc/dovecot.conf

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

……

auth default {

    mechanisms = plain

    passdb sql {

        args = /etc/dovecot-mysql.conf

    }

    userdb sql {

        args = /etc/dovecot-mysql.conf

    }

    ……


# vim /etc/dovecot-mysql.conf                 

driver = 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‘


说明:如果mysql服务器是本地主机,即host=localhost时,如果mysql.sock文件不是默认的/var/lib/mysql/mysql.sock,可以使用host=“sock文件的路径”来指定新位置;例如,使用通用二进制格式安装的MySQL,其soc文件位置为/tmp/mysql.sock,相应地,connect应按如下方式定义。

connect = host=/tmp/mysql.sock dbname=extmail user=extmail password=extmail


接下来启动dovecot服务:


# service dovecot start

# chkconfig dovecot on



需要完成一个拥有认证功能的邮件系统,还需要安装extman,配置maildrop,以及安装clamav等组件,下一篇将完成这些的安装以及配置,实现一个邮件系统的构建。


本文出自 “牛顿也吃苹果” 博客,请务必保留此出处http://mi55u.blog.51cto.com/11619321/1914526

邮件服务系列之四基于虚拟用户的虚拟域的邮件系统(安装courier-authlib以及部分配置方法)