Postfix虚拟主机与LDAP后端和与Dovecot作为IMAP / POP3服务器在Ubuntu Kamic Koala 9.10

Postfix虚拟主机与LDAP后端和Dovecot作为IMAP / POP3服务器在Ubuntu Kamic考拉9.10

这将如何让您逐步配置带有虚拟主机的Postfix邮件服务器。 虚拟主机意味着您可以根据需要添加尽可能多的邮件域,并按顺序为这些域按顺序分配任意数量的邮箱。

在这里,我们为MTA(Postfix)和POP3 / IMAP服务器(Dovecot)和基于Web的管理界面使用LDAP后端。

可选在这里怎么使用Roundcube webmail和proftpd。

新版本的Roundcube 0.3允许网络邮件用户更改(ldap)密码,使用ldap(插件)集成ldap通讯录和休假。 这些功能与在此使用的设置很好地对齐,并为邮件用户提供了一个简单的界面。

这是如何是Ubuntu Intrepid版本的升级和增强版本。 请注意,Roundcube和Proftpd的配置可以添加到Intrepid / Jaunty设置中。

要在这个软件中使用如何:

Postfix MTA, Dovecot IMAP / POP3, OpenLDAPGnarwl作为自动回复(假期), Proftpd作为ftp服务器, Phamm作为管理界面, MySQL作为数据库后端的webmail和Roundcube作为Webmail。

这对我来说是有效的,但我不能保证这个设置会为你工作,所以这个如何进来没有任何保证。

假设:

这样如何假设以下配置,如果您的安装与此不同,则将以下条目替换为您的实际配置。

邮件传递(邮箱)路径:

/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

一个只读帐户的o = hosting,dc = example,dc = tld tree:

cn=phamm,o=hosting,dc=example,dc=tld

本指南中您正在使用root用户。

如果你想要例如o = maildomains或ou = domains,请确保替换o = hosting与你想要的,特别是在acl.ldif中。 这个acl文件是严格的,如果不完全一样,phamm将无法正常工作。 如果你想要一个不同于phamm的只读用户,而不是用cn = wat替换cn = phamm,你到底该怎么办?

第1步:安装和配置Ubuntu服务器

我建议您遵循以下指南(我不需要重写或重新设计别人做得比我更好):

完美的服务器 - Ubuntu 9.10 [ISPConfig 3]

更换以下第4页:

aptitude install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl getmail4 rkhunter binutils

通过

aptitude install postfix postfix-ldap mysql-client mysql-server dovecot-imapd dovecot-pop3d libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl getmail4 rkhunter binutils

并跳过postfix的配置。 我们将在本指南中进一步安装和配置Postfix和Dovecot。

注意:所有的URL和包名在编写本文时都是有效的。 最佳做法是检查是否有新版本可用。
下载和提取的软件包的目录名称需要更改为下载的各个软件包的版本号,例如:phamm-0.5.17 to phamm-0.5.xx

所以让我们开始休息。

下载一些我们需要的软件包和openldap模式:

cd /usr/src

获取最新版本的phamm:

wget http://open.rhx.it/phamm/phamm-0.5.17.tar.gz

解压缩档案:

tar xvzf phamm-0.5.17.tar.gz

第2步:安装和配置openldap

OpenLDAP的配置有点(更复杂)。仍然使用cn = config,但是从存储库安装软件包时,只会安装openldap的骨架配置。

当安装软件包并且发出“dpkg-reconfigure slapd”只能将openldap限制在骨架配置中时,您不再需要提供密码。 您将必须使用root帐户(或sudo)设置openldap数据库,root dn和acl的自己才能配置openldap。

安装openldap和ldap-utils:

aptitude install slapd ldap-utils

更改为/ etc / ldap目录:

cd /etc/ldap

将phamm.schema和perversia.net.schema从phamm包复制到模式目录:

cp /usr/src/phamm-0.5.17/schema/phamm.schema /etc/ldap/schema.
cp /usr/src/phamm-0.5.17/schema/contrib/perversia.net.schema /etc/ldap/schema.

获取我们需要的更多模式。

cd schema
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/pureftpd.schema
cd ../

现在我们需要将模式转换为ldif格式。

创建一个名为convert的文件并粘贴下面的文本。

vi 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         /etc/ldap/schema/phamm.schema
include         /etc/ldap/schema/ISPEnv2.schema
include         /etc/ldap/schema/amavis.schema
include         /etc/ldap/schema/pureftpd.schema
include         /etc/ldap/schema/perversia.net.schema

现在我们将转换shemas:

mkdir ldif
slaptest -f convert -F ldif

现在我们更改到包含转换模式的目录:

cd ldif/cn\=config/cn\=schema

该目录应包含以下文件:

cn={0}core.ldif    cn={3}inetorgperson.ldif  cn={6}amavis.ldif
cn={1}cosine.ldif  cn={4}phamm.ldif          cn={7}pureftpd.ldif
cn={2}nis.ldif     cn={5}ISPEnv2.ldif        cn={8}perversia.ldif

我们需要编辑phamm,amavis,pureftpd,ISPEnv2和perversia模式。 对于每一个,您需要执行以下操作(phamm模式的示例):

更改:

