GiorgioRavera.it

il mio blog: ciò che penso e faccio, trucchi di programmazione, linux, reti e molto altro

sabato, 23 Marzo 2019

Configurare server mail POSTFIX completo su Linux Debian

Informatica, Linux, Servizi, by Giorgio.

Con questa guida intendo spiegare all’utente debian come configurare un server mail basato su Postfix (http://www.postfix.org). Postfix è un MTA abbastanza sicuro e di recente sviluppo, molto semplice da usare e per alcuni è considerato il successore di sendmail per altro troppo complicato da gestire e con noti problemi di sicurezza.

Gestione degli Alias

In teoria ad ogni utente locale del vostro server corrisponde una sola casella mail. Si possono però creare degli alias che corrispondano ad un particolare utente, un secondo indirizzo a cui inviare mail per quel dato user. Di default esiste il file /etc/aliases che contiene una lista di alias a sinistra e i rispettivi utenti ai quali appartengono a destra. In /etc/postfix/main.cf basta solo aggiungere:

alias_maps = hash:/etc/aliases

e per rendere questo file una mappa utilizzabile da Postfix lanciamo il comando

# postalias /etc/aliases

Multidominio, Virtual Domain e Sender Canonical

Nel caso il vostro Server debba ricevre la posta per più domini non dobbiamo fare altro che modificare la tag mydestination come segue

mydestination = localhost, /etc/postfix/local-domain

creare il file /etc/postfix/local-domain e inserire li i domini da considerare locali uno per riga senza virgole.

Fatto questo conviene preparare un file per la gestione dei domini virtuali in modo tale da associare il giusto dominio al dato utente creiamo allora il file /etc/postfix/virtual La sintassi da usare è la seguente:

info@dominio1.it marco -> le mail in arrivo per tale indirizzo sono redirezionate a marco
webmaster@dominio2.it andrea@dominio4.it -> le mail verranno inviate a andrea@dominio4.it
@dominio3.com alessandro -> tutte le mail inviate a qualsiasi indirizzo @dominio3.com sono inviate all’utente alessandro

aggiungiamo in /etc/postfix/main.cf

virtual_maps = hash:/etc/postfix/virtual

e prepariamo la map con il comando

# postmap /etc/postfix/virtual

Può essere utile sempre per la gestione di più domini usare un file che associ ad un nome utente un indirizzo mittente particolare. Creiamo perciò un file /etc/postfix/canonical dove con la precedente sintassi associamo al nome utente l’indirizzo mittente da mostrare nelle mail inviate. Aggiungiamo in /etc/main.cf la seguente riga:

canonical_maps = hash:/etc/postfix/canonical

ed infine prepariamo la map con

# postmap /etc/postfix/canonical

Questa mappatura verrà applicata sia ai recipient, sia ai sender. Se si volesse applicare una mappatura individuale (solo sender o solo recipient) si possono usare due file specifici con la stessa sintassi. Nel file /etc/postfix/main.cf bisogna aggiungere:

recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
sender_canonical_maps = hash:/etc/postfix/sender_canonical

Antivirus – Amavis e ClamAV

Passiamo ora alla configurazione dell’antivirus da installare sul vostro MTA. Procediamo all’installazione:

# apt-get install amavisd-new clamav clamav-daemon

Dopo l’installazione dobbiamo dire a Postfix di far processare le mail dal vostro antivirus. Aggiungiamo a /etc/postfix/main.cf quanto segue:

content_filter = amavis:[127.0.0.1]:10024

mentre nel file /etc/postfix/master.cf:

amavis unix – – n – 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes

127.0.0.1:10025 inet n – n – – smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes

Di per se non si richiedono altre modifiche per il corretto funzionamento, comunque può essere utile dare un occhiata al file /etc/amavis/amavisd.conf per eventuali modifiche. Il Demone clamav-daemon (freshclam) tiene aggiornato il vostro antivirus aggiornandosi 12 volte al giorno, per eventuali modifiche /etc/clamav/fresclam.conf e /etc/clamv/clamavd.conf

Antispam – Spamassassin

Può essere utile installare un antispam che filtri le mail nel vostro server. Spamassassin è ciò che fa per voi. Installiamolo insieme a procmail:

# apt-get install spamassassin procmail

a questo punto aggiungiamo in /etc/postfix/main.cf quanto segue

mailbox_command = /usr/bin/spamc | procmail -a “$EXTENSION”

abilitiamo spamassassin modificando in /etc/default/spamassassin

ENABLE=1

aggiungiamo al file /etc/procmailrc quanto segue:

DROPPRIVS=yes
:0fw
| /usr/bin/spamassassin
:0:
* ^X-Spam-Status: yes
$HOME/mail/Junk

Per settaggi particolari di spamassassin vi consiglio di dare un’occhiata al file /etc/spamassassin/local.cf oppure consultare il sito web http://www.yrex.com/spam/spamconfig.php che vi consente di creare un file di configurazione personalizzato rispondendo alle varie domande.

WebMail – Openwebmail

Per poter usufruire del servizio di webmail è necessario usare un server web. Io vi consiglio apache con supporto php e cgi. In questa guida presumo che nel vostro server sia già presente apache configurato a dovere. Esistono diversi servizi di WebMail, io ho scelto openwebmail. Per installarlo digitate:

# apt-get install openwebmail

Dopo l’installazione recatevi in /etc/openwebmail e date un occhiata al file apache.conf che contiene le specifiche per configurare apache. Apriamo ora /etc/openwebmail/openwebmail.conf e apportiamo le nostre personalizzazioni. Attenzione alla voce domainnames, spesso auto può portare a dei problemi, vi consiglio di specificare il dominio di appartenenza. Per altre modifiche consultate il file /usr/share/openwebmail/configs/openwebmail.conf

Dovecot per POP3 e IMAP

In questo paragrafo vediamo come configurare dovecot per permettere l’accesso tramite POP3(s) e IMAP(s) al nostro server.

per prima cosa occorre installare dovecot:

# apt-get install dovecot-pop3d dovecot-core dovecot-imapd

una volta installato occorre configurarlo. La directory di configurazione è /etc/dovecot. Le configurazioni sono raggruppate nella sottodirectory conf.d con file tematici. Di seguito le principali modifiche da apportare.

Nel file 10-mail.conf modificare la voce mail_privileged_group come segue:

mail_privileged_group = mail

Nel file 10-master.conf aggiungere in corrispondenza di service auth:

# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

Questo consentirà di autenticare il server smtp per l’invio di mail.

Nel file 10-ssl.conf andremo a specificare i certificati da usare per l’abilitazione di SSL:

ssl_cert = </etc/letsencrypt/live/XXXXX/fullchain.pem
ssl_key = </etc/letsencrypt/live/XXXXX/privkey.pem

Nel mio esempio è riportato il caso di certificati generati con letsencrypt. In caso di self signed occorre specificare anche:

ssl_ca = </etc/ssl/XXXX/own_ca.crt

Nel file 15-mailboxes.conf andremo a specificare eventuali alias per le cartelle imap. Può essere utile quando si usano programmi come Outlook in lingue non inglese dove in caso di assenza delle cartelle di default vengono automaticamente create.

In coda al file ho aggiunto quanto segue:

# Personal Configuration
mailbox Bozze {
special_use = \Drafts
}
mailbox Spam {
special_use = \Junk
}
mailbox “Posta indesiderata” {
special_use = \Junk
}
mailbox Cestino {
special_use = \Trash
}
mailbox “Posta eliminata” {
special_use = \Trash
}
mailbox “Posta inviata” {
special_use = \Sent
}

Qualora abbiate configurato accesso utenti con ldap occorre installare il modulo apposito:

# apt-get install dovecot-ldap

ed indicare a dovecot i parametri di configurazione per effettuare il login nel file /etc/dovecot/dovecot-ldap.conf.ext.

SMTP(s) con autenticazione

A questo punto vediamo come utilizzare Postfix per inviare mail previa autenticazione. Propedeutico alla cosa è aver configurato dovecot con autenticazione (come visto al paragrafo precedente).

Per prima cosa sarà necessario modificare nel file /etc/postfix/main.cf la parte relativa all’autenticazione:

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = no

Successivamente vengono riportate delle restrizioni al protocollo SMTPD per evitare spam e rendere più robusta la configurazione:

# SMTPD Restrictions
# Allow connections from trusted networks only.
smtpd_client_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_pipelining,
reject_unknown_client_hostname,
reject_rbl_client zen.spamhaus.org,
# reject_rbl_client dnsbl.sorbs.net,
# reject
smtpd_delay_reject = yes
smtpd_helo_required = yes
# Don’t talk to mail systems that don’t know their own hostname.
smtpd_helo_restrictions = reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname
# Don’t accept mail from domains that don’t exist.
smtpd_sender_restrictions = reject_unknown_sender_domain,
reject_non_fqdn_sender,
reject_unknown_sender_domain
# Don’t accept mail from unlisted sender
smtpd_reject_unlisted_sender = yes
# Relay control (Postfix 2.10 and later): local clients and
# authenticated clients may specify any destination domain.
smtpd_relay_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# Spam control: exclude local clients and authenticated clients
# from DNSBL lookups.
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
# reject_unauth_destination is not needed here if the mail
# relay policy is specified under smtpd_relay_restrictions
# (available with Postfix 2.10 and later).
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rhsbl_helo dbl.spamhaus.org,
reject_rhsbl_sender dbl.spamhaus.org

smtpd_error_sleep_time = 1s
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20

Infine consiglio caldamente di abilitare la cifratura SSL:

# SMTPD SSL
smtpd_use_tls = yes
#smtpd_tls_protocols = !SSLv2
smtpd_tls_cert_file = /etc/letsencrypt/live/XXXXX/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/XXXXX/privkey.pem
#smtpd_tls_loglevel = 2
smtpd_tls_received_header = no
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

come nel caso precedente di dovecot abbiamo riportato l’esempio di letsencrypt. Nel caso di self signed certificate sarà necessario aggiungere anche il ca:

smtpd_tls_CAfile = /etc/ssl/XXXX/own_ca.crt

Ultima modifica sarà quella di abilitare in /etc/postfix/master.cf l’autenticazione ssl decommentando la riga:

-o smtpd_sasl_auth_enable=yes

Relay Host

Può capitare che sia necessario usare un server di appoggio per l’invio della posta. Nel caso in cui ad esempio il nostro server sia un server casalingo con un IP dinamico. Basterà aggiungere a /etc/postfix/main.cf i seguenti parametri:

# SMTP Client
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/smtp_sasl_passwd
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
relayhost = [smtp.gmail.com]:587

Nell’esempio riportato è utilizzato il server di google. Siccome tale server richiede autorizzazione occorrerà inserire i parametri di login nel file /etc/postfix/smtp_sasl_passwd e convertire in hash. Di seguito un esempio del file /etc/postfix/smtp_sasl_passwd:

[smtp.gmail.com]:587 USERID@gmail.com:PASSWORD

A questo punto conviene cambiare i permessi e convertire in hash:

# chown root:root /etc/postfix/smtp_sasl_passwd && chmod 600 /etc/postfix/smtp_sasl_passwd
# postmap /etc/postfix/smtp_sasl_passwd

Infine per google occorrerà definire anche le policy nel file /etc/postfix/tls_policy:

[smtp.gmail.com]:587 encrypt protocols=TLSv1 ciphers=high

anche il file tls_policy andrà convertito in hash:

# postmap /etc/postfix/tls_policy

Infine è anche possibile specificare per ciascuna mail quale server relay host utilizzare. Basta modificare nel file /etc/postfix/main.cf aggiungendo:

sender_dependent_relayhost_maps = hash:/etc/postfix/sender_dependent_relayhost

Il file dovrà avere una sintassi come quella riportata nell’esempio:

user@vostrodominio.com       [server]:port

Essendo un file hash occorerà eseguire il comando:

# postmap /etc/postfix/sender_dependent_relayhost

Gestione Mailing-List Mailman

Ogni mailserver che si rispetti ha anche un gestore di mailing-list. Io vi consiglio di installare mailman che possiede un ottimo supporto web per le varie configurazioni:

# apt-get install mailman

Può capitare che, nel caso abbiate installato più di una lingua, la prima volta venga installata solo la lingua inglese. Per eseguite il seguente comando selezionano nuovamente le altre lingue:

# dpkg-reconfigure mailman

Fatto questo modificate /etc/postfix/main.cf aggiungendo quanto segue:

alias_maps = hash:/etc/aliases
hash:/var/lib/mailman/data/aliases
transport_maps = hash:/etc/postfix/transport
relay_domains = lists.vostrodominio.com
mailman_destination_recipient_limit = 1

creiamo /etc/postfix/transport e trasformiamolo in una mappa

# echo lists.vostrodominio.com mailman: > /etc/postfix/transport
# postmap /etc/postfix/transport

Modificate ora il file /etc/postfix/master.cf:

mailman unix – n n – – pipe flags=FR user=list argv=/var/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}

