Postfix, VPN e uno smarthost: la coda non è un firewall
Una coda trattiene la posta, un firewall decide il percorso. Mantieni stabile il relay, imponi la consegna solo via VPN a livello di rete e tratta il differimento come pianificazione.
Tenere la posta in coda finché la VPN non sale è un problema di pianificazione, e la soluzione abituale è fermare Postfix, scambiare main.cf e riavviarlo. Funziona, ed è la forma sbagliata, perché mescola due requisiti: quando tentare la consegna e quale percorso di rete può portarla. Il secondo è una decisione del firewall, e nessuna direttiva di Postfix può prenderla. Una volta separati, ciascuno ha una risposta piccola e verificabile.
Mantieni stabile la destinazione del relay, blocca la consegna diretta al confine di rete e lascia che la coda faccia l’attesa.
Due requisiti che le persone fondono in uno
Il relay dice a Postfix dove consegnare la posta; relayhost = [smtp.corp.example]:587 indica un host e una porta, con le parentesi quadre che sopprimono la selezione basata su MX per quel salto successivo. Il percorso dice al kernel dove i pacchetti possono andare. Un relayhost corretto senza restrizione di percorso lascia comunque Postfix raggiungere Internet direttamente quando la tabella di routing lo consente, e un firewall corretto con un relayhost errato manda la posta nel posto sbagliato. Nessuno dei due implica l’altro.
Le mappe di trasporto, le deroghe per mittente e i relay di riserva meritano la stessa lettura. Un relayhost stabile non è prova che ogni percorso di consegna configurato lo usi, e un percorso di riserva che aggira il relay è lo stesso guasto con un mimetismo migliore.
Che cosa fa davvero defer_transports
defer_transports trattiene i messaggi per i trasporti indicati, così nessun tentativo di consegna viene fatto finché un passaggio della coda non li tocca. È un controllo di pianificazione, e uno svuotamento della coda lo scavalca; questo è il progetto e non un difetto. Usa i nomi reali dei trasporti da master.cf, perché un trasporto personalizzato o un trasporto relay con un altro nome non è coperto solo perché il suo programma parla anche SMTP. Il nuovo tentativo ordinario è un altro meccanismo: con un percorso fail-closed, i tentativi di consegna semplicemente falliscono e restano in coda, senza alcuna direttiva di differimento.
I guasti permanenti non aspettano con educazione. Un destinatario sbagliato o una credenziale rifiutata rimbalzano o restano come errore duro invece di aspettare che compaia il tunnel, quindi una coda piena di posta differita non è automaticamente una coda sicura.
Imponi il percorso a livello di rete
La restrizione appartiene al confine dell’uscita locale o all’interno di un namespace di rete isolato. Deve coprire gli indirizzi reali del relay, il trasporto e la porta, incluso IPv6 se attivo, perché una regola che blocca TCP 25 non fa nulla per un relay sulla 587 o sulla 465. Tieni separati il loopback e i percorsi di invio locale perché la coda stessa continui a funzionare. La politica dovrebbe restare chiusa quando il percorso del tunnel scompare o riappare sotto un altro nome di interfaccia.
Un evento di interfaccia attiva non dimostra che il relay sia raggiungibile attraverso di essa. Per questo un hook che controlla il collegamento e poi svuota la coda è una comodità e non una garanzia: il collegamento può cambiare tra il controllo e il tentativo di consegna.
Provalo con un solo messaggio innocuo
Invia un messaggio innocuo con la VPN spenta, poi esamina postqueue -p per il motivo del differimento e l’ID della coda. Ripristina il percorso previsto e chiedi un passaggio della coda controllato, osservando se il messaggio esce attraverso il relay e non altrove. Poi interrompi di nuovo il percorso a metà volo e conferma che il messaggio torna in coda. Rivedi maximal_queue_lifetime prima di decidere quanto può durare un’interruzione, perché un valore zero significa un tentativo e non una conservazione illimitata.
Monitora l’età della coda e l’uso del disco. Una politica che aspetta la VPN diventa un’interruzione della posta se nessuno nota che la coda cresce da venerdì.
Registra insieme il relay, il trasporto, la regola del firewall e la durata. Quei quattro descrivono la disposizione; ciascuno di essi da solo descrive una congettura.