- 论坛徽章:
- 0
|
理论知识
授人以渔I-Postfix+LDAP做虚拟邮箱服务器
版权声明:本文可以任意转载,转载时请保持文章的完整性,并以超链接形式标明文章原始出处和作者信息及本声明。
http://geoffl.blog.163.com/
作者: 富贵猫
前阵子开始要做Postfix邮件服务器,网上搜了好多文章,不过大部分文章只是作者自己安装步骤的罗列,只能算授人以鱼,所以我看了之后还是需要去看 Postfix的手册,还要看很多官方的参考书,看完之后颇有心得,所以就打算写一个“授人以渔”的系列安装设置的文章,让你知其然也知其所以然。
Postfix作邮箱,有4种设置方式,分别是共享域名+系统帐户、独立域名+系统帐户、独立域名+虚拟帐户和虚拟域名+特殊格式邮箱。鉴于通常我们不可能给每个用户设置一个系统帐户,所以第一第二种就不考虑不介绍了。既然是用Postfix来建立我们自己地邮箱系统,所以也没必要去兜很多圈子设置特殊格式邮箱,所以第四种也不考虑。剩下只有一种方式,就是独立域名+虚拟邮箱。
所谓独立域名,就是即使用户名是一样的,但如果域名不同其邮件也将放置在不同的目录。譬如info@abc.com和info@def.com,这二个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。为了方便你理解,我先说明一下如果用哈希表,它的格式应该是
user1@test.com test.com/user1_mailDirectory/
user2@test.com test.com/user2_mailDirectory/
user1@test2.com test2.com/user1_mailDirectory/
左边是用户的e-mail地址,空格之后是该用户的邮件存放目录。既然我们说了,独立域名代表info@abc.com和info@def.com的邮件放置在不同目录下,所以我们的定义里user1@test.com和user1@test2.com的目录是不同的。如果换成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 = <rootpassword>
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=<20080526031653.EACA69460D@mail.erabay.com>
May 26 11:16:53 erabay postfix/qmgr[5460]: EACA69460D: from=<weifeng270@gmail.com>, 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=<101@1.com>, 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=<weifeng270@gmail.com>, size=483, nrcpt=1 (queue active)
May 26 11:18:40 erabay postfix/virtual[5617]: 2166F945FF: to=<88@1.com>, 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=<20080526031855.C569E945FF@mail.erabay.com>
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=<weifeng270@gmail.com>, size=485, nrcpt=1 (queue active)
May 26 11:18:55 erabay postfix/virtual[5617]: C569E945FF: to=<112@1.com>, 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=<weifeng270@gmail.com>, size=485, nrcpt=1 (queue active)
May 26 11:23:40 erabay postfix/qmgr[5614]: D92E494601: from=<weifeng270@gmail.com>, size=483, nrcpt=1 (queue active)
May 26 11:23:40 erabay postfix/virtual[5628]: ED12F94609: to=<100@1.com>, 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=<99@1.com>, 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=<kk@211.com>, 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=<20080515071426.0584C945EB@mail.erabay.com>
May 15 15:14:26 erabay postfix/qmgr[6741]: 0584C945EB: from=<weifeng270@gmail.com>, 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=<kkk@444.com>, 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=<weifeng270@gmail.com>, 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'] = '';
[ 本帖最后由 weifeng270 于 2008-5-26 11:33 编辑 ] |
|