Modificate nel file /etc/mailman/mm_cfg.py i seguenti tag:

DEFAULT_URL_PATTERN = ‘http://%s/’
IMAGE_LOGOS = ‘/images/’
DEFAULT_EMAIL_HOST = ‘lists.vostrosito.com’
DEFAULT_URL_HOST = ‘lists.vostrosito.com’
MTA=’Postfix’
DEB_LISTMASTER = ‘mailadmin@vostrodominio.com’

A questo punto occorrerà configurare il webserver. Consiglio un virtual domain per questo sito nella forma http(s)://lists.vostrodominio.com. Di seguito è riportato un esempio di configurazione:

<VirtualHost *:80>
ServerName lists.vostrosito.com
ServerAdmin giorgio@vostrosito.com
DocumentRoot /var/www/lists.vostrosito.com/htdocs
DirectoryIndex index.html /usr/lib/cgi-bin/mailman/listinfo

<Directory /var/lib/mailman/archives/>
Options FollowSymlinks
AllowOverride None
Require all granted
</Directory>

Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /images/ /usr/share/images/mailman/
ScriptAlias /admin /usr/lib/cgi-bin/mailman/admin
ScriptAlias /admindb /usr/lib/cgi-bin/mailman/admindb
ScriptAlias /confirm /usr/lib/cgi-bin/mailman/confirm
ScriptAlias /create /usr/lib/cgi-bin/mailman/create
ScriptAlias /edithtml /usr/lib/cgi-bin/mailman/edithtml
ScriptAlias /listinfo /usr/lib/cgi-bin/mailman/listinfo
ScriptAlias /options /usr/lib/cgi-bin/mailman/options
ScriptAlias /private /usr/lib/cgi-bin/mailman/private
ScriptAlias /rmlist /usr/lib/cgi-bin/mailman/rmlist
ScriptAlias /roster /usr/lib/cgi-bin/mailman/roster
ScriptAlias /subscribe /usr/lib/cgi-bin/mailman/subscribe
ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/
</VirtualHost>

Create poi una lista mailman di default per il server (altrimenti il suo demone si rifiuta di partire)

# newlist mailman

A questo punto occorre modificare i permessi del file /var/lib/mailman/data/aliases.db e aggiungere l’utente www-data al group list per consentire di essere scritto tramite web server:

# chmod g+w /var/lib/mailman/data/aliases.db
# usermod -a -G list www-data

Occorre infine impostare la password dell’amministratore con il quale sarà possibile creare mailing lista da web:

/var/lib/mailman/bin/mmsitepass

Per creare nuove mailing-list basta usare il comando newlist e per rimuoverle rmlist. Per le altre configurazione mailman crea nella vostra directory cgi-bin un programma che vi consente tramite web di accedere alle varie mailing-list per poter modificarne alcuni parametri, anche in questo caso si richiede una corretta configurazione di apache.

Back Top