使用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