Tra i servizi che da più anni eroghiamo c’è quello della gestione e del mantenimento di server di posta elettronica aziendali. Stiamo parlando di macchine con un uptime del 100% su periodi decisamente lunghi, server che in alcuni casi sono rimasti online per oltre 10 anni con rarissime interruzioni dovute ad interventi di manutenzione straordinaria: sostituzione di un disco, incremento della RAM, etc. Oltre agli aspetti fisici, anche sul piano del software si tratta di server soggetti ad una continua manutenzione adattativa ed evolutiva per via delle sempre più numerose novità nel campo della posta elettronica: antispam, anti malware, SPF, DKIM, DMARC, etc.
Avere in gestione volumi significativi di domini significa dover controllare periodicamente che ogni server ospiti solo quelli che effettivamente gli competono. Capita infatti che un cliente dismetta un dominio o lo faccia scadere senza avvisarci, lasciando sui nostri server tutte le configurazioni attive. In altri casi invece siamo noi stessi a lasciare attive le configurazioni di domini migrati su altri nostri server, prassi che serve a garantire la massima continuità del servizio ma che non deve protrarsi troppo per non generare inutili interferenze e possibili malintesi in fase di assistenza.
Per essere sicuri che i domini gestiti da un server siano effettivamente solo quelli che gli competono noi utilizziamo un semplice script:
#!/bin/bash cd /var/vmail/ for d in */ ; do domain=${d%/} dig +short $domain mx | sort -n | nawk -v pref=65536 '($1<=pref) {pref=$1; print $2}' | dig +short -f - | uniq | sed "s/$/\t$domain/" | column -t done
Queste poche righe di codice fanno un lavoro estremamente prezioso: elencano tutti i domini presenti sul server listando la directory in cui si trovano sul filesystem – con Postfix di norma è /var/vmail – e per ogni domino ricavano i record MX indicati nei rispettivi DNS. In questo modo otteniamo un output con una struttura simile alla seguente:
123.123.123.123 dominio1.com 123.123.123.123 dominio2.com 123.123.123.123 dominio3.com 234.234.234.234 dominio4.com 123.123.123.123 dominio5.com 123.123.123.123 dominio6.com 123.123.123.123 dominio7.com 123.123.123.123 dominio8.com 123.123.123.123 dominio9.com
E tra questi possiamo facilmente individuare quei domini che hanno configurato almeno un MX con indirizzo IP differente da quello del server su cui ci troviamo, specialmente se ci facciamo aiutare dal comando grep:
./CHECK_DOMAIN_MX.sh | grep -v 123.123.123.123
Il risultato di quest’ultimo comando restituirà solo i domini con indirizzo IP differente da 123.123.123.123, dal momento che il parametro -v inverte la logica di output del comando grep e lo costringe a mostrare tutti i record che non contengono la stringa che gli abbiamo passato.