Postfix虚拟主机与LDAP后端和Dovecot作为IMAP / POP3服务器在Ubuntu Intrepid Ibex服务器8.10
这样可以让您配置带虚拟主机的Postfix邮件服务器。 虚拟主机意味着您可以根据需要添加任意数量的邮件域,并根据需要为这些域添加尽可能多的邮箱。 在这里,我们为MTA(Postfix)和POP3 / IMAP服务器(Dovecot)和基于Web的管理界面使用LDAP后端。
这是如何升级版的Ubuntu Hardy Heron版本。
要在这个软件中使用如何:
Postfix MTA, Dovecot IMAP / POP3, OpenLDAP和Gnarwl作为自动回复(休假)和Phamm作为管理界面。
假设:
这样如何假设以下配置,如果您的安装与此不同,则将以下条目替换为您的实际配置。
邮件传递(邮箱)路径:
/home/vmail/domains
用户vmail
:
UID:1000, GID:1000
用户Postfix
:
UID: 108, GID:108
OpenLDAP base dn:
dc=example,dc=tld
OpenLDAP管理员帐号:
cn=admin,dc=example,dc=tld
Phamm搜索dn:
o=hosting,dc=example,dc=tld
本指南中您正在使用root用户。
如果你想要例如o = maildomains或o = any,请确保替换o = hosting与你想要的,特别是在acl.ldif中。 这个acl文件是严格的,如果不完全一样,phamm将无法正常工作。
第1步:安装并配置Ubuntu服务器
我建议您遵循以下指南(我不需要重写或重新设计别人做得比我更好):
完美的服务器 - Ubuntu Intrepid Ibex(Ubuntu 8.10)
不要安装以下项目(如何):
apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules procmail
apt-get install courier-authdaemon courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-ssl gamin libgamin0 libglib2.0-0
我们将在本指南中进一步安装和配置Postfix和Dovecot。
注意:所有的URL和包名在编写本文时都是有效的。 最佳做法是检查是否有新版本可用。
所以让我们开始吧
第2步:安装和配置OpenLDAP
运行以下命令在服务器上安装OpenLDAP,并在出现提示时输入admin用户的密码:
apt-get install slapd ldap-utils
现在,我们将下载其他使用和需要的模式以及phamm包,因为它包含一个我们需要的模式:
mkdir /usr/src/phamm-inst
cd /usr/src/phamm-inst
wget http://open.rhx.it/phamm/phamm-0.5.15.tar.gz
wget http://open.rhx.it/phamm/schema/ISPEnv2.schema
wget http://open.rhx.it/phamm/schema/amavis.schema
wget http://open.rhx.it/phamm/schema/samba.schema
wget http://open.rhx.it/phamm/schema/pureftpd.schema
现在我们要打开phamm包来获取所需的schema。
tar xvzf phamm-0.5.15.tar.gz
Intrepid中的OpenLDAP不再使用slapd.conf
文件配置,而是使用存储在/etc/ldap/slapd.d
中的ldif文件,因此我们需要先将模式文件转换为ldif文件。
为转换的模式文件创建一个临时目录:
cd ..
mkdir ldif_out
复制phamm.schema
为方便起见:
cp phamm-0.5.15/schema/phamm.schema .
创建一个schema.convert
文件:
vi schema.convert
将以下内容粘贴到文件中:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include phamm.schema include ISPEnv2.schema include amavis.schema include pureftpd.schema
需要额外的模式才能使转换成功,因为从这些模式的某些对象被其他shema使用。
现在我们要将架构文件转换为ldif文件:
slaptest -f schema.convert -F ldif_out
这将将模式转换为ldif,但是在将它们导入到OpenLDAP服务器之前,我们必须对它们进行编辑。
vi ldif_out/cn\=config/cn\=schema/cn\=\{4\}phamm.ldif并更改所需的条目以匹配以下内容:
dn: cn=phamm,cn=schema,cn=config并从ldif的末尾删除以下内容(忽略以后的内容:因为它会根据转换的日期,时间,...而有所不同):
...
cn: phamm
structuralObjectClass: olcSchemaConfig并为其他ldif文件也这样做。
entryUUID: 08bf1a06-7a89-102d-9fa6-4bee1e86d7f6
creatorsName: cn=config
createTimestamp: 20090119152440Z
entryCSN: 20090119152440.275296Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20090119152440Z
cn={5}ISPEnv2.ldif
cn={6}amavis.ldif
cn={7}pureftpd.ldif
现在我们要将模式文件加载到OpenLDAP中:
ldapadd -x -D cn=admin,cn=config -W -f ldif_out/cn\=config/cn\=schema/cn\=\{4\}phamm.ldif
ldapadd -x -D cn=admin,cn=config -W -f ldif_out/cn\=config/cn\=schema/cn\=\{5\}ISPEnv2.ldif
ldapadd -x -D cn=admin,cn=config -W -f ldif_out/cn\=config/cn\=schema/cn\=\{6\}amavis.ldif
ldapadd -x -D cn=admin,cn=config -W -f ldif_out/cn\=config/cn\=schema/cn\=\{7\}pureftpd.ldif
您将被要求您在安装OpenLDAP时定义的密码。
现在我们需要为OpenLDAP设置正确的acl。 你好运,我做了转换为ldif样式,以便您可以使用下面的命令设置所需的acl。
我们将创建两个文件: acl-del.ldif
和acl-add.ldif
。
vi acl-del.ldif
粘贴以下内容:
dn: olcDatabase={1}hdb,cn=config delete: olcAccess olcAccess: to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=example,dc=tld" write by anonymous auth by self write by * none olcAccess: to dn.base="" by * read olcAccess: to * by dn="cn=admin,dc=example,dc=tld" write by * read
vi acl-add.ldif
dn: olcDatabase={1}hdb,cn=config add: olcAccess olcAccess: to dn.regex=".+,vd=([^,]+),o=hosting,dc=example,dc=tld$" attrs=userPassword by dn="cn=admin,dc=example,dc=tld" write by self write by anonymous auth by dn.exact,expand="cn=postmaster,vd=$1,o=hosting,dc=example,dc=tld" write by set.expand="user/vd & [$1]" write olcAccess: to dn.regex=".+,vd=([^,]+),o=hosting,dc=example,dc=tld$" attrs=amavisBypassVirusChecks,quota,smtpAuth,accountActive by dn="cn=admin,dc=example,dc=tld" write by self read by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by set.expand="user/editAccounts & [TRUE]" write by dn.exact,expand="cn=postmaster,vd=$1,o=hosting,dc=example,dc=tld" read by set.expand="user/vd & [$1]" write olcAccess: to dn.regex=".+,vd=([^,]+),o=hosting,dc=example,dc=tld$" attrs=cn,sn,forwardActive,vacationActive,vacationInfo,vacationStart,vacationEnd,vacationForward,amavisSpamTagLevel,amavisSpamTag2Level,amavisSpamKillLevel by dn="cn=admin,dc=example,dc=tld" write by self write by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by dn.exact,expand="cn=postmaster,vd=$1,o=hosting,dc=example,dc=tld" write by set.expand="user/vd & [$1]" write olcAccess: to dn.regex="^.*,vd=([^,]+),o=hosting,dc=example,dc=tld$" attrs=editAccounts by dn="cn=admin,dc=example,dc=tld" write by self read by set.expand="user/editAccounts & [TRUE]" write by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by * none olcAccess: to dn.regex=".+,vd=([^,]+),o=hosting,dc=example,dc=tld$" attrs=objectClass,entry by dn="cn=admin,dc=example,dc=tld" write by self write by anonymous read by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by set.expand="user/editAccounts & [TRUE]" write by dn.exact,expand="cn=postmaster,vd=$1,o=hosting,dc=example,dc=tld" read olcAccess: to dn.regex=".+,vd=([^,]+),o=hosting,dc=example,dc=tld$" attrs=amavisBypassSpamChecks,accountActive,delete by dn="cn=admin,dc=example,dc=tld" write by self read by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by dn.exact,expand="cn=postmaster,vd=$1,o=hosting,dc=example,dc=tld" write by set.expand="user/vd & [$1]" write olcAccess: to dn.regex=".+,vd=([^,]+),o=hosting,dc=example,dc=tld$" attrs=otherPath by dn="cn=admin,dc=example,dc=tld" write by anonymous read by self read by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by dn.exact,expand="cn=postmaster,vd=$1,o=hosting,dc=example,dc=tld" read by set.expand="user/vd & [$1]" write olcAccess: to dn.regex=".+,vd=([^,]+),o=hosting,dc=example,dc=tld$" attrs=createMaildir,vdHome,mailbox,otherTransport by dn="cn=admin,dc=example,dc=tld" write by self read by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by set.expand="user/vd & [$1]" read olcAccess: to dn.regex="^(.+,)?vd=([^,]+),o=hosting,dc=example,dc=tld$" attrs=vd by dn="cn=admin,dc=example,dc=tld" write by self write by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by dn.exact,expand="cn=postmaster,vd=$2,o=hosting,dc=example,dc=tld" write by set.expand="user/vd & [$2]" write olcAccess: to dn.regex="^(.+,)?vd=([^,]+),o=hosting,dc=example,dc=tld$" by dn="cn=admin,dc=example,dc=tld" write by self write by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by set.expand="user/editAccounts & [FALSE]" read by dn.exact,expand="cn=postmaster,vd=$2,o=hosting,dc=example,dc=tld" write by set.expand="user/vd & [$2]" write olcAccess: to dn.regex=".+,o=hosting,dc=example,dc=tld$" by dn="cn=admin,dc=example,dc=tld" write by self write by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by anonymous auth olcAccess: to dn.regex=".+,dc=tld$" by dn="cn=admin,dc=example,dc=tld" write by dn.exact="cn=phamm,o=hosting,dc=example,dc=tld" read by anonymous auth olcAccess: to dn.regex=".+,ou=admin,dc=example,dc=tld$" attrs=userPassword by dn="cn=admin,dc=example,dc=tld" write by self write by anonymous auth olcAccess: to dn.regex=".+,ou=admin,dc=example,dc=tld$" attrs=vd by dn="cn=admin,dc=example,dc=tld" write by self read olcAccess: to dn.regex="ou=admin,dc=x4w,dc=it$" by dn="cn=admin,dc=example,dc=tld" write by self read
现在我们要设置acl的:
ldapmodify -x -D cn=admin,cn=config -W -f acl-del.ldif
ldapmodify -x -D cn=admin,cn=config -W -f acl.ldif
您将被要求您在安装OpenLDAP时定义的密码。
现在我们将把主机组织添加到OpenLDAP中:
vi phamm.ldif
并将以下内容粘贴到其中:
dn:o=hosting,dc=example,dc=tld objectClass: top objectClass: organization o: hosting description: mail.example.tld hosting root
将描述更改为您想要的内容。
现在我们要导入ldif:
ldapadd -x -D cn=admin,dc=example,dc=tld -W -f phamm.ldif
OpenLDAP配置到此结束。