BSD-FAQ-it
Indietro | Capitolo 7. Sostituire alcuni applicativi di sistema utilizzando i ports | Avanti

# 7.2. Postfix

Postfix (http://www.postfix.org/) può essere considerato come l'esempio del moderno server di posta elettronica. Si tratta di una applicazione realizzata da Wietse Venema, questo software è stato pensato e sviluppato presso i laboratori di ricerca IBM di T.J. Watson e pur essendo stato concepito come diretto competitore di Qmail è divenuto immediatamente una valida alternativa al più noto dei mail-server Sendmail. Uno degli obiettivi perseguiti da Postfix è quello di essere un server di posta elettronica sicuro e veloce.

Tecnicamente Postfix si compone di diversi demoni che si occupano di gestire diversi processi che sono molto ben definiti. Il demone principale, meglio conosciuto come ``master'', viene eseguito con i massimi privilegi di un sistema UNIX® mentre tutti gli altri demoni, che vengono controllati appunto dal processo ``master'', possono essere eseguiti da un utente UNIX® che dispone di privilegi molto limitati. L'esecuzione dei processi figli del server Postfix può anche essere circoscritta a un ambiente molto limitato quale è la gabbia di chroot. La chroot jail non è altro che una sottodirectory nella quale può essere eseguita una applicazione, questo programma riconosce questa directory come se si trattasse della root directory del filesystem.

Il demone principale ``master'' si occupa di richiamare e coordinare tutti gli tutti gli altri processi, nel momento in cui il server di posta elettronica Postfix riceve una connessione SMTP è il demone ``master'' che si occupa di avviare il sottoprocesso ``smtpd''. Di seguito elenchiamo alcuni dei demoni avviati dal processo master

- master (eseguito con i privilegi dell'utente root)

- smtpd - (privilegi minimi)

- qmgr (privilegi minimi)

- smtp (privilegi minimi)

- local (privilegi minimi)

Postfix è compatibile con il protocollo ESMTP ma, contrariamente a Sendmail, il supporto al protocollo UUCP è piuttosto limitato, Postfix supporta i domini virtuali ed il filtri anti spam, molti dei files di configurazione del server di posta elettronica Sendmail (aliases, .forward) sono pienamente compatibili con i files di configurazione del server Postfix.

## 7.2.1. Configurare Postfix con FreeBSD

Postfix viene mantenuto nell'albero dei ports di FreeBSD, pertanto procederemo all'installazione del software utilizzando il ports relativo nel pieno rispetto delle procedure che abbiamo analizzato nei capitoli precedenti

    [root@battaglia root]# cd /usr/ports/mail/postfix/
    [root@battaglia postfix]# make install clean

In fase di installazione il programma richiederà di aggiungere un nuovo utente postfix al gruppo mail, successivamente la procedura di installazione ci chiederà di attivare il server Postfix utilizzando un nuovo file /etc/mail/mailer.conf.

Molti sistemi BSD vengono forniti con un mailwrapper, questo sistema può essere utilizzato per avere a disposizione diversi MTA installati nello stesso tempo. Il file che viene utilizzato dal mailwrapper è /etc/mail/mailer.conf, questo file invoca l'MTA appropriato rimpiazzando, se necessario, l'MTA di default Sendmail. Visualizziamo ora il contenuto del file mailer.conf generato dal processo di installazione di Postfix

    # Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
    sendmail        /usr/local/sbin/sendmail
    send-mail       /usr/local/sbin/sendmail
    mailq           /usr/local/sbin/sendmail
    newaliases      /usr/local/sbin/sendmail

Si rammenta al lettore che questo file definisce l'MTA (Mail Transport Agent) di default di un sistema FreeBSD, il vecchio file, per intenderci quello che sino ad ora avviava il server Sendmail, verrà salvato con una copia di backup direttamente nel file /etc/mail/mailer.conf.old

## 7.2.2. Il file main.cf

Al termine della compilazione e dell'installazione di Postfix dovremo posizionarci nella directory contenente i files di configurazione di Postfix e editare il file /usr/local/etc/postfix/main.cf

    [root@battaglia root]# cd /usr/local/etc/postfix/

La configurazione che andremo ad analizzare può essere utilizzata su un server che esegue un semplice mail relay per il dominio test.com. Questo sistema prende in consegna la posta e la ridirige verso il mail server definito nel campo MX (Mail Excharge). Nel nostro caso il campo MX impostato nel server DNS è l'host popmail.test.com quindi il server Postfix prenderà in consegna la posta e la inoltrerà verso l'host popmail.test.com

    [root@battaglia postfix]# ee main.cf
    #
    queue_directory = /var/spool/postfix
    command_directory = /usr/local/sbin
    daemon_directory = /usr/local/libexec/postfix
    mail_owner = postfix
    myhostname = relay.test.com
    mydomain = test.com
    myorigin = $mydomain
    #mydestination = $myhostname, localhost.$mydomain $mydomain # se la macchina e' un mailhub
    mydestination = $myhostname, localhost.$mydomain # la macchina funziona da semplice relay
    mynetworks = 192.168.1.0/24, 127.0.0.1
    relay_domains = $mydestination,127.0.0.1
    #
    header_checks = regexp:/usr/local/etc/postfix/myCheckHeaders.re
    body_checks = regexp:/usr/local/etc/postfix/myCheckBody.re
    #
    #relayhost = mailhub.test.com # da definire solo se ci si vuole appoggiare ad un server esterno
    #
    alias_maps = hash:/etc/aliases
    smtpd_banner = $myhostname Nome_Organizzazione ESMTP MailServer (Versione 1.0)
    local_destination_concurrency_limit = 2
    default_destination_concurrency_limit = 10
    # Mappe antispam
    smtpd_client_restrictions = permit_mynetworks,
        reject_rbl_client relays.ordb.org,
        reject_rbl_client list.dsbl.org,
        reject_rbl_client relays.visi.com,
        reject_rbl_client blackholes.wirehub.net,
        reject_rbl_client dynablocks.wirehub.net,
        reject_rbl_client blacklist.spambag.org,
        reject_rbl_client dnsbl.njabl.org,
        reject_rbl_client bl.spamcop.net,
    #
    smtpd_helo_required = yes
    smtpd_helo_restrictions = reject_invalid_hostname, reject_unknown_hostname, reject_non_fqdn_hostname
    smtpd_sender_restrictions = reject_unknown_sender_domain
    smtpd_etrn_restrictions = permit_mynetworks
    #

Ora vediamo un rapido elenco dei principali parametri di configurazione di Postfix

- myhostname è il nome della macchina locale. Se il nome della macchina locale non corrisponde con il ``fully-qualified domain name'' o il server Postfix viene eseguito su una interfaccia virtuale è necessario specificare il ``FQDN'' che il sistema sta utilizzando

- mydomain specifica il nome di domino al quale appartiene la nostra macchina

- myorigin specifica il dominio di appartenenza della macchina nel momento in cui inoltra messaggi di posta elettronica

- mydestination spefica il nome dei domini per il quale il mailserver esegue il delivery locale della posta, se non specificato nel parametro i messaggi verranno inoltrati ad altro host

- mynetworks specifica l'elenco degli host per i quali Postfix esegue il relay della posta elettronica, in definitiva si tratta dell'elenco delle reti o degli host autorizzati ad inoltrare posta, come default Postfix esegue il relay solo per gli host definiti dal parametro mynetworks

- relay_domains viene utilizzato per controllare che l'indirizzo di destinazione del messaggio sia conforme con quanto specificato dal parametro stesso, viene utilizzato quando Postfix funziona anche come sistema MX di backup

- header_checks viene utilizzato per analizzare gli header dei messaggi di posta elettronica, l'impostazione di default è qualsiasi tipo di header, in genere si utilizza un file esterno alla configurazione

- body_checks viene utilizzato per analizzare ed eventualmente restringere il testo nelle linee di body del messaggio, l'impostazione di default è qualsiasi tipo di body

- smtpd_banner viene utilizzato per personalizzare il banner di presentazione

- smtpd_client_restrictions definisce il client autorizzati ad iniziare connessioni smtp dal nostro server, l'impostazione di default autorizza qualsiasi tipo di connessione

- smtpd_helo_required determina se i clients debbano inviare o meno il messaggio di HELO (EHLO) nel momento in cui iniziano la connessione smtp, l'impostazione di default è quella di non richiedere alcun messaggio di HELO

- smtpd_sender_restrictions definisce il tipo di sender che può essere accettato nel comando MAIL FROM, Postix come default accetta qualsiasi tipo di sender

- smtpd_etrn_restrictions restringe i domini che devono essere specificati nel comando ETRN, come default Postfix accetta il comando ETRN da qualsiasi client

Ringrazio Alessandro De Manzano che ha contribuito in maniera determinante alla realizzazione di questo paragrafo.

## 7.2.3. Gli aliases con Postfix

Dopo aver editato il file /usr/local/etc/postfix/main.cf e prima di avviare il server di posta Postfix, dovremmo necessariamente creare il nuovo file contenente gli alias di sistema per la posta elettronica utilizzando i comandi

    [root@battaglia root]# newaliases
    [root@battaglia root]# postalias
    postalias: fatal: usage: postalias [-Nfinorvw] [-c config_dir] [-d key] [-q key] [map_type:]file...

grazie a questi due comandi Postfix esegue dei link simbolici ed effettua la conversione della tabella degli alias di sistema utilizzata precedentemente da Sendmail

    [root@battaglia root]# ls /etc/aliases*
    lrwxrwxrwx  1 root  wheel     12 Apr 28 15:14 /etc/aliases@ -> mail/aliases
    -rw-r--r--  1 root  wheel  65536 Oct  2 13:29 /etc/aliases.db

## 7.2.4. Avviare Postfix

Dopo aver eseguito la configurazione e successiva creazione dei nuovi alias del server Postfix possiamo finalmente stoppare il server di posta elettronica Sendmail

    [root@battaglia root]# cd /etc/mail
    [root@battaglia mail]# make stop

per finire facciamo finalmente partire il nuovo server di posta elettronica Postfix

    [root@battaglia root]# postfix check
    [root@battaglia root]# postfix start
    postfix/postfix-script: starting the Postfix mail system

Al caso si decida di modificare la configurazione del server Postfix, per bloccare il server sarà necessario eseguire i seguenti comandi

    [root@battaglia root]# postfix stop
    postfix/postfix-script: stopping the Postfix mail system
    [root@battaglia root]# postfix check
    [root@battaglia root]# postfix start
    postfix/postfix-script: starting the Postfix mail system

Abbiamo già visto che in fase di compilazione ed installazione il file di Make di Postfix sostituisce il file /etc/mail/mailer.conf, grazie a questa procedura, già a partire dal successivo riavvio della macchina FreeBSD, il nuovo mailserver Postfix diverrà automaticamente il server di default in luogo del vecchio postino Sendmail. Nel caso si desideri utilizzare Postfix come server di posta elettronica predefinto sarà opportuno apportare alcune modifiche al file /etc/rc.conf

    sendmail_enable="NONE"

Grazie a questa piccola modifica verrà disabilitato il sistema basato sul mailwrapper, per avviare Postfix in maniera nativa sarà necessario creare uno script di avviamento

    #! /usr/local/bin/bash
    /usr/local/sbin/postfix $1

Questo è l'esempio dello script /usr/local/etc/rc.d/postfix.sh per l'avviamento del server Postfix

Indietro | Partenza | Avanti
Sostituire alcuni applicativi di sistema utilizzando i ports | Risali | Sendmail