Chinaunix首页 | 论坛 | 博客
  • 博客访问: 564534
  • 博文数量: 201
  • 博客积分: 7734
  • 博客等级: 少将
  • 技术积分: 1994
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-09 19:18
文章分类

全部博文(201)

文章存档

2011年(28)

2010年(173)

分类:

2010-11-13 00:16:43

理论知识

授人以渔I-Postfix+LDAP做虚拟邮箱服务器

版权声明:本文可以任意转载,转载时请保持文章的完整性,并以超链接形式标明文章原始出处和作者信息及本声明。

http://geoffl.blog.163.com/

作者: 富贵猫


前阵子开始要做Postfix邮件服务器,网上搜了好多文章,不过大部分文章只是作者自己安装步骤的罗列,只能算授人以鱼,所以我看了之后还是需要去看 Postfix的手册,还要看很多官方的参考书,看完之后颇有心得,所以就打算写一个“授人以渔”的系列安装设置的文章,让你知其然也知其所以然。

Postfix作邮箱,有4种设置方式,分别是共享域名+系统帐户、独立域名+系统帐户、独立域名+虚拟帐户和虚拟域名+特殊格式邮箱。鉴于通常我们不可能给每个用户设置一个系统帐户,所以第一第二种就不考虑不介绍了。既然是用Postfix来建立我们自己地邮箱系统,所以也没必要去兜很多圈子设置特殊格式邮箱,所以第四种也不考虑。剩下只有一种方式,就是独立域名+虚拟邮箱。

所谓独立域名,就是即使用户名是一样的,但如果域名不同其邮件也将放置在不同的目录。譬如
,这二个e-mail地址都以info为用户名,但域名不同,如果是共享域名,他们的mail将被放置在同一个目录下,而独立域名将放置在不同目录下。如果你们公司是很大的集团,下面分好几个公司,分别有独立的域名,这难免有重名的员工,这种情况下,后者显然是我们希望看到的。而所谓虚拟帐户,既然那些邮箱用户只是使用mail服务,我们当然没有必要去给每个用户在Linux下面开设一个个系统帐户,所以我们就用一些数据库之类的东西来保存这些帐户信息,譬如用哈希表、SQL数据库或者LDAP。我使用的是独立域名+虚拟LDAP帐户。

Postfix的安装我就不说了,非常简单。不过如果不会也没关系,后面我会写一篇关于Postfix+mail quota的,那时候需要下载、补丁和编译,等于是Postfix的安装。

LDAP也不说了,要完全掌握LDAP不是这篇能解决的,我只假设你的LDAP服务器里已经有mail这个字段。

下面开始说Postfix如何设置。Postfix的配置文件是/etc/postfix/main.cf,这是独立域名+LDAP的设置

# ===== Basic Setting =====

mail_owner = postfix
myhostname = pop.test.com
inet_interfaces = all
queue_directory = /var/spool/postfix
mynetworks = 127.0.0.0/8

home_mailbox =

# ===== Virtual Mailbox =====
virtual_mailbox_domains = hash:/etc/postfix/v_domains
virtual_mailbox_maps = ldap:/etc/postfix/v_mailbox_maps

virtual_mailbox_base = /var/spool/vhosts/
virtual_minimum_uid = 500
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = virtual

myhostname设置你的邮件服务器名字

inet_interfaces = all设置你在哪些网卡上监听

另外有几个是需要解释的:我们接受哪些域名的邮件?我们的域名下有哪些用户?他们的邮件存放在什么目录?

我们接受那些域名的邮件,这是由virtual_mailbox_domains来定义的。虽然我们可以直接使用

virtual_mailbox_domains = test.com, test2.com

这样的格式来定义这些域名,不过我还是建议如我这样使用一个表来存放,这样更方便日后的维护,表名是随意取的,有没有后缀都没关系,我用v_domains作为表的名字,在main.cf里定义是

virtual_mailbox_domains = hash:/etc/postfix/v_domains

v_domains的内容如下

test.com OK

test2.com OK

这是个text文件,仅仅包含域名,但为了满足哈希表的格式,所以在后面添加一个OK。然后我们还要把这个文件变成Postfix的数据库格式,因此用如下命令转变其格式

postmap v_domains

之后你会得到一个以db为后缀的文件v_domains.db。注意,每次修改完v_domains你都需要使用一次postmap。



