Avanti Indietro Indice

6. Postfix

Questa parte è un'estensione del "mini-postfix-howto" di AGX, autore della distribuzione italiana BadPenguin ( www.badpenguin.org ), e a cui va il merito di buona parte di questa sezione. Postfix vi permette di avere nel vostro computer un vero e proprio server SMTP, che vi permette di inviare la posta da locale e che nulla ha da invidiare a quello del vostro provider! E' preferibile al più diffuso Sendmail per ragioni di sicurezza, facilità di configurazione e di manutenzione. Prima di installarlo, rimuovete sendmail (le istruzioni sono in fondo alla pagina), altrimenti avrete conflitti tra i due.

6.1 Configurazione di Postfix

Innanzitutto assicuratevi che parta ad ogni avvio, controllate che in /etc/rc.d/init.d (o l'equivalente della vostra distribuzione) ci sia lo script "postfix" e date "chkconfig --add postfix", oppure aggiungete "postfix start" a /etc/rc.d/rc.local (o equivalente).

Modificate /etc/postfix/aliases in modo che la posta indirizzata a root venga ricevuta da un utente realmente esistente (è pericoloso gestire la posta da root, potreste perderla tutta, ricordatelo!), inserendo o modificando la riga:


root:          nome_utente_esistente

Consiglio di lasciare che postfix contatti l'SMTP del vostro provider, perché sempre più spesso i server per evitare lo spam fanno dei controlli sull'origine dei messaggi tramite delle interrogazioni ai DNS, e a meno che non abbiate registrato un dominio vostro, NON vi troveranno altrimenti, e la posta resterà nel vostro spool! Consiglio inoltre di impostare l'opzione "defer_transports=smtp" in /etc/postfix/main.cf per evitare che postfix continui ad interrogare internet per cercare di inviare la posta: a collegamento avvenuto potete usare "sendmail -q" o "postfix flush" per inviare tutto (potete inserire il comando in /etc/ppp/ip-up, in modo da fare tutto in automatico a connessione stabilita). Il comando "mailq" (o "sendmail -bp") vi fornisce informazioni sullo stato del vostro spool SMTP, quali e quanti messaggi sono ancora accodati e altro ancora. Per sapere quando la coda è vuota, potete usare il seguente script:


#!/bin/sh
/usr/sbin/sendmail -q
sleep 10
while mailq | grep '^[^ ]*\*' >/dev/null
do 
    sleep 10
done

Altri comandi utili sono "postfix start" (avvia postfix), "postfix reload" (per far sì che postfix rilegga il file di configurazione dopo eventuali cambiamenti), "postfix stop" (ferma postfix), "postfix check" (controlla la configurazione di postfix). Ecco un esempio di file /etc/postfix/main.cf (le poche righe da modificare sono indicate all'inizio del file, e eventuali altri parametri presenti nel vostro file main.cf possono essere lasciati al loro valore di default):


#- file di configurazione principale di Postfix

#- I parametri che DOVETE cambiare sono i seguenti, seguendo le istruzioni
#- date nel file. In particolare, per il relayhost, fate il comando seguente:
#- nslookup smtp.vostro.provider
#- per conoscere l'IP dell'SMTP del vostro provider, e sostituitelo tra le
#- parentesi quadre, LASCIANDOLE!
#- "myhostname", "mydomain" e "relayhost"

#- la directory della coda di postfix
queue_directory = /var/spool/postfix

#- la directory dove risiedono i programmi di postfix (gli RPM di solito li
#- installano in /usr/sbin, cambiate di conseguenza per altre installazioni)
program_directory = /usr/sbin

#- la directory dove risiedono tutti i programmi del tipo postXXX
command_directory = $program_directory

#- la directory che contiene i demoni di postfix
daemon_directory = $program_directory

#- il possessore dei processi di postfix. Usate un utente dedicato, con
#- privilegi minimi, e che non sia daemon o nobody, e CREATELO!!!
mail_owner = postfix

#- i privilegi di default dell'agente di smistamento locale
default_privs = nobody

#- la directory di spool di default, dove finiscono le email in arrivo
mail_spool_directory = /var/spool/mail

#- il programma usato per lo smistamento locale delle email. Correggete
#- eventualmente il path. In genere per sicurezza è meglio richiamare
#- procmail quì, piuttosto che da fetchmail
mailbox_command = /usr/bin/procmail

#- il nome COMPLETO del vostro host, compreso il dominio
myhostname = pingu.mrshark.home

#- il nome del vostro dominio
mydomain = mrshark.home

#- il dominio che risulterà l'origine per le email smistate localmente
myorigin = $mydomain

#- l'elenco di domini che postfix condidererà locali, per i queli cioè
#- verranno smistate le email direttamente, senza interpellare l'esterno
mydestination = $myhostname, localhost.$mydomain, $mydomain

#- le interfacce di rete da cui accettare email, in genere tutte
inet_interfaces = all

#- il banner riportato da postfix quando lo si contatta
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

#- il metodo di trasporto delle email usato di default
default_transport = smtp

#- l'elenco degli IP delle reti attaccate al computer, ritenute come locali.
#- Per un computer singolo basta solo 127.0.0.0/8, mentre per reti più ampie
#- aggiungete le relative sottoreti, usando le maschere opportune
mynetworks = 127.0.0.0/8, 192.168.0.0/24

#- l'SMTP del vostro provider, cui verranno inviate le email in uscita.
#- Se volete che postfix contatti direttamente l'SMTP di destinazione,
#- commentate la riga seguente. Le [] evitano la risoluzione del nome
#- da parte del DNS, accelerando le operazioni (se inserite l'ip è meglio)
relayhost = [mail.libero.it]

#- disabilita la risoluzione dei nomi di dominio. Se usate quest'opzione,
#- DOVETE usare l'indirizzo IP dell'SMTP del vostro provider per il parametro
#- relayhost visto in precedenza (usate "nslookup smtp.vostro.provider" ...)
disable_dns_lookups = yes

#- informa il postmaster di possibili problemi con il mail-server
notify_classes = resource, software, bounce, policy, protocol

#- questo evita connessioni indesiderate spontanee via PPP
defer_transports = smtp

#- questi lasciateli come sono, indicano i limiti per le operazioni simultanee
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10

#- riscrive gli header mascherandoli, in modo che appaiano come tutti
#- provenienti come da un unico host, utile sia in dial-up che in rete.
#- Usatelo in unione ai file XXX_canonical, spiegati di seguito
masquerade_domains = $mydomain

#- l'elenco degli alias di sistema
alias_maps = hash:$config_directory/aliases
alias_database = hash:$config_directory/aliases

#- usate questi file per specificare come riscrivere gli indirizzi in uscita
#- (in seguito è presente un esempio). Potete usare il solo canonical sia per
#- gli indirizzi in ingresso che per quelli in uscita, oppure usare i file
#- sender_canonical e recipient_canonical per essere più precisi. Se presenti
#- tutti, comunque il file canonical è l'ultimo ad essere processato, perché
#- il più generico. In genere basta usare solo il file sender_canonical,
#- commentate gli altri. Se ad esempio inviate una email come utente locale pippo,
#- verrà riscritta in uscita come se fosse inviata da pippo@libero.it, per esempio
#canonical_maps = hash:$config_directory/canonical
#recipient_canonical_maps = hash:$config_directory/recipient_canonical
sender_canonical_maps = hash:$config_directory/sender_canonical

#- usate questo file per riscrivere gli indirizzi delle email in ingresso, in modo
#- che se contengono uno dei vostri indirizzi email pubblici, vengano riscritti
#- come se fossero diretti al vostro utente locale indicato (un esempio in seguito)
virtual_maps = hash:$config_directory/virtual

#- anti-spam! Confronta gli header delle email con quelli riconosciuti come spammers,
#- e in tal caso scarta l'email. Rallenta leggermente il processo! La prima riga
#- definisce i server usati per il controllo, la seconda e la terza impongono delle
#- restrizioni, la quarta definisce un file aggiuntivo in cui inserire delle espressioni
#- regolari tramite le quali scartare a priori email potenzialmente pericolose, come il
#- famoso virus I-Love-You (un file di esempio è mostrato in seguito). NON va fatto il
#- postmap! La quinta richiede che l'MTA invii un comando HELO per stabilire la connessione,
#- cosa che i software di spam di solito non fanno, mentre gli MTA veri fanno quasi sempre!
maps_rbl_domains = blackholes.mail-abuse.org, dialups.mail-abuse.org, rbl.maps.vix.com, dul.maps.vix.com
smtpd_client_restrictions = permit_mynetworks, reject_maps_rbl, reject_unknown_hostname
smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain
header_checks = regexp:$config_directory/header_checks
smtpd_helo_required = yes

#- Se volete un backup TOTALE di tutto quello che passa attraverso Postfix,
#- togliete il commento dalla riga seguente e modificate l'indirizzo email.
#- L'indirizzo indicato riceverà in copia nascosta (BCC) tutte le email!!!
#always_bcc = indirizzo.email@backup.com

Ora create i file per far corrispondere i vostri indirizzi email ai vostri utenti locali. Si tratta dei file /etc/postfix/sender_canonical (che contiene gli indirizzi che verranno inseriti nel campo from per ogni utente al posto di utente@vostra.macchina) e /etc/postfix/virtual (che stabilisce a quali utenti locali vadano inviate le email in base all'indirizzo remoto contenuto). Come esempi ecco i miei file. Questo è il mio /etc/postfix/sender_canonical:


root    mrshark@libero.it
mrshark mrshark@libero.it
antonio mrshark@libero.it

e questo il mio /etc/postfix/virtual (tutte le email dai miei indirizzi finiscono all'utente locale mrshark):


mrshark@linuxfan.com    mrshark
mrshark@libero.it       mrshark
mrshark@tiscalinet.it   mrshark
antonio.fragola@tin.it  mrshark

Ogni volta che modificate /etc/postfix/aliases dovete rigenerare il database dando il comando:


postalias /etc/postfix/aliases

mentre se modificate il file /etc/postfix/sender_canonical date:


postmap /etc/postfix/sender_canonical

oppure per /etc/postfix/virtual date:


postmap /etc/postfix/virtual

Dopo ogni modifica a qualcuno di questi tre file, dovete riavviare postfix con:


postfix reload

Ricordate di installare e configurare anche un MDA, come procmail, per far smistare la posta in arrivo in mailbox diverse piuttosto che in una sola di default.

Se volete un'analisi dei log di postfix, potete usare il programma in perl pflogsumm, scaricabile da http://home.msen.com/~jimsun/postfix_contrib.html, inserendo con "crontab -e" una riga tipo la seguente:


0 2 * * * /path/to/pflogsumm.pl -d today /var/log/maillog | mail -s "Postfix Mail Report" root

L'utente indicato alla fine della riga riceverà delle email contenenti un'analisi dei log di postfix.

6.2 Disattivazione e disinstallazione di Sendmail

Per disattivare sendmail date i seguenti comandi:


mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
mv /usr/bin/newaliases /usr/bin/newaliases.OFF
mv /usr/bin/mailq /usr/bin/mailq.OFF
chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF /usr/bin/mailq.OFF
/usr/sbin/sendmail.OFF -q

L'ultimo comando serve a svuotare dalle eventuali email la coda delle email, inviandole.

Note per RedHat e Mandrake: se installando postfix vi dice che c'è un conflitto con sendmail, devete prima rimuovere quest'ultimo, magari prima facendovi un backup dei suoi file di configurazione, nel caso (ma quando mai! ;-) ) voleste ritornare indietro. Postfix fornisce dei "wrapper" per i comandi di sendmail, quindi forzate la rimozione con l'opzione "--nodeps", per ignorare le dipendenze. Se volete semplicemente disattivarlo, fate come mostrato poco fa, altrimenti per disinstallarlo, date i seguenti comandi:


mkdir /root/sendmail-old
cp /etc/aliases /root/sendmail-old/
cp /etc/sendmail.cf /root/sendmail-old/
cp /etc/sendmail.cw /root/sendmail-old/
cp /etc/mail/* /root/sendmail-old/
rpm -e sendmail sendmail-doc sendmail-cf --nodeps
killall sendmail
rpm -Uvh postfix-19990906_pl07.i586.rpm

(l'ultimo comando potrebbe essere diverso, nel caso abbiate una versione più recente di postfix).

Se avevate un'installazione funzionante precedente di sendmail, potete importare i vecchi alias in postfix senza riscriverli tutti, copiando dal backup precedente "/root/sendmail-old/aliases" in "/etc/postfix/aliases" e dando il comando "newaliases" per creare il file "aliases.db" necessario a postfix.


Avanti Indietro Indice