Le parole scritte in rosso devono essere sostituite dai vostri parametri.
×
Beta!
Sto lavorando al sito e commetterò tanti errori: potete segnalarmeli all'indirizzo indicato in fondo pagina. Segnalatemi anche eventuali vostre richieste. Grazie. !!!
Postfix è il cuore del mail server. Rende operativo il protocollo SMTP (Simple Mail Transfer Protocol), come descritto nel RFC 821 del 1982: trasferire la posta elettronica in modo affidabile ed efficiente.
Inizieremo con un normale aggiornamento del sistema:
sudo apt update && sudo apt upgrade
Adesso possiamo installare Postfix ed anche la sua interfaccia al database mysql (MariaDB):
sudo apt install -y postfix postfix-mysql
Parte automaticamente la configurazione di Postfix.
Ci verrà chiesto che preferiamo.
x
No configuration = non configurare nessun parametro e tutto andrà inserito una cosa alla volta.
Internet site = Postifix manda le mail ad altri server di posta e riceve le loro mail.
Internet with smarthost = Postfix riceve le mail, ma quelle in uscita Postfix le invia ad un altro server che, a sua volta, invierà le mail.
Satellite system = usa lo smarthost sia per inviare le mail, sia per riceverle.
Local only = le mail possono essere inviare solo nella rete interna del sistema, tra i suoi utenti.
La configurazione che a noi si addice è Internet Site.
Nella schermata seguente, ci chiede di indicare il nome di dominio: sarà quello che andrà dopo il nome utente, utente @ dominio.tld
Leggiamo la configurazione iniziale di Postfix, main.cf :
cat /etc/postfix/main.cf
Contiene le impostazioni generali di default.
La creazione iniziale del file master.cf definisce i servizi offerti da Postfix, come la ricezione delle mail via SMTP, la spedizione delle mail.
Usa le impostazioni generali di main.cf, ma può anche sovrascriverle.
cat /etc/postfix/master.cf
Per cambiare, sostituire, vedere o aggiungere funzionalità a Postfix nel file main.cf, possiamo scrivere queste modifiche nel file stesso, oppure usare una sua applicazione: postconf.
Tutte le direttive potenzialmente modificabili con postconf, sono elencate con:
sudo postconf -d | less
Tasto Spazio per avanzare di una pagina, tasto B per arretrare di una pagina
Elenca tutta la configurazione con tutte le sue funzioni e valori.
Usiamo postconf per definire di non volere usare ipV6 (come per Apache).
Vediamo com'è attualmente impostata questa scelta in main.cf:
sudo postconf inet_protocols
Postconf legge la relativa riga in main.cf e restituisce il risultato: tutti, cioè ipV4 e ipV6.
Per modificare ciò, usiamo l'opzione -e (edit, modifica) ed utilizziamo le doppie virgolette per proteggere la formattazione dell'enunciato.
sudo postconf -e "inet_protocols = ipv4"
Controlliamo l'avvenuto cambio, aprendo direttamente il file main.cf:
sudo nano /etc/postfix/main.cf
Postconf ha anche la particolarità di rendere attive immediatamente le modifiche, senza dover riavviare Postfix.
Continuiamo con il cambiare i parametri TLS. indicando dove cercare i relativi file.
Lasciamo la riga seguente tls_security_level=may ed aggiungiamo altre 2 righe:
smtpd_tls_auth_only=yes
smtpd_tls_loglevel = 1
Con la prima riga, obblighiamo chiunque ad autenticarsi con TLS.
Questa scelta non è sempre condivisa, perchè alcuni Server pubblici ancora non usano TLS.
Ma sono una rarità e pure pericolosa; ed è per questo che consigliamo una autenticazione esclusivamente cifrata.
Nella seconda riga, impostiamo di registrare solo un messaggio sommario dell'handshake TLS .
Adesso, modifichiamo l'intera sessione riguardante le mail in uscita smtp_tls_CApath, sia le 3 righe smtpd, sia le 3 smtp.
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Nella prima riga, impostiamo che il livello di sicurezza TLS non è obbligatorio, cioè, nella procedura SMTP avremo lo stesso l'opzione STARTTLS, ma la sua scelta non sarà doverosa.
La seconda riga si riferisce sempre ai log di eventi importanti.
La terza riguarda una specie di database, :
x
Struttura di dati ottimizzata per archiviare e recuperare più efficientemente i dati.
viene usato per la cache della sessione TLS
e sarà posto in /var/spool/postfix/smtpd_scache.
Le altre 3 righe sono da sostituire con 4 nuove righe:
Stiamo dicendo a Postfix di usare, durante le fasi smtpd e smtp, i protocolli maggiori o uguali (>=) a TLSv1.2 e minori o uguali (<=) a TLSv1.3, cioè di usare soltanto TLSv1.2 oppure TLSv1.3, i quali garantiscono più sicurezza.
Adesso, dovremo istruire Postfix su come procedere con le autenticazioni:
La prima riga dice che useremo il metodo di autenticazione di Dovecot .
La seconda riga risolve un "problema" di Postfix.
Postfix agisce solo all'interno della sua "gabbia" (/var/spool/postfix/) e non ha contatti con altre applicazioni.
Per ovviare al problema, Dovecot crea un canale di comunicazione (un Gate tra l'esterno e Postfix, dove dare un appuntamento per un incontro) in /var/spool/postfix/private/auth per permettere a Postfix di usare l'autenticazione degli utenti creata da Dovecot, usando i dati presi dal database implementato nella pagina precedente.
Il terzo rigo abilita l'autenticazione sicura.
Le altre impostazioni declinate durante la configurazione sono:
smtp_relay_restrictions: possono inviare mail quelli della nostra rete interna e quelli autenticati; gli altri non possono e Postfix rinvia le mail che subiscono errori 4XX, cioè temporanei;
myhostname è il nostro domino FQDN, mail.sitoprovaprimo.it
si potrebbe esplicitare anche mydomain: sitoprovaprimo.it
alias_maps e alias_database servono quando vogliamo creare un alias ad un utente del sistema, ma noi useremo il database creato con MariaDB.
myorigin, posto nel file /etc/mailname, è sitoprovaprimo.it
mydestination elenca la lista dei domini per cui Postfix gestisce la posta.
Modifichiamo lo scritto perchè useremo i domini elencati in mariaDB:
Altra riga interessante è mailbox_size_limit ove possiamo indicare la capacità massima in bytes della cartella di posta dell'utente.
Noi useremo le quote, per diversificare da utente a utente.
Comunque, è settata a 0, il che equivale ad infinito, finchè il disco non è saturo.
inet_interfaces sono le interfacce di rete da cui Postfix viene contattato.
inet_protocols l'abbiamo cambiato.
Aggiungiamo una riga per impostare la capacità massima in bytes di ogni messaggio.
Se superiamo questa soglia, la mail non sarà accettata da Postfix.
La impostiamo a (35*1024*1024=36700160), ma potete impostarla a vostro piacimento. Di default è 10MB.
message_size_limit = 36700160
Troveremo anche una impostazione simile, quando affronteremo le quote, e potremo indicare che la quota massima per un messaggio è tot bytes.
L'impostazione di main.cf finora dovrebbe assomigliare a questa immagine.
Aggiungeremo tutta un'altra serie di enunciati in main.cf per conformarlo ai nostri bisogni.
Questi enunciati verranno posti dalla fine dell'attuale main.cf .
Innazitutto, diremo a Postfix come consegnare le mail al sistema interno
Dovrà consegnare le mail a Dovecot affinchè questi ponga le mail nelle giuste caselle.
Dovecot lo farà con un suo protocolo, molto simile a smtp
Il canale di comunicazione tra i due sarà posto in /var/spool/postfix/private/dovecot-lmtp.
Lo esplicitiamo con:
x
Local Mail Transfer Protocol, derivato da SMTP, ma implementato per i server di posta che devono archiviare le mail: i MDA Mail Delivery Agent.
Nel nostro caso Dovecot.
L'ultima parte aggiunta, dovrebbe rassomigliare a questo:
Usciamo temporaneamente da main.cf, salvando comunque il lavoro svolto, per creare i 3 file menzionati sopra.
Creiamo una cartella, dove porre tutti i file necessari al rapporto Postfix-MariaDB
sudo mkdir /etc/postfix/sql/
Creiamo il primo file, domini_virtuali :
sudo nano /etc/postfix/sql/domini_virtuali.cf
In esso, indichiamo a Postfix come connettersi al database e cosa chiedere per conoscere i domini da gestire:
user = gestoreposta
password = g€$t0r€p0$t@
hosts = localhost
dbname = serverdiposta
query = SELECT domain FROM domain WHERE domain='%s'
User, password e dbname sono facilmente intuibili.
Hosts è la macchina che ospita il database; essendo sulla stessa macchina, usiamo localhost.
La richiesta (query) chiede di selezionare la colonna domain dalla tavola domain e pone l'opzione %s ;
in utente@dominio.tld : %n = utente , %s = dominio.tld , %u = utente@dominio.tld
Proviamo se Postfix riuscirà a leggere il risultato:
Creiamo il secondo file, caselle_virtuali, nella cartella /sql:
sudo nano /etc/postfix/sql/caselle_virtuali.cf
Prevediamo in esso sempre la connessione al database e la richiesta su come trovare la cartella di ogni utente:
user = gestoreposta
password = g€$t0r€p0$t@
hosts = localhost
dbname = serverdiposta
query = SELECT maildir FROM mailbox WHERE username='%s'
La query, in questo caso, estrapola la collocazione della cartella virtuale dell'utente dalla tabella mailbox prendendo solo il dominio.tld dall'indirizzo utente, per confermare che quel dominio è effettivamente gestito da Postfix.
Chiediamo conferma se a Postfix viene indicata la cartella dell'utente enunciato::
Dato che abbiamo inserito informazioni sensibili in questi file, inseriamo l'utente di sistema Postfix nel gruppo proprietario della cartella sql creata.
sudo chgrp postfix /etc/postfix/sql/*
Rendiamo i file contenuti in essa, leggibili e scrivibili solo da Postfix e root:
sudo chmod -R 0640 /etc/postfix/sql/*
Torniamo ad occuparci di main.cf
sudo nano /etc/postfix/main.cf
Per lo smistamento della posta virtuale, invece degli agenti LDA inclusi in Postfix (local e virtual), ad occuparsene sarà Dovecot.
Gli indichiamo anche la cartella madre, all'interno della quale saranno create le cartelle per ogni singolo dominio ed utente:
virtual_mailbox_base = /var/vmail
Dobbiamo aggiungere 2 righe, in cui indichiamo a Postfix con quale utente deve operare.
Quest'utente vmail, sarà creato subito dopo usciti da main.cf ;
Intanto, lo indichiamo attraverso il suo uid ed il gid del suo gruppo:
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
Visto che usiamo magari più domini, dobbiamo abilitare Postfix a gestire più nomi di dominio, (come fatto in Apache con i virtual-hosts), usando :
x
L'indicazione del nome del server (Server Name Indication) è un'estensione del protocollo di rete TLS, con il quale un client indica il nome dell'host a cui sta tentando di connettersi all'inizio del processo di handshaking.
tls_server_sni_maps = hash:/etc/postfix/sni_maps
Usciamo da main.cf, chiudendo e salvando le modifiche
Dobbiamo creare un utente unico, vmail, (come www-data in Apache) per gestire la scrittura e lettura nella cartella /var/vmail/, dandogli un e un relativo per il gruppo di appartenenza:
x
L'UID (User IDentifier) è un numero che viene assegnato ad ogni utente per identificare in modo univoco l'utente all'interno del sistema, consentendo al sistema di gestire i permessi su file e cartelle, ma anche per controllare gli accessi al sistema.
x
Il GID (Group IDentifier) serve ad identificare, in modo univoco, un gruppo di utenti, permettendo al sistema di riconoscere e applicare permessi specifici per quel gruppo di utenti.
La vostra seconda parte del file main.cf dovrebbe risultare come questa:
Salviamo le modifiche e chiudiamo il file.
Per abilitare Postfix a ricevere la posta, dovremo abilitare la relativa predisposizione in master.cf.
In questo file, alcuni servizi iniziano con smtp ed altri con smtpd.
Smtp si riferisce a quando Postfix inoltra la posta ad un altro server.
Smtpd, invece, si riferisce a quando Postfix riceve la mail, sia da un altro mail server, sia dall'applicazione client (outlook, apple mail, thunderbird, webmail), per poi inoltrarla verso altri server.
sudo nano /etc/postfix/master.cf
Modifichiamone il contenuto abilitando l'enunciato predisposto togliendo il carattere # (che sta per commento)
oppure, quando non predisposto, scrivendo nel file.
Togliamo il carattere # alla riga che inizia con submission, permettendo ai client di raggiungere Postfix alla porta 587.
Togliamo lo stesso # alla riga syslog, cosicchè nei file di log ci sia l'intestazione postfix/submission, per una più facile ricerca e comprensione.
Eliminiamo sempre # a tls_security_level, per obbligare chi si connette a Postfix ad usare una connessione protetta e cifrata, evitando la diffusione in chiaro di nome utente e password.
Eliminiamo # pure dalla successiva riga, sasl_auth_enable, per autenticarsi su Postfix.
Togliamo il commento anche a reject_unlisted_recipient.
Decommentiamo le righe con client_, helo_, sender_, relay_
Anche a recipient_restrictions togliamo il commento per permettere solo a chi è autenticato di mandare mail.
E togliamo il commento alla riga con _macro.
x
Mail fILTER: protocollo usato da applicazioni che ispezionano alcuni eventi SMTP (CONNECT, DISCONNECT) , alcuni comandi (HELO ed altri) ed anche contenuti degli headers e di body, al fine non solo di bloccare mail malvage (antivirus), ma anche per verificare l'autenticità delle firme digitali (Opendkim).
ORIGINATING è la macro che da informazioni su chi e cosa ha originato la mail.
Chi usa , come client, Outlook, deve impostare il servizio smtps con la porta 465.
Togliamo il carattere # alla riga submissions e sostituiamo submissions con :
smtps
Eliminiamo sempre # alla riga appena sotto e modifichiamo il nome che apparirà nei file di log, per distinguerlo dal nome impostato per il servizio smtp:
postfix/smtps
Togliamo # alla riga tls_wrappermode , per settare Postfix a "bypassare" STRATTLS sulla porta "submission" 587 durante la procedura SMTP, e permettere ad Outlook di connettersi alla porta 465, comunque usando sempre TLS.
Abilitiamo, togliendo sempre #, anche la riga successiva sasl_auth_enable=yes, come per smtp.
Anche reject_unlisted va decommentato.
Possiamo decommentare anche le righe:
smtpd_client_
smtpd_helo_
smtpd_sender_
smtpd_relay.
Il risultato finale ottenuto dev'essere come la seguente immagine.
Salviamo ed usciamo dal file (tasti Ctrl+X, Y, Invio)
Riavviamo Postfix ed accertiamoci che tutto funzioni:
sudo systemctl restart postfix
systemctl status postfix
Le principali impostazioni di Postfix sono attuate.