我们有哪些用户,这是由virtual_mailbox_maps来决定。同样,你可以用哈希表,不过我还是用LDAP。为了方便你理解,我先说明一下如果用哈希表,它的格式应该是

test.com/user1_mailDirectory/

test.com/user2_mailDirectory/

test2.com/user1_mailDirectory/

左边是用户的e-mail地址,空格之后是该用户的邮件存放目录。既然我们说了,独立域名代表
的邮件放置在不同目录下,所以我们的定义里的目录是不同的。如果换成LDAP,我们要得到相同的结果,即用e-mail地址来搜索,得到其邮件存放目录

既然讲到邮件存放目录,就一并解释一下到底这个目录怎样定义的。邮件是存放在

virtual_mailbox_base\virtual_mailbox_maps\home_mailbox下,也就是说 virtual_mailbox_base定义的目录下,postfix会根据virtual_mailbox_maps返回的用户目录自动创建该目录,然后如果home_mailbox也有定义,那么在用户目录下还会创建home_mailbox定义的名字。举例来说,按照上面的设置,邮件会存放在

/var/spool/vhosts/test.com/user1/下面。

如果home_mailbox不是空白而是Mail/,那么就会存放在

/var/spool/vhost/test/com/user1/Mail/下面。home_mailbox有什么用呢?举个例子,比方你已经有 homeDirectory了,但那是你平时放文件的地方,那么再在同样目录下放邮件就变得很奇怪,所以需要home_mailbox来定义邮件放在你 homeDirectory下的什么目录下

注意:地址的最后有没有"/"决定了使用mailbox格式还是maildir格式,没有"/"表示mailbox,有表示maildir。所以并不象大部分人认为的,home_mailbox定义为MailDir才表示使用maildir格式。再举几个例子

/var/spool/vhosts/test.com/user1/  表示使用MailDir格式

/var/spool/vhosts/test.com/user1  表示使用MailBox格式

/var/spool/vhosts/test.com/user1/Mail/  表示使用MailDir格式

/var/spool/vhosts/test.com/user1/MailDir/ 表示使用MailDir格式

/var/spool/vhosts/test.com/user1/MailDir 表示使用MailBox格式,即使home_mailbox是maildir,但没有最后的"/",只能表示使用MailBox格式。同样道理

/var/spool/vhosts/test.com/user1/MailBox/ 表示使用MailDir格式,虽然home_mailbox是mailbox,但最后的"/"就说明了是使用MailDir格式。

回到virtual_mailbox_maps的LDAP定义,其格式是

virtual_mailbox_maps = ldap:/etc/postfix/v_mailbox_maps

v_mailbox_maps只是一个连接Postfix和LDAP的配置文件,同样文件名是随意取的。v_mailbox_maps的内容是

# LDAP Server的IP地址,我是设在和postfix同一电脑,所以是127.0.0.1

server_host = 127.0.0.1
# 下面这些关于LDAP Search的内容如果你不了解,请学习LDAP

search_base = ou=people,o=test
server_port = 389
bind = yes
bind_dn = cn=root,o=test
bind_pw =
version = 3

# 下面是关键,我会额外解释




测试我本机的

root@erabay:/home/Virtual# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
debug_peer_level = 2
home_mailbox = Maildir/
inet_interfaces = all
mailbox_size_limit = 0
mydestination = localhost
myhostname = mail.erabay.com
mynetworks = 127.0.0.0/8
myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_helo_required = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
virtual_gid_maps = static:33
virtual_mailbox_base = /home/Virtual/
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 33
virtual_transport = virtual
virtual_uid_maps = static:33



mail.log 日记

