烂泥:Postfix邮件服务器搭建之虚拟用户配置

本文由ilanniweb提供友情赞助,首发于烂泥行天下php

想要得到更多的文章,能够关注个人微信ilanniwebhtml

在前一篇文章《烂泥:Postfix邮件服务器搭建之软件安装与配置》中,咱们介绍了psotfix邮件服务器搭建所须要的软件,以及各个软件的基本配置。mysql

目前已经达到了经过系统用户能够登陆到postfix邮件服务器,可是为了管理的方便和系统安全,咱们通常是经过postfix的虚拟用户来管理邮件用户的。web

Postfix虚拟用户的原理是,先在系统中建立一个用户,该用户不能登陆到系统,而后把邮件用户所有映射到该系统用户的家目录下。sql

对于OS来讲全部的操做都是经过该用户进行的,可是对于postfix的邮件用户来讲又是各自独立的。这个和vsftpd虚拟用户的原理类似,而后全部邮件用户的管理都是经过postfixadmin来进行。数据库

有关postfix的虚拟用户,咱们须要根据不一样的软件进行不一样的配置,只有各个软件的协同配合才能达到自由收发邮件的目的,下面分别介绍下。apache

1、postfix配置虚拟用户

postfix要支持虚拟用户,须要修改的配置文件比较多。vim

1.1 修改main.cf文件

首先要修改postfix的主配置文件main.cf,以下:浏览器

vim /etc/postfix/main.cf安全

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/libexec/postfix

data_directory = /var/lib/postfix

mail_owner = postfix

myhostname = mail.ilanni.com

mydomain = ilanni.com

myorigin = $mydomain

inet_interfaces = all

mydestination = $myhostname, localhost.$mydomain, localhost

local_recipient_maps =

unknown_local_recipient_reject_code = 550

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

debug_peer_level = 2

debugger_command =

     PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin

     ddd $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix

newaliases_path = /usr/bin/newaliases.postfix

mailq_path = /usr/bin/mailq.postfix

setgid_group = postdrop

html_directory = no

manpage_directory = /usr/share/man

sample_directory = /usr/share/doc/postfix-2.6.6/samples

readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES

#启用SMTP认证

smtpd_sasl_type = dovecot

smtpd_sasl_path = /var/spool/postfix/private/auth

smtpd_sasl_application_name = smtpd

smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain = $myhostname

broken_sasl_auth_clients = yes

smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_unknown_sender_domain

smtpd_sasl_security_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

smtpd_client_restrictions = permit_sasl_authenticated

smtpd_sasl_security_options = noanonymous

proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps

#启用虚拟用户

virtual_mailbox_base = /home/vmail/

virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf

virtual_alias_maps =

   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,

   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,

   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

virtual_mailbox_maps =

   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,

   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

virtual_uid_maps = static:5000

virtual_gid_maps = static:5000

virtual_transport = dovecot

dovecot_destination_recipient_limit = 1

注意:postfix主配置文件中,须要注意的地方我已经标注出来了,其中还须要说明的是咱们在此启用的虚拟用户是《烂泥:Postfix邮件服务器搭建之准备工做》中建立的vmail用户,该用户的id是5000,因此在postfix主配置文件会看到vmail的家目录/home/vmail/,以及vmail的id信息5000。

在如下全部的操做中,若是有vmail相关的信息,这个都是和该用户进行关联的。

1.2 修改master.cf文件

在master.cf文件添加以下代码:

vim /etc/postfix/master.cf

dovecot   unix  -       n       n       -       -       pipe      
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}

1.3 数据库链接相关文件

链接数据库相关文件有7个,在建立配置文件以前,咱们要在/etc/postfix/目录下创建sql目录用来存放这些配置以下:

mkdir /etc/postfix/sql/

如今咱们来建立这些配置文件,注意这些配置文件中,有关数据库的部分都是《烂泥:Postfix邮件服务器搭建之准备工做》中的用户名、密码和数据库。以下:

vim /etc/postfix/sql/mysql_virtual_alias_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

lip_image001

vim /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

lip_image002

vim /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

lip_image003

vim /etc/postfix/sql/mysql_virtual_domains_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'

lip_image004

vim /etc/postfix/sql/mysql_virtual_mailbox_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

lip_image005

vim /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u','@',alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

lip_image006

vim /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'

lip_image007

1.4 测试sasl与postfix集成

以上配置完毕后,如今咱们来测试postfix是否已经正确与cyrus-sasl进行集成,使用以下命令:

telnet mail.ilanni.com 25

ehlo ilanni.com

lip_image008

注意:图中的ehlo ilanni.com命令,该命令须要手工输入,而若是出现250-AUTH PLAIN LOGIN和250-AUTH=PLAIN LOGIN两行,则说明postfix已经正确启用smtp认证。

2、dovecot虚拟用户配置

dovecot配置文件比较多,下面咱们一一介绍。

2.1 修改dovecot.conf文件

vim /etc/dovecot/dovecot.conf

protocols = imap pop3

listen = *

!include conf.d/*.conf

passdb {

  driver = sql

  args = /etc/dovecot/dovecot-sql.conf.ext

}

userdb {

  driver = static

  args = uid=5000 gid=5000 home=/home/vmail/%d/%n

}

#调试日志

auth_debug_passwords=yes

mail_debug=yes

auth_verbose=yes

auth_verbose_passwords=plain

lip_image009

2.2 修改10-auth.conf文件

vim /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no

auth_mechanisms = plain login cram-md5

!include auth-system.conf.ext

lip_image010

2.3 修改10-ssl.conf文件

10-ssl.conf文件主要是关于postfix的ssl认证相关的配置,在此咱们先禁用ssl。以下:

vim /etc/dovecot/conf.d/10-ssl.conf

ssl = no

lip_image011

2.4 修改10-mail.conf文件

10-mail.conf文件主要定义邮件用户存储相关信息的位置。以下:

vim /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/home/vmail/%d/%n/Maildir

mbox_write_locks = fcntl

lip_image012

2.5 修改10-logging.conf文件

10-logging.conf文件是定义dovecot日志的配置文件,咱们也能够不启用此配置文件。可是为了调试咱们在此仍是启用了该配置文件选项。

注意:若是后续日志中提示没有写入权限的话,修改其权限便可。

vim /etc/dovecot/conf.d/10-logging.conf

info_log_path = /var/log/dovecot_info.log

debug_log_path = /var/log/dovecot_debug.log

lip_image013

2.6 修改10-master.conf文件

10-master.conf文件定义了dovecot的pop3和imap端口,以及其余的一些信息。

vim /etc/dovecot/conf.d/10-master.conf

service imap-login {

  inet_listener imap {

    port = 143

  }

}

service pop3-login {

  inet_listener pop3 {

    port = 110

  }

}

service auth {

   unix_listener auth-userdb {

mode = 0600

    user = vmail

    group = vmail

  }

  # Postfix smtp-auth

unix_listener /var/spool/postfix/private/auth {

    mode = 0666

    user = postfix

  }

}

lip_image014

2.7 修改15-lda.conf文件

修改15-lda.conf文件,是为了防止dovecot报错,错误以下:

lip_image015

咱们只需在15-lda.conf文件中添加postmaster_address = postmaster@example.com便可,以下:

vim /etc/dovecot/conf.d/15-lda.conf

postmaster_address = postmaster@example.com

lip_image016

2.8 添加dovecot-sql.conf.ext文件

vim /etc/dovecot/dovecot-sql.conf.ext

driver = mysql

connect = host=localhost dbname=postfix user=postfix password=postfix

default_pass_scheme = MD5-CRYPT

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'

user_query = SELECT maildir, 5000 AS uid, 5000 AS gid, CONCAT('dict:storage=',floor(quota/1000),' proxy::quota') as quota FROM mailbox WHERE username = '%u' AND active='1'

lip_image017

3、postfixadmin配置

dovecot配置完毕后,咱们如今来配置postfixadmin,postfixadmin须要lamp的支持。有关lamp的安装,能够查看《烂泥:Postfix邮件服务器搭建之准备工做》。

3.1 安装postfixadmin

postfixadmin不能经过yum方式进行安装,咱们须要去下载postfixadmin软件包,以下:

wget http://nchc.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.93/postfixadmin-2.93.tar.gz

tar -xf postfixadmin-2.93.tar.gz

mv postfixadmin-2.93 /var/www/html/postfixadmin

chown -R apache:apache /var/www/html/postfixadmin

chmod -R 755 /var/www/html/postfixadmin

lip_image018

3.2 配置postfixadmin

postfixadmin安装完毕后,咱们如今来配置postfixadmin。postfixadmin的配置文件是config.inc.php,咱们只需修改这个文件便可。以下:

vim /var/www/html/postfixadmin/config.inc.php

$CONF['configured'] = true;

$CONF['default_language'] = 'cn';

$CONF['database_type'] = 'mysql';

$CONF['database_host'] = 'localhost';

$CONF['database_user'] = 'postfix';

$CONF['database_password'] = 'postfix';

$CONF['database_name'] = 'postfix';

$CONF['encrypt'] = 'dovecot:CRAM-MD5';

$CONF['dovecotpw'] = "/usr/bin/doveadm pw";

$CONF['domain_path'] = 'YES';

$CONF['domain_in_mailbox'] = 'NO';

$CONF['aliases'] = '1000';

$CONF['mailboxes'] = '1000';

$CONF['maxquota'] = '1000';

$CONF['fetchmail'] = 'NO';

$CONF['quota'] = 'YES';

$CONF['used_quotas'] = 'YES';

$CONF['new_quota_table'] = 'YES';

3.3 启动postfixadmin

postfixadmin配置完毕后,咱们如今来启动postfixadmin。

Postfixadmin不是一个单独的程序,它是依赖于apache的,因此咱们只须要启动apache便可。以下:

/etc/init.d/httpd start

chkconfig httpd on

lip_image019

如今咱们在浏览器中打开以下链接:

http://mail.ilanni.com/postfixadmin/setup.php

lip_image020

经过上图,咱们能够很明显的看出postfixadmin已经正常启动,并且其所依赖的各个组件也已经正常安装和配置。

3.4 修改默认后台管理密码

在postfixadmin的配置文件中有一个选项是填写管理员后台管理密码的,默认是changeme。以下:

lip_image021

如今咱们来修改默认密码,以下:

lip_image022

lip_image023

经过上图,咱们能够很明显的看出默认已经密码已经被咱们成功的修改了。

修改完毕后,咱们复制该密码到postfixadmin的配置文件,将原来的changeme替换成功如今的加密后的密码便可。以下:

vim /var/www/html/postfixadmin/config.inc.php

lip_image024

3.5 添加管理员帐户

后台管理密码修改完毕后,咱们如今来添加一个管理员帐号admin@ilanni.com。以下:

lip_image025

lip_image026

经过上图,咱们能够很明显的看出管理员admin@ilanni.com已经添加成功。

如今咱们来使用这个管理员登陆看看后台,后台登陆地址为http://mail.ilanni.com/postfixadmin/login.php

以下:

lip_image027

lip_image028

经过上图,咱们能够很明显的看出新添加的管理员已经能够登陆postfixadmin管理后台了。

postfixadmin管理员登陆地址是:

http://mail.haiyn.com/postfixadmin/login.php

postfixadmin 普通用户登陆地址是:

http://mail.ilanni.com/postfixadmin/users/login.php

4、添加postfix虚拟域

postfixadmin是支持多域名管理的,在此咱们先添加一个域名ilanni.com。以下:

lip_image029

lip_image030

lip_image031

经过上图,咱们能够很明显的看出ilanni.com这个域名已经添加成功。

5、添加邮箱用户

ilanni.com这个域名添加完毕后,咱们如今来给这个域名添加新的邮件用户。以下:

lip_image032

lip_image033

lip_image034

经过上图,咱们能够很明显的看出ilannimail@ilanni.com,这个邮件用户已经被成功建立。

6、使用邮件客户端测试

ilannimail@ilanni.com邮件用户被添加后,咱们如今来使用邮件客户端测试是否能够正常发送和收取邮件。

6.1 链接邮件服务器测试

首先咱们先来测试该用户是否能够正常链接邮件服务器,以下:

lip_image035

lip_image036

lip_image037

经过上图,咱们能够很明显的看出邮件用户ilannimail已经正常链接postfix邮件服务器。

6.2 测试发送邮件功能

如今咱们来测试发送邮件功能,以下:

lip_image038

lip_image039

经过上图,咱们能够很明显的看出ilaninmail用户已经成功的向外域邮箱发送邮件。

6.3 测试收取邮件功能

如今咱们来测试收取邮件功能,以下:

lip_image040

lip_image041

经过上图,咱们能够很明显的看出ilaninmail用户已经成功的向收取外域邮箱发送过来的邮件。

7、查看postfixadmin数据库

如今咱们来查看下postfixadmin数据库postfix中的数据,以下:

lip_image042

这个是postfix数据库postfixadmin所生成的表。

lip_image043

admin表中存储的是管理员用户。

lip_image044

alias表中存储的是全部的邮件用户。

lip_image045

domain表中存储的是虚拟域名。

8、查看postfix对系统产生的影响

本篇文章咱们主要是针对postfix虚拟用户,进行操做的。如今咱们虚拟域名已经添加,邮件用户也已经建立。

那么咱们如今来查看下,咱们的这些操做在系统上产生了哪些影响。

8.1 查看邮件用户家目录

切换到vmail用户的家目录,以下:

ll /home/vmail/

lip_image046

经过上图,咱们能够很明显的看出ilanni.com这个虚拟域名在vmail用户的家目录下产生了ilanni.com这个目录。

如今咱们再来看看ilanni.com这个目录下都有哪些文件,以下:

ll /home/vmail/ilanni.com/

lip_image047

经过上图,咱们能够很明显的看出在ilanni.com这个虚目录下产生了ilannimail和wxy这两个目录,而这两个目录名称恰好对应咱们前面建立的邮件用户ilannimail和wxy。

这样看起来就刚恰好和咱们前面解释的postfix虚拟用户原理相照应了。

8.2 查看邮件用户个数

咱们如今查看ilannimail目录下文件,以下:

ll /home/vmail/ilanni.com/ilannimail/Maildir/

lip_image048

经过上图,咱们能够很明显的看出该目录下面文件很少,如今咱们主要关注cur目录。由于经过该目录下的文件个数,能够知道ilannimail用户有多少封邮件如下两张截图,就能够证实这个说法。以下:

cd /home/vmail/ilanni.com/ilannimail/Maildir/cur

lip_image049

能够看到cur目录下有三个文件。

lip_image050

经过foxmail客户端也能够看到ilanimail用户确实只有三封邮件,这就证实了,咱们前面的猜想是正确的。知道cur目录下的文件个数,能够知道ilannimail用户有多少封邮件。

8.3 查看文件对应邮件

由cur目录下的文件个数可知目前ilannimail有三封邮件,那么这三个文件分别对应哪三封邮件呢?

其实咱们能够根据文件的名称中的unix时间戳来定位,如今咱们以1457768362.M305033P28093.iZ23r061d7kZ,S=4526,W=4615:2,RS文件为例。

经过文件名,咱们能够知道该文件的unix时间戳是1457768362,那么能够查找这个unix时间戳对应的实际时间,以下:

lip_image051

经过上图,能够知晓是15:39:22这封邮件。

固然咱们也能够查看这个文件的内容,以下:

cat 1457768362.M305033P28093.iZ23r061d7kZ,S=4526,W=4615:2,RS

lip_image052

相关文章
相关标签/搜索