GiorgioRavera.it

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

dicembre 16th, 2009

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/sender_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:

sender_canonical_maps = hash:/etc/postfix/sender_canonical

ed infine prepariamo la map con

# postmap /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

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

Gestione Mailing-List Mailman + Hypermail
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 hypermail

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_EMAIL_HOST = ‘vostrodominio.com’
DEFAULT_URL_HOST = ‘www.vostrosito.com’
MTA=’Postfix’
PUBLIC_EXTERNAL_ARCHIVER = ‘hypermail -L it -m /var/lib/mailman/archives/private/%(listname)s.mbox/%(listname)s.mbox -l %(listname)s -d /var/lib/mailman/archives/public/%(listname)s’
PRIVATE_EXTERNAL_ARCHIVER = ‘hypermail -c -L it -m /var/lib/mailman/archives/private/%(listname)s.mbox/%(listname)s.mbox -l %(listname)s -d /var/lib/mailman/archives/private/%(listname)s’
PUBLIC_ARCHIVE_URL = ‘/archives/%(listname)s’
PRIVATE_ARCHIVE_URL = ‘/archives/%(listname)s’
ARCHIVE_TO_MBOX = 2

Fate attenzione alle voci PUBLIC_ARCHIVE_URL e PRIVATE_ARCHIVE_URL. Sono i link che in mailman verranno associati all’archivio delle vostre mailinglist (www.vostrodominio.it/archives/nomelista). di conseguenza un mio consiglio è creare un link simbolico nella DocumentRoot del server apache in questione:

# ln -s /var/lib/mailman/archives/public/ archives

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

# newlist mailman

ed il gioco è fatto. 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.

Autenticazione SASL2 ed SMTPS
In questa parte vediamo come realizzare un server che consenta di inviare mail con autenticazione e, proprio per questo, si consiglia di usare un protocollo criptato (smpts). Per prima cosa sarà necessario installare sasl2:

# apt-get install libsasl2-2 libsasl2-modules sasl2-bin

Una volta installati, occorre modificare il file /etc/postfix/master.cf da così:

#tlsmgr fifo – – n 300 1 tlsmgr
#smtps inet n – n – – smtpd -o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
#587 inet n – n – – smtpd -o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes

a così:

tlsmgr unix – – n 300 1 tlsmgr
smtps inet n – – – – smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

587 inet n – n – – smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes

In questo modo si attiva la possibilità di usare smtps. Successivamente è necessario abilitare il demone saslauthd modificando come segue il file /etc/default/saslauthd:

START=yes

Se postfix venisse avviato in chroot (/var/spool/postfix/) allora è necessario spostare i file di database utenti che si crea sasl2-bin e il socket per permettere a postfix di dialogare con saslauth. Per fare questo è necessario svolgere i seguenti passi:

# /etc/init.d/saslauthd stop
# mkdir /var/spool/postfix/var/run/saslauthd
# chmod 0711 /var/spool/postfix/var/run/saslauthd
# chgrp postfix /var/spool/postfix/var/run/saslauthd
# rmdir /var/run/saslauthd
# ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
# ln -s /var/run/saslauthd /var/run/sasl2
# adduser postfix sasl

E’ necessario modificare il file di configurazione del demone postfix /etc/init.d/postfix perché copi nella sua root il file /etc/sasldb2 modificando da:

FILES=”etc/localtime etc/services etc/resolv.conf etc/hosts \
etc/nsswitch.conf etc/nss_mdns.config”

a:

FILES=”etc/localtime etc/services etc/resolv.conf etc/hosts \
etc/nsswitch.conf etc/nss_mdns.config etc/sasldb2″

Occorre ora modificare il file /etc/postfix/main.cf aggiungendo le seguenti righe:

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_option = noanonymous
broken_sasl_auth_clients=yes
smtpd_sasl_authenticated_header=no

smtpd_recipient_restrictions = permit_sasl_authenticated
permit_mynetworks
reject_unauth_destination
smtpd_client_restrictions = permit_sasl_authenticated
reject_unknown_client

smtpd_use_tls = yes
smtpd_tls_key_file = /etc/ssl/misc/server.pem
smtpd_tls_cert_file = /etc/ssl/misc/server.pem
smtpd_tls_CAfile = /etc/ssl/misc/root.crt
smtpd_tls_loglevel = 2
smtpd_tls_received_header = no
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

ove /etc/ssl/misc/server.pem va creato opportunamente. Infine occorre creare il file /etc/postfix/sasl2/smtpd.conf che dovrà contenere la seguente riga:

pwcheck_method: saslauthd
mech_list: plain login

e il file /etc/pam.d/smtp che dovrà contenere le seguenti righe:

#
# The PAM configuration file for the sasl authentication service
#

