In questo memo, descriverò la procedura da me utilizzata per avviare un servizio di posta elettronica su un piccolo server OpenBSD. L’argomento non è proprio semplicissimo.
Supponiamo che Alice e Bob vogliano comunicare in sicurezza tramite la Posta elettronica.
Le componenti da considerare son 3 :
- MTA (Mail Trasfort Agent) permette al messaggio inviato da Alice, di giungere alla mailbox privata del destinatario (Bob).
- MDA (Mail Delivery Agent) permette di prelevare il messaggi dalla mailbox.
- MUA (Mail User Agent), ossia il client di posta, che tramite l’MDA, preleva dal server i messaggi parcheggiati nella mailbox. Il MUA si interfaccia, lato server, sia con l’MDA quando deve leggere/prelevare i messaggio da una mailbox, e sia con l’MTA quando deve inviare messaggi ad altro destinatario.
Ho utilizzato OpenSMTP come MTA, Dovecot come MDA e Thurderbird|neomutt come MUA.
OpenSMTP (MTA)
OpenSMTP è preinstallato con OpenBSD. Son stati eseguiti dei port di questo MTA anche su distribuzioni GNU/Linux, sicuramente è impacchettato su Debian GNU/Linux, ArchLinux.
Di seguito il file di configurazione /etc/mail/smtp.conf.
alfree2$ cat /etc/mail/smtpd.conf
# $OpenBSD: smtpd.conf,v 1.14 2019/11/26 20:14:38 gilles Exp $
# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.
#.---------------------------------------------------------------.
#| |
#| File di configurazone Principale di OpenSMTP |
#| (versione customizzata) |
#| |
#'---------------------------------------------------------------'
#.-----------------------------------------------------------------------.
#| Identita' digitale del Server. -- al momento e' self-signed -- |
#'-----------------------------------------------------------------------'
pki "mail" cert "/etc/ssl/mail.crt"
pki "mail" key "/etc/ssl/private/mail.key"
#.---------------------------------------------------------------------------.
#| Tabelle Alias, Credenziali ed Utenti Virtuali utilizzati da OpenSMTP. |
#| Per avere gli utenti virtuali, memorizzati nel file /etc/mail/credentials |
#| nel formato simil-passwd-unix (condiviso da OpenSMTP e Dovecot), e' |
#| necessario installare il pacchetto "opensmtp-table-passwd". L'inserimento |
#| dei dati in questo file e' manuale e abbastanza noioso. La password |
#| e' mantenuta cifrata, la forma cifrata e' ottenuta col comando |
#| smtpctl encrypt <password> |
#| alfree2# smtpctl encrypt miapassword |
#| $2b$08$1emmtK5qvdss6kdv2mOll.oWqByZn19wgR5FCM7rC8wo1sQDDP4bK |
#'---------------------------------------------------------------------------'
table aliases file:/etc/mail/aliases
table credentials passwd:/etc/mail/credentials
table virtuals file:/etc/mail/virtuals
#.--------------------------------------------------------------------------.
#| Dichiarazione del filtro "rspamd" referenziato successivamente |
#| filter-rspamd e' un codice di interfaccia tra OpenSMTP e respamd. Per |
#| averlo e' necessario installare "opensmtp-filter-respamd", ed ovviamente |
#| "respamd" che si porta dietro "redis" per la gestione della cache. |
#'--------------------------------------------------------------------------'
filter "rspamd" proc-exec "/usr/local/libexec/smtpd/filter-rspamd"
#.--------------------------------------------------------------------.
#| Difinizione Listen |
#|--------------------------------------------------------------------|
#| 1) Porta 25 la usano chi ti manda la posta dall'esterno, |
#| utilizzando altri smtp-server, "on all" significa su tutte le |
#| interfacce di rete. Se la si invia solamente dall'interno, |
#| questa riga puo' essere omessa probabilmente. |
#| La porta viene specificata, ma forse non serve farlo perche' |
#| e' quella di default, dall'esterno puntano li. Non so se |
#| tramite record MX e' possibile specificarne un'altra. |
#| pki specifica l'identita'digitale, al momento self-signed |
#| detto. Non so se questo puo' essere un problema.[APERTO APERTO] |
#| L'hostname e' quanto riportato anche nel DNS con i record A |
#| (e non CN), MX e TEXT. Se non si integra con rspamd il filter |
#| va escluso. In caso contrario va ovviamente installato |
#| come detto prima "opensmtp-filter-respamd", "respamd" e "redis" |
#'--------------------------------------------------------------------'
listen on all port 25 tls pki "mail" hostname "mail.specialcatsteam.org" filter "rspamd"
#.--------------------------------------------------------------------.
#| 2) Porta 587 la possono usare gli utenti di OpenSMTP per inviare |
#| una e-mail. Se l'esigenza e' inviare da locale allora |
#| l'interfaccia di esposizione puo' essere impostta a lo0 |
#| Nel caso in cui l'utente e' remoto al server (ad esempio dal |
#| proprio PC con thunderbird, allora deve essere esposta sulla |
#| specifica interfaccia pubblica oppure su tutte (all). |
#| impostata. Di seguito come l'utente dovra' impostare i |
#| parametri nel suo client : |
#| - Server : mail.specialcatsteam.org |
#| - Sicurezza : StartTLS |
#| - Porta : 587 |
#| - Autenticazione : Password |
#| - Nome Utente : info@specialcatsteam.org |
#| - Password : **** |
#| - Certificato : nessuno |
#| Per il resto, valgono le medesime considerazioni fatte per il |
#| listen su porta 25. |
#'--------------------------------------------------------------------'
listen on all port 587 tls-require pki "mail" hostname "mail.specialcatsteam.org" auth <credentials> filter "rspamd"
#.----------------------------------------------------------------.
#| Sezione Azioni. (Referenziate nella sezioe Match) |
#'----------------------------------------------------------------'
action "local_mail" mbox alias <aliases>
action "domain_mail" maildir "/var/vmail/specialcatsteam.org/%{dest.user:lowercase}" virtual <virtuals>
action "outbound" relay
#.-----------------------------------------------------------------------------.
#| Sezione Match. |
#| 1) local->local => azione "local_mail" |
#| 2) local->any => azione "outbound" |
#| 3) any-user->any => azione "outbound" |
#| 4) any->domain => azione "domain_mail" |
#'-----------------------------------------------------------------------------'
match from any for domain "specialcatsteam.org" action "domain_mail"
match from local for local action "local_mail"
match from local for any action "outbound"
match auth from any for any action "outbound"
# :::... EOF
to be continue