Servidor de Email · 4 min read · Oct 13, 2025
Configurando Um Servidor de Email Usando Exim4, Clamav, Dovecot, SpamAssassin E Muitos Outros No Debian Lenny
Configurando Um Servidor de Email Usando Exim4, Clamav, Dovecot, SpamAssassin E Muitos Outros No Debian
Este howto descreve uma maneira de construir uma plataforma de email escalável, segura e com todos os recursos. Ele oferece hospedagem virtual de caixas de correio no formato maildir com suporte para quotas e filtragem do lado do servidor, alias de domínio, alias de endereço, encaminhamento de endereço e endereços catchall. O revezamento é protegido com STARTTLS e SMTP-AUTH. Os emails recebidos são verificados quanto a vírus, spam e verificados contra a política SPF e DNSBL.
Para alcançar a escalabilidade, a configuração será dividida em 3 servidores:
- 1 servidor MX, onde a maioria dos recursos de segurança está (faramir.middle.earth)
- 1 relay SMTP, para permitir que os usuários enviem emails para o mundo exterior (ectelion.middle.earth)
- 1 servidor Mailstore, onde a caixa de correio está (denetor.middle.earth)
Claro que mais MX podem ser adicionados usando registros DNS MX para seus domínios, mais servidores relay podem ser adicionados usando round-robin DNS, e mais armazenamentos de email podem ser adicionados usando mecanismos descritos neste howto. Por outro lado, você pode facilmente mesclar a parte MX e relay, ou a parte relay e mailstore. Mesclar MX e mailstore envolve algumas modificações.
Nota Preliminar
Neste howto, assumiremos que você tem um servidor Debian funcionando. Além disso, o sudo deve estar instalado nos sistemas e você deve ser um sudoer.
Configurando LDAP
As informações dos usuários serão armazenadas em um diretório LDAP. Aqui, instalaremos no servidor relay.
Primeiro, vamos instalar os pacotes necessários:
sudo apt-get install slapd ldap-utilsPara o tutorial, usaremos os seguintes parâmetros LDAP:
ldapBase: dc=middle,dc=earth
adminDn: cn=admin,dc=middle,dc=earth
adminPwd: thirdAge
Além disso, usaremos um esquema LDAP específico. A maioria dos atributos e objetos são padrões, exceto um ou dois. Cuidado: como há muitos atributos padrão, você terá que garantir que nenhum deles esteja definido duas vezes.
Então, vamos adicionar o esquema no openldap em /etc/ldap/schema/mailMEO.schema:
attributetype ( 2.16.840.1.113730.3.1.13
NAME 'mailLocalAddress'
DESC 'Endereço de email RFC822 deste destinatário'
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 'Quantidade máxima de espaço em disco para uma caixa de correio em 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 do SMTP/MTA deste destinatário'
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 'Endereço de cópia sombra RFC822'
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 'Endereço de roteamento RFC822 deste destinatário'
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 'Preferências do usuário SpamAssassin'
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 'Destinatário de email local da Internet'
SUP top AUXILIARY
MAY ( mailLocalAddress $ mailHost $ mailRoutingAddress $ mailCopyAddress $ mailQuota $ spamassassinUserPrefs ) )
objectclass ( 2.16.840.1.113730.3.2.148
NAME 'inetMailForwarder'
DESC 'Endereço de encaminhamento de email da Internet'
SUP top AUXILIARY
MAY ( mailHost $ mailRoutingAddress ) )Então, certifique-se de adicionar o esquema necessário em /etc/ldap/slapd.conf:
...
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/mailMEO.schema
...… e verifique o sufixo (debconf já deve ter configurado isso quando você instalou o slapd):
suffix "dc=middle,dc=earth"Agora adicionamos algumas ACLs que os daemons precisarão para se conectar ao LDAP.
Um acesso somente leitura ao atributo userPassword para dovecot:
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 * noneUm acesso somente leitura a outros atributos para exim e 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 noneA última ACL desabilita leituras anônimas, mas permite leitura (busca) para cada usuário autenticado, o que você pode não querer.
Agora podemos reiniciar o slapd para que as alterações tenham efeito:
sudo /etc/init.d/slapd restartPrecisamos criar os usuários da ACL anterior. Para isso, usaremos o seguinte arquivo 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=Os usuários/senhas são:
dovecot/dovecotpopperexim4/eximmta Para alimentar o diretório, digite:
ldapadd -x -D cn=admin,dc=middle,dc=earth -W < users.ldifAqui está outro arquivo ldif que contém dados de exemplo (cuidado, este exemplo contém endereços IP que não se adequarão à sua configuração, altere-os manualmente):
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: [email protected]
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: [email protected]
mailHost: 172.16.16.23
mailQuota: 102400
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: Gamji
uidNumber: 8
uid: sam
userPassword:: e01ENX1NeVV5M1BxaHkvWWVLaVpyMXlOaExBPT0=
mailLocalAddress: [email protected]
mailLocalAddress: [email protected]
mailLocalAddress: [email protected]
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: [email protected]
mailHost: 172.16.16.23
mailQuota: 102400
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: Baggins
uidNumber: 8
uid: frodo
userPassword:: e01ENX04UGlDRHVnWEdCMmNhRktnbDljTmpRPT0=
mailLocalAddress: [email protected]
mailLocalAddress: [email protected]
mailLocalAddress: [email protected]
dn: uid=gmail,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: gmail
mail: [email protected]
mailHost: 172.16.16.23
mailRoutingAddress: [email protected]
objectClass: inetMailForwarder
objectClass: inetOrgPerson
objectClass: top
sn: alias to Gmail address
uid: gmailReceba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.