# The standard Unix authentication modules, used with
# NIS (man nsswitch) as well as normal /etc/passwd and
# /etc/shadow entries.
@include common-auth
@include common-account
@include common-session

Relay host
L’ultima cosa che tratteremo in questa guida è la configurazione del relayhost, ovvero il server a cui inoltrare le mail che non vengono riconosciute come locali. Per fare questo è necessario aggiungere le seguenti riche al file /etc/postfix/main.cf:

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_sasl_mechanism_filter = plain login
relayhost = mail.yourisp.org

La configurazione è semplice: si specifica il relayhost e si dichiara che si intende usare un protocollo tls con autenticazione. L’autenticazione sarà fornita tramite il file /etc/postfix/sasl_passwd che presenterà la seguente sintassi:

mail.yourisp.org user:password

Tale file deve essere salvato in hash e richiede, pertanto, la sua preparazione con il comando:

# postmap sasl_passwd

Back Top

Risposte a“Configurare server mail POSTFIX completo su Linux Debian”

  1. Sapresti darmi qualche suggerimento per configurare postfix su mandriva?

  2. Ciao, ritengo questo articolo uno dei migliori in quanto scritto in maniera chiara e con un filo logico. Ed è per questo che spero tu mi possa aiutare a configurare il mio mta.
    Allora premetto che vorrei utilizzare postfix a scopo didattico inizialmente, per poterne studiae il funzionamento e successivamente implementarlo in azienda.

    Alcune premesse della mia rete mista domestica:(Linux, Win..)
    192.168.0.2 ——> server (hostname=server)(dove girano diversi servizi compresi postfix v. 2.6.5)
    192.168.0.3/6 —-> client
    Sul firewall di Mandriva ho aperto le porte del server di posta (nel router NO)
    Io vorrei che l’mta:
    - giri esclusivamente sul server (192.168.0.2)
    - che distribuisca la posta soltanto alla mia subnet,
    - inoltrasse la posta dei client verso internet
    Ti posto il breve ma conciso conf:
    #####/etc/postfix/main.cf#######
    readme_directory = /usr/share/doc/postfix/README_FILES
    html_directory = /usr/share/doc/postfix/html
    sendmail_path = /usr/sbin/sendmail.postfix
    setgid_group = postdrop
    command_directory = /usr/sbin
    manpage_directory = /usr/share/man
    daemon_directory = /usr/lib/postfix
    data_directory = /var/lib/postfix
    newaliases_path = /usr/bin/newaliases
    mailq_path = /usr/bin/mailq
    queue_directory = /var/spool/postfix
    mail_owner = postfix

    # User configurable parameters

    inet_interfaces = localhost
    myorigin = miodominio.homelinux.net (sarebbe il mio domainname)
    mynetworks_style = subnet
    #delay_warning_time = 4h
    smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) (Mandriva Linux)
    unknown_local_recipient_reject_code = 550
    smtp-filter_destination_concurrency_limit = 2
    lmtp-filter_destination_concurrency_limit = 2
    recipient_delimiter = +
    alias_maps = hash:/etc/postfix/aliases, hash:/var/lib/mailman/data/aliases
    Domande:
    Gli utenti dei client devono essere presenti anche sul server dove gira l’mta?
    Come faccio a fare in modo che i client debbano autenticarsi per poter inoltrare le email?
    Complimenti e grazie della disponibilità.

  3. Complimenti per la guida. Finalmente ho compreso le basi di funzionamento di Postfix.
    Sto ereditando la gestione di un postfix in produzione e sto lentamente sostituendo i precedenti gestori, che non mi supportano affatto…
    Se voglio che un utente per l’autenticazione debba inserire come nome non solo l’userID ma tutta la stringa “userIP@nome.dominio.net” come devo fare?
    un cliente mi ha fatto questa richiesta perchè credo abbia un sistema che in automatico crea l’userID nel modo descritto.
    E’ possibile?
    Chiaramente la variazione non dovrebbe riguardare tutti gli utenti ma solo un particolare utente.

    Grazie mille per l’aiuto,

    Luca Marchesan

  4. nel post precedente ovviamente mi sono sbagliato: ho scritto userIP@nome.dominio.net anzichè:

    userID@nome.dominio.net

  1. Configurare server mail POSTFIX con antivirus antispam mailing list e webmail su Linux Debian | LUGIE (,23 dicembre 2009)

    [...] link: Configurare server mail POSTFIX con antivirus antispam mailing list e webmail su Linux Debian This entry was posted on Wednesday, December 16th, 2009 at 10:24 am and is filed under news. You [...]

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

:-[ (B) (^) (P) (@) (O) (D) :-S ;-( (C) (&) :-$ (E) (~) (K) (I) (L) (8) :-O (T) (G) (F) :-( (H) :-) (*) :-D (N) (Y) :-P (U) (W) ;-)