Installazione e configurazione di Berkeley sendmail
su piattaforma Unix
Luca dell'Agnello
luca.dellagnello@cnaf.infn.it
V 1.3
18 Novembre 1999
Fra gli MTA (Mail Transport Agent) di pubblico dominio il Berkeley
sendmail
è quello più completo, più aderente agli standard
(RFC821, 822, .....) ed affidabile.
Recentemente è stata rilasciata la versione 8.9.3, la
cui installazione è fortemente consigliata per eliminare la possibilità
che la propria macchina venga illecitamente usato per fare mail spamming.
In questa versione sono anche risolti altri problemi di sicurezza (cioè
bug
del codice) presenti nelle versioni precedenti.
La principale differenza delle versioni 8.9.x rispetto alle versioni
8.8.x è una maggiore facilità di configurazione per la protezione
dal mail spam, accompagnata anche da una maggiore "granularità"
nel controllo stesso.
Compilazione del codice
Copiare sul proprio nodo il codice (sendmail.8.9.3)
e spacchettarlo.
Con sendmail vengono distribuiti alcuni applicativi collaterali:
-
makemap - per la "compilazione" dei database degli utenti (necessario
sui mail server);
-
smrsh - shell "sicura" per sendmail (consigliato);
-
mail.local - applicativo per la consegna locale delle mail (leggere
le avvertenze).
La compilazione di sendmail e dei vari applicativi non richiede
nessuna particolare procedura: è sufficiente eseguire lo script
Build
dalla directory opportuna.
Analogamente l'installazione avviene dando il comando: sh Build install.
Avvertenze:
-
La gestione delle mailbox da parte di mail.local non è compatibile,
su alcuni Sistemi Operativi (Solaris, HP-UX), con quella dei MUA (Mail
User Agent) e dei server POP e IMAP.
Per tale motivo l'installazione di mail.local non è automatica:
è possibile tuttavia forzarla con il comando: sh Build force-install.
-
Nel caso in cui mail.local non venga utlizzato, togliere dal file
di configurazione il riferimento.
In tal caso verificare inoltre che il path del mailer locale
proprietario sia correttamente definito in sendmail.cf
-
Gli applicativi mail.local e smrsh vengono solitamente installati
in /usr/libexec.
Se questa directory non esistesse, deve essere creata manualmente
prima dell'installazione!
-
Su AIX mail.local viene installato in /usr/lib : in
tal caso correggere di conseguenza la definizione relativa nel file
di configurazione di sendmail (vedi dopo LOCAL_MAILER_PATH).
-
smrsh non permette l'invocazione di eseguibili da parte di sendmail
(ad es. majordomo) se non autorizzati esplicitamente tramite la
creazione di un link simbolico all'eseguibile stesso, da porsi in
/usr/adm/sm.bin.
-
Su alcune piattaforme (es. Digital Unix) groff non è
presente, causando quindi un messaggio di errore.
Data la sua non necessarietà, ignorare l'errore e proseguire
la compilazione dalla subdirectory obj.xyz.n.n.n.
|
Configurazione di sendmail
La configurazione di sendmail consiste principalmente nella creazione del
file sendmail.cf tramite l'utility m4.
La configurazione è leggermente diversa a seconda si tratti di
un mail server (che quindi deve permettere il relaying agli altri
host
del dominio) o di una normale workstation utente.
-
Mail server
-
Copiare in sendmail-8.9.3/cf/domain il file domain.m4
rinominandolo con il nome del proprio dominio (es.:
cnaf.infn.it.m4).
-
Copiare in sendmail-8.9.3/cf/cf il file relay.mc
e modificarlo apportando gli opportuni cambiamenti. In particolare devono
essere personalizzati:
-
OSTYPE - il tipo di sistema operativo;
-
confDOMAIN - il nome del proprio dominio;
-
confUSERDB_SPEC - il path del database degli utenti;
-
ALIAS_FILE - il path del file di alias;
-
LOCAL_MAILER_PATH - il path di
mail.local (o equivalente);
-
LOCAL_SHELL_PATH - il path di smrsh;
Fare attenzione nella sezione LOCAL_RULE_1: gli spazi di separazione
tra le colonne devono essere dei "tab"!
-
nel file /etc/mail/access elencare i domini per i quali
la macchina può riceve posta, o può fare relaying, secondo
la seguente sintassi:
bo.infn.it OK
bologna.infn.it OK
rendere attive le variazioni con il comando: makemap hash /etc/mail/access.db
< /etc/mail/access
accertarsi che siano presenti il file degli
alias ed il database degli utenti.
Questa configurazione permette al server di ricevere posta per tutto il
dominio e di fare da relay per tutte le macchine presenti nel dominio (vedere
però la sezione "Misure anti-spam").
Host generico
-
Copiare in sendmail-8.9.3/cf/domain il file domain.m4
rinominandolo con il nome del proprio dominio (es.:
cnaf.infn.it.m4).
-
Copiare in sendmail-8.9.3/cf/cf il file
host.mc
e modificarlo apportando gli opportuni cambiamenti. In particolare devono
essere personalizzati:
-
OSTYPE - il tipo di sistema operativo;
-
confDOMAIN - il nome del proprio dominio;
-
confMAILHUB - il nome del mail server centrale;
-
ALIAS_FILE - il path del file di alias;
-
LOCAL_MAILER_PATH - il path di
mail.local (o equivalente);
-
LOCAL_SHELL_PATH - il path di smrsh;
-
nel file /etc/sendmail.cw elencare gli host per
i quali la macchina può riceve posta: in questo caso deve essere
inserito il solo FQDN (Full Qualified Domain Name); ad esempio:
# sendmail.cw - include all aliases for your machine.
#
gandalf.cnaf.infn.it
accertarsi che sia presente il file degli alias
Questa configurazione permette all'host di ricevere la sola posta
ad esso indirizzata e di spedirla tramite il mail server; non ammette il
mail relayng ovvero tutti i mail che non siano originati sull'host
stesso o che non siano ad esso diretto vengono rifiutati.
Compilare con m4 (posizionandosi in sendmail-8.9.3/cf/cf):
m4
relay.mc > sendmail.cf
Copiare sendmail.cf in
/etc
Se attivo, fermare il processo sendmail (kill -1 `cat /var/run/sendmail.pid')
Fare ripartire il processo sendmail (sendmail -bd -q15m)
Avvertenze
-
Viene spesso segnalato (dipende dalla versione di m4) un errore alla
linea 60 circa del file
sendmail.cf, apparentemente in
corrispondenza di una linea vuota. Per eliminare l'errore, cancellare la
linea in questione.
-
Se, su AIX, è stato installato mail.local controllare
che nel file sendmail .cf siano passate le opzioni giuste. Cercare la linee:
Mlocal, P=/usr/libexec/mail.local,
......etc..
T=DNS/RFC822/X-Unix,
A=mail -F $g $u
e sostituire il flag "-F" con "-f".
|
File degli alias e database utenti
Il file degli alias
deve contenere alcuni alias "obbligatori":
| MAILER-DAEMON: |
postmaster |
usato da sendmail per il delivery notification |
| postmaster: |
root |
richiesto da RFC 822 |
| abuse: |
root |
per eventuali reclami |
| root: |
root, sysadm |
chi riceve la posta di root |
Nota Nell'esempio copia dei mail inviati a root viene inoltrata
anche alla lista sysadm: in generale devono essere indirizzati allo
user che si occupa attivamente del sistema di posta elettronica e/o della
sicurezza dei sistemi.
In questo file andranno anche eventuali alias per mailing list.
Per rendere attivi i cambiamenti eseguire il comando:
newaliases.
Il database degli utenti (necessario solo sui mail server) definisce
l'abbinamento fra username ed indirizzi e-mail. Tramite la keyword maildrop
è possibile effettuare il mapping, in maniera suriettiva, alias
--> username mentre con la keyword mailname viene effettuato
il mapping iniettivo username --> cname che permette di presentare
l'indirizzo mittente degli utenti locali in forma canonica.
Se ad esempio Mario Rossi ha un account mrossi sull'
host gandalf.cnaf.infn.it ed ha come indirizzo canonico di
posta elettronica
mario.rossi@cnaf.infn.it, nel database utenti
ci sarà:
mario.rossi:maildrop mrossi@gandalf.cnaf.infn.it
mrossi:maildrop mrossi@gandalf.cnaf.infn.it
mrossi:mailname mario.rossi
Per rendere attivi i cambiamenti eseguire il comando: makemap btree
/path/to/userdb.db<
/path/to/userdb.txt
In alternativa, è possibile effettuare il mapping tramite le
virtualusertable
e le genericusertable che offrono la possibilità ulteriore
di gestire gli alias di più domini dalla stessa macchina (per maggiori
dettagli: "Virtual
hosting with sendmail").
Protezione file e directory
A partire da sendmail 8.9.x sono stati attivati controlli più stretti
sulla modalità di accesso in scrittura ai file di alias ed alla
directory di spool. Ciò può comportare su alcuni sistemi
operativi (es. Digital Unix 4.0x) la segnalazione di un errore in tal senso.
In generale sendmail richiede che file e directory non siano scrivibili
dal "gruppo".
Ad es. l'area di spool (su molti sistemi: /var/spool/mqueue) deve essere
protetta, a partire dalla radice (/var), con modalità 755.
È comunque possibile disabilitare tale controllo (per maggiori
dettagli:
"Sendmail
FAQ Q3.32").
Un'ultima notazione: su alcuni sistemi operativi l'eseguibile sendmail
viene installato con le protezioni non corrette: la modalità corretta
è 3711.
Misure anti-spam
Questo paragrafo è rivolto specificatamente ai gestori dei mail
server (per una descrizione completa dei comandi disponibili nella versione
8.9.x di sendmail per proteggersi dal mail spam, vedere "Anti-Spam
Configuration Control").
La configurazione vista precedentemente impedisce ad utenti non autorizzati
l'uso del mail server come mail relaying; in particolare vengono rifiutati
tutti i mail da domini inesistenti e tutti quelli non originati localmente
che non siano diretti localmente. Gli host generici invece, configurati
secondo le specifiche precedenti, possono solo spedire mail (tramite il
mail server) originati sull'host stesso e ricevere quelli a loro diretti.
Avvertenze
-
Il MUA di un portatile per potere spedire posta deve avere come SMTP server
il mailer locale della LAN sulla quale si trova;
-
I mailer rifiutano di inoltrare mail di host che non sono registrati nel
DNS, anche se locali.
|
Purtroppo non sempre è possibile configurare tutti gli host di
una LAN: in questi casi è conveniente applicare dei filtri selettivi
direttamente sui router di accesso alla LAN stessa.
Nel seguente esempio (per router Cisco) supponiamo che il mail server
"fidato" sulla LAN sia l'host 140.105.2.8, che le reti sulla LAN
siano 140.104.2.0 e 140.104.3.0 e che l'interfaccia del router
di accesso verso l'esterno sia serial 0.
interface serial 0
......
ip access-group 102 in
.......
access-list 102 permit tcp any host 140.105.2.8
access-list 102 deny tcp any 140.105.2.0 0.0.0.255 eq smtp
access-list 102 deny tcp any 140.105.3.0 0.0.0.255 eq smtp
access-list 102 permit ip any any
Attenzione: sui router Cisco le Access List vengono lette sequenzialmente
e quindi viene applicata la prima condizione verificata vera.
Applicata la access list, l'unico punto di accesso, per i mail, alla
LAN è il mail server già protetto in configurazione.
Per compatibilità, per permettere agli utenti di ricevere posta
anche con l'indirizzo utente@FQDN (es.: mrossi@gandalf.cnaf.infn.it) è
possibile redirigere da DNS, tramite il record MX, la posta di un
host filtrato, verso il mail server.
Dal mail server e` possibile redistribuirlo "staticamente" (senza consultare
cioe` il DNS!) verso l'host finale, inserendo nel database degli utenti
una dichiarazione del tipo:
mrossi:maildrop mario@[131.154.3.24]
Il server cosi` configurato non è però protetto dallo
spamming detto del "doppio non delivery" dove un mail con mittente falsificato,
ma esistente (quello della vittima), viene inviato ad utente inesistente
di un altro dominio. sendmail, correttamente, rispedisce il mail
al mittente (falsificato!) notificando l'errore.
Questa forma di spam non è molto efficente, ma può essere
fastidiosa. Purtroppo non c'è una procedura automatica per eliminare
il problema: il gestore deve, di volta in volta, inserire i mittenti indesiderati
nel database
access per filtrarli. Nel database è
possibile effettuare il filtraggio a livello di dominio, di rete e di utente.
Le keyword accettate sono:
| OK |
accetta le mail incondizionatamente |
| RELAY |
accetta di fare da mail relay |
| REJECT |
rifiuta il mail |
| DISCARD |
rifiuta il mail "silenziosamente" |
| 550 "testo libero" |
rifiuta il mail con un messaggio di errore personalizzato |