dn: cn={4}phamm
objectClass: olcSchemaConfig
cn: {4}phamm

dn: cn=phamm,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: phamm

并删除:

structuralObjectClass: olcSchemaConfig
entryUUID: c27532b2-6a27-102e-88a5-e92372c94d84
creatorsName: cn=config
createTimestamp: 20091120135300Z
entryCSN: 20091120135300.238121Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20091120135300Z

所以对于每一个这些做的都是做出如上所述的改变:

vi cn\=\{4\}phamm.ldif
vi cn\=\{5\}ISPEnv2.ldif
vi cn\=\{6\}amavis.ldif
vi cn\=\{7\}pureftpd.ldif
vi cn\=\{8\}perversia.ldif

注意:该示例中的enry phamm是其他ldif中的ISPEnv2,amavis,pureftpd和pervisia。

现在我们将ldifs复制到/ etc / ldap / schema目录中(这是不需要的,但是当需要ldif时,它是方便的)。

cp cn\=\{4\}phamm.ldif /etc/ldap/schema/phamm.ldif
cp cn\=\{5\}ISPEnv2.ldif /etc/ldap/schema/ISPEnv2.ldif
cp cn\=\{6\}amavis.ldif /etc/ldap/schema/amavis.ldif
cp cn\=\{7\}pureftpd.ldif /etc/ldap/schema/pureftpd.ldif
cp cn\=\{8\}perversia.ldif /etc/ldap/schema/perversia.ldif

我们现在可以删除ldif目录,因为我们不再需要它了,也可以避免任何混淆,并转回到/ etc / ldap目录。

cd /etc/ldap
rm -R ldif

现在我们将模式添加到openldap。

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/phamm.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/ISPEnv2.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/amavis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/pureftpd.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/perversia.ldif

我们需要加载数据库后端模块并创建数据库。

创建一个名为db.ldif的文件,并将以下文本粘贴到其中:

vi db.ldif

db.ldif的内容:

# Load dynamic backend modules
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: {0}back_hdb

# Create the database
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: example
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcDbIndex: cn,mail,givenname eq,subinitial
olcDbIndex: vd,delete eq,pres
olcDbIndex: accountActive,forwardActive eq,pres
olcDbIndex: smtpAuth eq,pres
olcDbIndex: sn,displayName eq,pres,sub
olcDbIndex: default sub
olcDbIndex: uid eq,pres
olcDbIndex: objectClass eq

安装文件并发出以下命令来加载模块并初始化数据库:

ldapadd -Y EXTERNAL -H ldapi:// -f db.ldif

请注意olcRootPW:RootPW设置为示例的示例。 替换示例,使用您选择的密码。

现在,我们为openldap服务器以及o = hosting和phamm帐户创建基础dn和管理员帐户。

修改下面的文本以满足您的需求,并为管理员帐户生成密码。 此文件中的哈希将密码设置为示例。 phamm帐户的隐藏导致密码只读。

要为管理员帐户创建密码,请输入以下命令:

slappasswd -h {MD5}

键入想要的pasword两次,并将结果复制到下面的文本。

创建base.ldif

vi base.ldif

base.ldif的内容

dn: dc=example,dc=tld
objectClass: dcObject
objectclass: organization
o: example.tld
dc: example
description: My LDAP Root

dn: cn=admin,dc=example,dc=tld
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: {MD5}Gnmk1g3mcY6OWzJuM4rlMw==
description: LDAP administrator

dn: o=hosting,dc=example,dc=tld
objectClass: organizationalUnit
objectClass: top
ou: domains
description: Hosting Organization

# Read only account
dn: cn=phamm,o=hosting,dc=example,dc=tld
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: phamm
userPassword: {MD5}M267sheb6qc0Ck8WIPOvQA==
description: Read only account

使用以下命令将基础dn加载到数据库中:

ldapadd -Y EXTERNAL -H ldapi:// -f base.ldif

我们修改系统acl的。

在openldap设置中有一些acl设置,阻止phpldapadmin与目录进行接口,所以我们现在将其删除,并将openldap设置为默认的cn = admin,cn = config。 从这一刻起,openldap可以像以前一样配置和操作,但不再通过发出命令,如ldapadd -Y EXTERNAL -H ldapi:// -f文件 ,而是ldapadd -x -Y EXTERNAL -H ldapi:// -D cn = admin,cn = config -W -f文件

创建一个名为config.ldif的文件,并粘贴下面的文本。 但是不要忘记用上面创建的哈希替换olcRootPW哈希。

vi config.ldif

config.ldif的内容:

dn: cn=config
changetype: modify
delete: olcAuthzRegexp

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
delete: olcAccess

dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcRootDN

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=admin,cn=config

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {MD5}Gnmk1g3mcY6OWzJuM4rlMw==

dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcAccess

config.ldif加载到openldap服务器:

ldapadd -Y EXTERNAL -H ldapi:// -f config.ldif

设置ldap acl的phamm。

创建一个名为acl.ldif的文件,并将下面的文本粘贴到其中:

vi acl.ldif

acl.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,uid,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 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

现在将acl加载到openldap服务器中:

ldapmodify -x -D cn=admin,cn=config -W -f acl.ldif

现在我们已经配置了openldap,我们可以去下一步。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