May 26 11:16:53 erabay postfix/smtpd[5502]: EACA69460D: client=localhost[127.0.0.1]
May 26 11:16:53 erabay postfix/cleanup[5505]: EACA69460D: message-id=<
>
May 26 11:16:53 erabay postfix/qmgr[5460]: EACA69460D: from=<
>, size=485, nrcpt=1 (queue active)
May 26 11:16:53 erabay postfix/smtpd[5502]: disconnect from localhost[127.0.0.1]
May 26 11:16:54 erabay postfix/virtual[5506]: EACA69460D: to=<
>, relay=virtual, delay=0.08, delays=0.05/0.02/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
May 26 11:16:54 erabay postfix/qmgr[5460]: EACA69460D: removed
May 26 11:18:39 erabay postfix/master[5458]: terminating on signal 15
May 26 11:18:40 erabay postfix/master[5612]: daemon started -- version 2.4.5, configuration /etc/postfix
May 26 11:18:40 erabay postfix/qmgr[5614]: 2166F945FF: from=<
>, size=483, nrcpt=1 (queue active)
May 26 11:18:40 erabay postfix/virtual[5617]: 2166F945FF: to=<
>, relay=virtual, delay=331, delays=331/0.04/0/0.03, dsn=2.0.0, status=sent (delivered to mailbox)
May 26 11:18:40 erabay postfix/qmgr[5614]: 2166F945FF: removed
May 26 11:18:55 erabay postfix/smtpd[5618]: connect from localhost[127.0.0.1]
May 26 11:18:55 erabay postfix/smtpd[5618]: C569E945FF: client=localhost[127.0.0.1]
May 26 11:18:55 erabay postfix/cleanup[5621]: C569E945FF: message-id=<
>
May 26 11:18:55 erabay postfix/smtpd[5618]: disconnect from localhost[127.0.0.1]
May 26 11:18:55 erabay postfix/qmgr[5614]: C569E945FF: from=<
>, size=485, nrcpt=1 (queue active)
May 26 11:18:55 erabay postfix/virtual[5617]: C569E945FF: to=<
>, relay=virtual, delay=0.06, delays=0.05/0/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
May 26 11:18:55 erabay postfix/qmgr[5614]: C569E945FF: removed
May 26 11:23:40 erabay postfix/qmgr[5614]: ED12F94609: from=<
>, size=485, nrcpt=1 (queue active)
May 26 11:23:40 erabay postfix/qmgr[5614]: D92E494601: from=<
>, size=483, nrcpt=1 (queue active)
May 26 11:23:40 erabay postfix/virtual[5628]: ED12F94609: to=<
>, relay=virtual, delay=459, delays=459/0.05/0/0.05, dsn=2.0.0, status=sent (delivered to mailbox)
May 26 11:23:40 erabay postfix/qmgr[5614]: ED12F94609: removed
May 26 11:23:40 erabay postfix/virtual[5629]: D92E494601: to=<
>, relay=virtual, delay=566, delays=566/0.05/0/0.03, dsn=2.0.0, status=sent (delivered to mailbox)
May 26 11:23:40 erabay postfix/qmgr[5614]: D92E494601: removed

这是个我安装了postfixadmin在firfox中创建的用户名。

有时可以有时不行。

May 15 15:11:39 erabay postfix/virtual[6747]: 4BF73945EB: to=<
>, relay=virtual, delay=0.07, delays=0.05/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
May 15 15:11:39 erabay postfix/qmgr[6741]: 4BF73945EB: removed
May 15 15:14:25 erabay postfix/smtpd[6784]: connect from localhost[127.0.0.1]
May 15 15:14:26 erabay postfix/smtpd[6784]: 0584C945EB: client=localhost[127.0.0.1]
May 15 15:14:26 erabay postfix/cleanup[6787]: 0584C945EB: message-id=<
>
May 15 15:14:26 erabay postfix/qmgr[6741]: 0584C945EB: from=<
>, size=488, nrcpt=1 (queue active)
May 15 15:14:26 erabay postfix/smtpd[6784]: disconnect from localhost[127.0.0.1]
May 15 15:14:26 erabay postfix/virtual[6788]: 0584C945EB: to=<
>, relay=virtual, delay=0.09, delays=0.04/0.03/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
May 15 15:14:26 erabay postfix/qmgr[6741]: 0584C945EB: removed
May 15 15:15:01 erabay postfix/qmgr[6741]: D40E794605: from=<
>, size=488, nrcpt=1 (queue active)




这个是我修改postfixadmin的设置

// Encrypt
// In what way do you want the passwords to be crypted?
// md5crypt = internal postfix admin md5
// md5 = md5 sum of the password
// system = whatever you have set as your PHP system default
// cleartext = clear text passwords (ouch!)
$CONF['encrypt'] = 'cleartext';
$CONF['default_language'] = 'en';

// Database Config
// mysql = MySQL 3.23 and 4.0
// mysqli = MySQL 4.1
// pgsql = PostgreSQL
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'kernel';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';

阅读(5965) | 评论(0) | 转发(0) |
0

上一篇:postfix的投递种类

下一篇:awk使用记录

给主人留下些什么吧!~~