Server di Posta · 4 min read · Oct 13, 2025
Impostare un server di posta utilizzando Exim4, Clamav, Dovecot, SpamAssassin e molti altri su Debian Lenny
Impostare un server di posta utilizzando Exim4, Clamav, Dovecot, SpamAssassin e molti altri su Debian
Questo howto descrive un modo per costruire una piattaforma di posta scalabile, sicura e completa. Offre hosting virtuale di cassette postali in formato maildir con supporto per quote e filtraggio lato server, alias di dominio, alias di indirizzo, inoltro di indirizzi, indirizzi catchall. Il relaying è protetto con STARTTLS e SMTP-AUTH. Le email in arrivo vengono controllate per virus, spam e verificate contro la politica SPF e DNSBL.
Per raggiungere la scalabilità, la configurazione sarà suddivisa su 3 server:
- 1 server MX, dove si trovano la maggior parte delle funzionalità di sicurezza (faramir.middle.earth)
- 1 relay SMTP, per consentire agli utenti di inviare email al mondo esterno (ectelion.middle.earth)
- 1 server Mailstore, dove si trova la cassetta postale (denetor.middle.earth)
Naturalmente, possono essere aggiunti più MX utilizzando i record DNS MX per i tuoi domini, più server di relay possono essere aggiunti utilizzando il round-robin DNS e più mail store possono essere aggiunti utilizzando i meccanismi descritti in questo howto. All’opposto, puoi facilmente unire la parte MX e quella del relay, o la parte del relay e quella del mailstore. Unire MX e mailstore comporta alcune modifiche.
Nota preliminare
In questo howto presumeremo che tu abbia un server Debian funzionante. Inoltre, si suppone che sudo sia installato sui sistemi e che tu debba essere un sudoer.
Configurazione di LDAP
Le informazioni degli utenti saranno memorizzate in una directory LDAP. Qui installeremo LDAP sul server di relay.
Prima di tutto, installiamo i pacchetti necessari:
sudo apt-get install slapd ldap-utilsPer il tutorial utilizzeremo i seguenti parametri LDAP:
ldapBase: dc=middle,dc=earth
adminDn: cn=admin,dc=middle,dc=earth
adminPwd: thirdAge
Inoltre, utilizzeremo uno schema LDAP specifico. La maggior parte degli attributi e degli oggetti sono standard, tranne uno o due. Attenzione: poiché ci sono molti attributi standard, dovrai assicurarti che nessuno di essi sia definito due volte.
Quindi aggiungiamo lo schema in openldap in /etc/ldap/schema/mailMEO.schema:
attributetype ( 2.16.840.1.113730.3.1.13
NAME 'mailLocalAddress'
DESC 'Indirizzo email RFC822 di questo destinatario'
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 'Quantità massima di spazio su disco per una cassetta postale in kilobyte'
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 del SMTP/MTA di questo destinatario'
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 'Indirizzo di copia shadow 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 'Indirizzo di routing RFC822 di questo destinatario'
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 'Preferenze utente di 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 'Destinatario di posta locale Internet'
SUP top AUXILIARY
MAY ( mailLocalAddress $ mailHost $ mailRoutingAddress $ mailCopyAddress $ mailQuota $ spamassassinUserPrefs ) )
objectclass ( 2.16.840.1.113730.3.2.148
NAME 'inetMailForwarder'
DESC 'Indirizzo di inoltro di posta Internet'
SUP top AUXILIARY
MAY ( mailHost $ mailRoutingAddress ) )Poi assicurati di aggiungere lo schema necessario in /etc/ldap/slapd.conf:
...
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/mailMEO.schema
...… e controlla il suffisso (debconf dovrebbe averlo già configurato quando hai installato slapd):
suffix "dc=middle,dc=earth"Ora aggiungiamo alcune ACL di cui i demoni avranno bisogno per collegarsi a LDAP.
Un accesso in sola lettura all’attributo userPassword per 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 * noneUn accesso in sola lettura ad altri attributi per 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 noneL’ultima ACL disabilita le letture anonime ma consente la lettura (ricerca) per ogni utente autenticato, cosa che potresti non voler.
Possiamo ora riavviare slapd affinché le modifiche abbiano effetto:
sudo /etc/init.d/slapd restartDobbiamo creare gli utenti delle ACL precedenti. Per farlo utilizzeremo il seguente file 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=L’utente/password sono:
dovecot/dovecotpopperexim4/eximmta Per alimentare la directory digita:
ldapadd -x -D cn=admin,dc=middle,dc=earth -W < users.ldifEcco un altro file ldif che contiene dati di esempio (attenzione, questo campione contiene indirizzi IP che non si adattano alla tua configurazione, cambiali 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: gmailRicevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.