设置邮件服务器使用Exim4,Clamav,Dovecot,SpamAssassin和更多的Debian Lenny

使用Exim4,Clamav,Dovecot,SpamAssassin等设置邮件服务器

本文介绍了构建可扩展,安全,功能齐全的邮件平台的一种方式。 它提供maildir格式的虚拟托管邮箱,支持配额和服务器端过滤,域别名,地址别名,地址转发,即时通讯地址。 通过STARTTLS和SMTP-AUTH保护中继。 检查邮件的病毒,垃圾邮件,并检查SPF策略和DNSBL。

为了实现标量化,安装程序将在3台服务器上分配:

  • 1个MX服务器,大多数安全功能都位于( faramir.middle.earth
  • 1个SMTP中继,允许用户向外界发送邮件( ectelion.middle.earth
  • 邮箱位于的邮箱服务器( denetor.middle.earth

当然,可以使用DNS MX记录将更多的MX添加到您的域中,可以使用DNS循环添加更多的中继服务器,并且可以使用此howto中描述的机制添加更多的邮件存储。 相反,您可以轻松合并MX和继电器部件,或继电器和邮件部分。 合并MX和邮件库涉及一些修改。

初步说明

在这方面我们将假设你有一个工作的Debian服务器。 同样,sudo应该被安装在系统上,你必须是sudoer。

配置LDAP

用户的信息将存储在LDAP目录中。 这里我们将它安装在中继服务器上。

首先我们来安装必要的软件包:

sudo apt-get install slapd ldap-utils

对于本教程,我们将使用以下LDAP参数:

ldapBase: dc = middle,dc = earth

adminDn: cn = admin,dc = middle,dc = earth

adminPwd: thirdAge

此外,我们将使用特定的LDAP模式。 大多数属性和对象是除了一个或两个以外的标准。 注意:由于有很多标准属性,您将不得不关心它们不被定义两次。

所以我们在/etc/ldap/schema/mailMEO.schema中的openldap中添加模式:

 attributetype ( 2.16.840.1.113730.3.1.13 
    NAME 'mailLocalAddress'
    DESC 'RFC822 email address of this recipient'
    EQUALITY caseIgnoreIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )

attributetype ( 2.16.840.1.113730.3.1.16
    NAME 'mailQuota'
    DESC 'Maiximal amount of disk space for a mailbox in kilobytes'
    EQUALITY integerMatch
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )

attributetype ( 2.16.840.1.113730.3.1.18
    NAME 'mailHost'
    DESC 'FQDN of the SMTP/MTA of this recipient'
    EQUALITY caseIgnoreIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}
    SINGLE-VALUE )

attributetype ( 2.16.840.1.113730.3.1.22
    NAME 'mailCopyAddress'
    DESC 'RFC822 email shadow copy address'
    EQUALITY caseIgnoreIA5Match
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )

attributetype ( 2.16.840.1.113730.3.1.47
    NAME 'mailRoutingAddress'
    DESC 'RFC822 routing address of this recipient'
    EQUALITY caseIgnoreIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )

attributetype ( 2.16.840.1.113730.3.1.49
    NAME 'spamassassinUserPrefs'
    DESC 'SpamAssassin user preferences'
    EQUALITY caseIgnoreIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )

objectclass ( 2.16.840.1.113730.3.2.147
    NAME 'inetLocalMailRecipient'
    DESC 'Internet local mail recipient'
    SUP top AUXILIARY
    MAY    ( mailLocalAddress $ mailHost $ mailRoutingAddress $ mailCopyAddress $ mailQuota $ spamassassinUserPrefs ) )
 
objectclass ( 2.16.840.1.113730.3.2.148
    NAME 'inetMailForwarder'
    DESC 'Internet mail Forward Address'
    SUP top AUXILIARY
    MAY    ( mailHost $ mailRoutingAddress ) )

然后确保在/etc/ldap/slapd.conf中添加所需的模式:

...
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/mailMEO.schema
...

...并检查Postfix(debconf应该已经在您安装slapd时配置):

suffix          "dc=middle,dc=earth"

现在我们添加几个守护程序需要绑定到LDAP的ACL。

对dovecot的userPassword属性的只读访问权限:

access to attrs=userPassword,shadowLastChange 
        by dn="cn=admin,dc=middle,dc=earth" write
        by dn="uid=dovecot,dc=middle,dc=earth" read
        by anonymous auth
        by self write
        by * none

只读访问exim和dovecot的其他属性:

access to * 
        by dn="cn=admin,dc=middle,dc=earth" write
        by dn="uid=dovecot,dc=middle,dc=earth" read
        by dn="uid=exim,dc=middle,dc=earth" read
        by * read
        by anonymous none

最后一个ACL禁用匿名读取,但是可以读取(搜索)每个经过身份验证的用户,您可能不需要它。

我们现在可以重新启动slapd以使更改生效:

sudo /etc/init.d/slapd restart

我们必须创建以前的ACL的用户。 为此,我们将使用以下user.ldif文件:

dn: uid=exim,dc=middle,dc=earth
objectClass: account
objectClass: simpleSecurityObject
objectClass: top
uid: exim
userPassword:: e01ENX1hOElTeXAwV2hnVzFSVnhHd0hCNDF3PT0=

dn: uid=dovecot,dc=middle,dc=earth
objectClass: account
objectClass: simpleSecurityObject
objectClass: top
uid: dovecot
userPassword:: e01ENX1yZGp2Q1lPNmtDRm1scXAyVWQwa0xBPT0=

用户/通行证是:

dovecot/dovecotpopper
exim4/eximmta

要提供目录类型:

ldapadd -x -D cn=admin,dc=middle,dc=earth -W < users.ldif

这是另一个包含示例数据的ldif文件(请注意,此示例包含不适合您设置的IP地址,请手动更改)

dn: ou=domains,dc=middle,dc=earth
objectClass: organizationalUnit
objectClass: top
ou: domains

dn: dc=middle.earth,ou=domains,dc=middle,dc=earth
dc: middle.earth
objectClass: dNSDomain
objectClass: top
objectClass: inetLocalMailRecipient
objectClass: domainRelatedObject
objectClass: posixAccount
mailLocalAddress: catchall@middle.earth
cn: catchall
gidNumber: 8
homeDirectory: /var/mail/middle.earth/c/catchall
uid: catchall
uidNumber: 8
userPassword:: e01ENX1EV3RteGErOFROanJKNUFXZWt1Z0tBPT0=
mailQuota: 102400
mailHost: denetor.middle.earth
associatedDomain: middle.earth
associatedDomain: lotr.middle.earth

dn: uid=sam,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: sam
displayName: Sam Gamji
gidNumber: 8
homeDirectory: /var/mail/middle.earth/s/sam
mail: sam@middle.earth
mailHost: 172.16.16.23
mailQuota: 102400
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: Gamji
uidNumber: 8
uid: sam
userPassword:: e01ENX1NeVV5M1BxaHkvWWVLaVpyMXlOaExBPT0=
mailLocalAddress: sam@middle.earth
mailLocalAddress: gamji@middle.earth
mailLocalAddress: shire@middle.earth

dn: uid=frodo,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: frodo
displayName: Frodo Baggins
gidNumber: 8
givenName: Frodo
homeDirectory: /var/mail/middle.earth/f/frodo
mail: frodo@middle.earth
mailHost: 172.16.16.23
mailQuota: 102400
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: Baggins
uidNumber: 8
uid: frodo
userPassword:: e01ENX04UGlDRHVnWEdCMmNhRktnbDljTmpRPT0=
mailLocalAddress: frodo@middle.earth
mailLocalAddress: baggins@middle.earth
mailLocalAddress: shire@middle.earth

dn: uid=gmail,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: gmail
mail: alxgomz@gmail.com
mailHost: 172.16.16.23
mailRoutingAddress: alxgomz@gmail.com
objectClass: inetMailForwarder
objectClass: inetOrgPerson
objectClass: top
sn: alias to Gmail address
uid: gmail
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

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

支付宝扫一扫打赏

微信扫一扫打赏