Servizio di Posta con OpenBSD 7.6

di | Aprile 22, 2025

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.

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *