Una panoramica sul mondo della Sicurezza Informatica, del Networking, della Virtualizzazione e non solo. Blog particolarmente indicato per i reparti IT che comunque alterna articoli scritti per specialisti con articoli formulati con linguaggio semplice e comprensibile a tutti.

Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione, anche parziale, è vietata salvo autorizzazione.

mercoledì 30 dicembre 2020

Monitorare gli host in maniera semplice - Script Bash

Sovente accade di voler monitorare degli host. Certo, esistono sistemi estremamente completi come Zabbix, ma spesso sovradimensionati rispetto ad un monitoraggio semplice e rapido. Ho, quindi, creato un semplice script Linux che ci consente di monitorare degli host in maniera semplice effettuando, a scelta, uno dei seguenti controlli:

  • ICMP Request (ping)
  • Verifica che una porta sia attiva (ad esempio la 25 per un mailserver)
  • Verifica la presenza di una stringa all'interno di una pagina web (per accertarsi che essa sia realmente reperibile)
  • Verifica la presenza di un file html con all'interno la dicitura "iocisono" (per minimizzare la richiesta di banda in monitoraggi particolarmente massivi)


Il progetto, scritto in bash per linux, è liberamente reperibile qui: https://github.com/cl4x/bashmonitoring e si compone di 3 file visibili nel progetto:

  •     monitoring.sh (il programma vero e proprio, ricordate di dare i permessi +x, che ometto in questo articolo in quanto si compone di circa 300 righe)

  •     monitoring.conf (il file di configurazione)

Il file di configurazione ha i seguenti parametri:

SLEEPTIME (si riferisce al tempo di sleep tra un controllo e quello dopo - il primo ciclo viene fatto integralmente senza sleep time)
SLEEPPRPOC (si riferisce al tempo di sleep tra un ciclo completo e l'altro, ovvero da quando finisce di controllare tutti gli host a quando riprende dall'inizio)
RETRY (indica il numero di tentativi, separati da un secondo, prima di dichiarare down l'host)
LOGENABLE 1|0 (abilita o disabilita i log)
LOGPATH (ovviamente dove scrivere i log che, per semplicità, non utilizzano syslogd)

  •     monitoring.hosts (qui andremo a definire gli host e che tipo di controllo effettuare)

 Il ogni riga è un controllo su un host, è diviso da ; ed è strutturato in questa maniera:

tipo di controllo;descrizione;host;eventuale opzione

ecco alcuni esempi:


ping;CloudFlare DNS;1.1.1.1

effettua un semplice ping


porta;Https su Repubblica;www.repubblica.it;443

verifica che la porta 443 sia aperta sul sito repubblica.it


porta;SMTP Gmail;gmail-smtp-in.l.google.com;25

verifica che la porta 25 su questo server sia aperta


porta;TestDown;11.22.33.44;11111

un esempio di come verrà evidenziato un host down


strhtml;Mozilla IT;https://www.mozilla.org/it/;Newsletter-mozilla-and-you

verifica che su questo sito la pagina web mostri la stringa "Newsletter-mozilla-and-you"

 

Ecco il risultato finale:

 

 

A breve integrerò, tempo permettendo, l'invio di email e anche una chiamata voip.

 

NB: deve essere installato nmap e curl, banalmente su debian/ubuntu basta dare 

sudo apt install nmap curl


Discaimer: Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione, anche parziale, è vietata salvo autorizzazione.


giovedì 8 ottobre 2020

Containerizzazione vs Virtualizzazione spiegata in 2 minuti

La nuova frontiera della virtualizzazione consiste nel virtualizzare non una macchina intera (con il suo sistema operativo) ma un'immagine di un'applicazione specifica. Vediamo insieme di cosa si tratta e quali opportunità offre questa alternativa.


All'epoca, i più "stagionati" come me, lavoravano con le chroot jail in ambito linux. Esse consentivano di isolare un processo chiudendolo in una "gabbia" affinchè esso non possa "uscire" e arrecare danni al sistema madre. Il concetto di "containerizzazione" non si discosta molto a livello concettuale, ma a livello pratico introduce una serie di vantaggi davvero notevoli e sancisce una nuova generazione di strumenti a disposizione dei SysAdmin.


Avevo appena imparato a padroneggiare la virtualizzazione, sono spaesato, cos'è la containerizzazione?

Lo so, ti sono vicino. Partiamo dalla slide presente sul sito ufficiale di docker:

La differenza sostanziale risiede nel layer a cui la virtualizzazione viene effettuata. Mentre nella virtualizzazione tradizionale ad essere astratto è uno strato hardware che poi viene presentato alle macchine virtuali, nel container ad essere astratto è uno strato applicativo che condivide tra i container sostanzialmente il kernel del sistema ospitante. I container sono, di fatto, processi a sè stanti su di uno stesso sistema e che vengono lanciati nello user space.

Quali sono i vantaggi... e gli svantaggi?

PRO
  • I container sono molto più leggeri di una intera VM e richiedono meno risorse.
  • Fare il deploy di un'immagine (o un'applicazione, se volete) è estremamente semplice e rapido.
  • L'immagine si porta dietro tutte le librerie necessarie, non serve più impazzire sulle dipendenze. La portabilità è elevatissima.
  • L'architettura clusterizzata è semplice da implementare, le immagini sono già di per se nativamente predisposte all'utilizzo in cluster multinodo (o sciami).
  • Un'immagine può essere lanciata su qualsiasi sistema, sia esso Linux, Microsoft o MAC (almeno per docker di cui parleremo più avanti).
CONTRO
  • Il sistema è app-centrico, mi serve wordpress, lo scarico dall'hub, lo faccio girare, fine. Sarà non banale accedere allo storage, personalizzare un cron e lavorare sullo strato inferiore.
  • Fin quando la mia esigenza è confinata ad una specifica applicazione, la cosa è lineare. Ma se devo lavorare su un sistema completo e complesso, allora potrebbe non essere la tecnologia corretta.

 

Insomma, ad ognuno il suo, non è detto che la containerizzazione vada  sempre bene. Un provider che fa hosting di siti troverà notevole vantaggio. Un'azienda che ha un'architettura tradizionale (un db server, un'app server, un fs server, due dc, etc.) non trarrebbe alcun vantaggio veramente tangibile.

Nei prossimi capitoli creeremo un'architettura a container con Docker, parleremo dei cluster con swarm ed infine approfondiremo kubernetes con lo scopo di orchestrare il tutto.

 

 

Discaimer: Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione, anche parziale, è vietata salvo autorizzazione.


giovedì 14 maggio 2020

Il nostro PC va lento! E' una nostra sensazione o sta rallentando tutto??

Stiamo tornando pian piano alla normalità, perlomeno informatica, e troviamo il nostro PC lento. Ci siamo arrugginiti noi o è realmente cambiato qualcosa?

Tranquilli. E' cambiato e sta cambiando qualcosa, il nostro fisiologico invecchiamento cellulare neurologico non centra con la sensazione di lentezza che stiamo riscontrando. Siamo salvi (più o meno).




Le motivazioni

Difficile dirlo, certamente gli ultimi aggiornamenti non sono stati brillanti (un po' su tutte le piattaforme), in molti casi hanno risolto alcuni problemi ma ne hanno introdotti molti altri. Personalmente penso che il processo di rilascio degli aggiornamenti, soprattutto in ambiente Windows, abbia subìto un peggioramento qualitativo abbastanza evidente. Tuttavia personalmente ritengo che le recenti vulnerabilità sulle CPU abbiano davvero fatto danni gravi.

Per i meno informati, a gennaio 2018 è stata pubblicata una ricerca su una famiglia di vulnerabilità hardware sui moderni processori in grado, teoricamente, di dare accesso a porzioni di memoria che possono contenere, tra le altre cose, anche credenziali (meglio note come Spectre e Meltdown, https://meltdownattack.com/, ne abbiamo parlato anche qui https://claudiodabbicco.blogspot.com/2019/02/vmware-e-vulnerabilita-cve2018-3646.html). La cosa non è banale perchè non è risolvibile con un semplice aggiornamento, si tratta di un problema architetturale dei processori Intel e AMD e che richiede una riprogettazione hardware tutt'altro che semplice.
Nel corso del tempo, questa famiglia di vulnerabilità (CVE-2017-5753, CVE-2017-5715 e CVE-2017-5754) è passata da uno stato "teorico" ad uno "pratico", pertanto si è reso indispensabile porvi un rimedio. E l'unico rimedio per sistemare la cosa non viene gratis, ma impatta drammaticamente le performance: le chiamate che prima venivano passate quasi direttamente al processore, ora devono essere vagliate più dettagliatamente dal sistema operativo, introducendo uno strato software che non potrà mai essere rapido ed immediato come una chiamata diretta su un hardware pensato appositamente. 


Proviamo a banalizzare: all'interno della nostra autovettura siamo abituati al comando dell'acceleratore, esso viene chiamato direttamente dal nostro piede destro. Ora immaginiamo di non avere più il pedale dell'acceleratore sotto il nostro piede, ma di averlo sotto il piede del nostro passeggero a cui dovremo di volta in volta dire "accelera", "alza il piede", "un po' di più", "un po' di meno" e così via. Introduciamo un inevitabile ritardo dovuto ad un ulteriore livello tra noi ed il comando. E questo, nel caso informatico, milioni di volte al secondo. Il motivo? Si è scoperto che l'acceleratore al posto di guida può far esplodere l'auto, spostarlo al passeggero è, per quanto scomodo, comunque il male minore.

A questo va aggiunto che il sistema operativo di Microsoft si sta arricchendo di moltissime funzionalità (non sempre gradite, intendiamoci) che inevitabilmente aggiungono carico su carico.

Aggiungiamoci anche che c'è stato un incremento esponenziale dei virus, pertanto gli antivirus sono diventati incolpevolmente più pesanti, più pignoli nel controllo e più gravosi per il sistema che proteggono.


Chi ha colpito?

Tutti. Lavoriamo con migliaia di macchine e su tutti i livelli il rallentamento è percepibile. Dagli i9 più potenti agli i3 meno performanti, tutti quanti avvertono un "lag", ovvero un ritardo nell'immediatezza con cui molte operazioni avvengono.


E linux? Ed i Mac?

Linux non è esente dal problema, tuttavia va detto che il sistema del pinguino è nativamente tipicamente più leggero, inoltre è possibile stabilire in fase di boot se il kernel debba o meno intervenire per mitigare il problema. A questo si aggiunge tutto lo strato antivirus presente sui sistemi Microsoft, normalmente non utilizzato su Linux (o se utilizzato, certamente meno impattante del suo omonimo pari prodotto per Windows).

Sui MAC la situazione è simile, se non peggiore, rispetto a Windows. Stiamo assistendo a macchine anche abbastanza recenti e che prima "se la cavicchiavano" e che ora diventano drammaticamente lente anche dopo averle formattate. E, per inciso, il discorso antivirus su Mac è totalmente diverso: i Mac hanno bisogno di un antivirus! E' un falso mito che esso non sia necessario, recentemente gli attacchi si sono concentrati persino più su questa piattaforma che su altre.


Cosa fare?

Nulla. Davvero, non c'è nulla da fare se non aspettare CPU di nuova generazione e aggiornamenti che mitighino, per quanto possibile, il fenomeno (che come abbiamo visto non è di semplice risoluzione). A breve si attende un aggiornamento massivo in casa Microsoft improntato sulle performance. Speriamo bene.



Discaimer: Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione, anche parziale, è vietata salvo autorizzazione.


martedì 4 febbraio 2020

CEPH e FileSystem Distribuiti: Pro e Contro rispetto ad architetture tradizionali

Il mondo dei FileSystem Distribuiti è un mondo interessante, ma non privo di insidie. In questo articolo proveremo a scovare quelli che sono i problemi che potrebbero trasformare un bel progetto in un disastro completo.

Partiamo con il fare una distinzione. Ci sono due modi per progettare un'infrastruttura di virtualizzazione, il modo tradizionale ed il modo distribuito.

Infrastruttura tradizionale


L'infrastruttura tradizionale è composta da uno o più nodi ed una SAN. I nodi si occupano di erogare capacità computazionale (CPU e RAM) e la SAN si occupa di passare la parte di storage con le varie LUN. Non ci soffermiamo troppo sulle varie sfaccettature che questa architettura consente, volontariamente ho semplificato lo schema per non aggiungere "carne al fuoco". Inoltre nello schema la SAN è collegata in iSCSI, questo ci facilita le comparazioni architetturali.


Infrastruttura distribuita




Nell'infrastruttura distribuita ogni nodo apporta, a beneficio di tutti, non solo la propria capacità computazionale ma anche il proprio storage. Non esiste, pertanto, una vera e propria SAN. I nodi sono normalmente molto meno performanti, ma in quantità maggiore.


Alcuni approfondimenti preliminari


Qui abbiamo parlato degli errori comuni commessi da chi dimensiona una SAN.

Qui, invece, abbiamo parlato di architetture, ridondanze e performance. 

Questo, invece, è un articolo che entra molto nel dettaglio delle performance, vitali e fondamentali in un sistema di virtualizzazione, in grado di vanificare qualsiasi investimento se mal dimensionato.

In linea di massima, consiglio al lettore curioso un approfondimento di tutto il tag Storage di questo blog.


Il laboratorio

Per testare gli argomenti presi in esame e fortemente motivati da una sana curiosità verso quella che potrebbe essere una tecnologia rivoluzionaria, abbiamo creato un'infrastruttura con 10 nodi CEPH. A breve creeremo anche un laboratorio vSAN vmware. Lo so... comporta tempo, ne abbiamo poco, ma ritenere che la ricerca sia meno prioritaria dell'attività commerciale denota una visione aziendale non lungimirante. Ma questo è un altro discorso.


I 10 nodi consentono un'infrastruttura virtuale e mettono a disposizione CEPH. In CEPH, ogni disco (che per prassi è un disco fisico dedicato) diviene un OSD che possiamo suddividere in classi. I dischi con le stesse classi verranno aggregati. (in foto il test di 2 fault con dei pool con replica a 3)

In questo laboratorio abbiamo creato 3 FileSystem Distribuiti per un totale di 14 dischi dedicati:
  • HD300 è formato da soli 2 dischi SATA su due nodi diversi
  • Pool 32 è un pool di 8 dischi da 500Gb SATA, 1 per 8 nodi
  • SSD è un pool di 4 dischi SSD da 500Gb, sempre distribuiti 1 per nodo

Come funziona la replica?

E' improprio, ma immaginiamo un RAID sparpagliato su molti nodi. In fase di creazione del Pool di OSD (quindi dell'Array, per usare sempre il paragone con il RAID) potremo decidere il numero di repliche del dato, quindi quanto vorremo sacrificare il nostro spazio in favore della resilienza al guasto.

Va detto: i dischi non devono essere tutti uguali come nel RAID tradizionale. Qui ogni nodo apporta il suo. L'accortezza, al massimo, è di creare dischi che come performance siano paragonabili. Inutile mettere un SSD all'interno di un Pool con 10 SATA. 

La seconda accortezza è di non avere tagli troppo differenti in quanto un disco da 4Tb in un pool di 10 dischi da 250Gb non ha molto senso per una palese ed ovvia difficoltà di replica e distribuzione del dato. Il disco di grandi dimensioni verrà più interessato dalle operazioni di IO, questo è evidente.



Differenze progettuali tra le due architetture

E' evidente, le due architetture differiscono profondamente. A mio avviso non ha senso valutare un'infrastruttura distribuita con meno di 6 nodi (e che in previsione devono scalare nel breve periodo in numero maggiore). Proviamo comunque a schematizzarne i pregi ed i difetti di ognuna.

Tradizionale (PRO)
  • E' facile da manutenere, ogni elemento è identificabile e la diagnostica di problemi di performance è relativamente semplice
  • Da un punto di vista di licensing, con le nuove politiche basate su core e socket, è decisamente più economica
  • I consumi energetici sono minori in quanto le macchine da tenere accese sono certamente meno. Il contenimento dei costi energetici è un problema sempre più presente nelle aziende.
  • L'infrastruttura di rete può essere anche economica, avere interfacce in Gigabit non è scandaloso. Con l'architettura distibuita il 10Gbit è il minimo sindacale, senza se e senza ma, e questo decuplica i costi sul networking.
  • Se voglio la performance pura, questa si sposa più con l'architettura tradizionale in cui i nodi sono molto spinti come capacità computazionale. E' comunque sempre vero che una VM sfrutta al massimo quanto eroga il proprio nodo fisico, quindi se i nodi sono tanti ma economici, nessun nodo potrà erogare performance comparabili con uno "ben carrozzato".
  • In una SAN, l'aumento dei dischi coincide con l'aumento degli IOPS. A differenza dell'architettura distribuita dove il collo di bottiglia è sempre la NIC (preferenzialmente dedicata) dell'host che ospita la macchina virtuale.

Distribuita (PRO)
  • Estremamente scalabile, basta aggiungere nodi
  • Molto improntata al fault tolerance, non c'è un singolo point of failure, i nodi sono totalmente e indiscutibilmente indipendenti
  • Relativamente economica da un punto di vista hardware, i nodi costano molto meno in quanto hanno caratteristiche meno spinte e si può investire meno nella ridondanza del singolo nodo (a differenza del costo della parte rete)
  • Non c'è una SAN da acquistare e da manutenere

Conclusioni

"Non è tutto oro quel che luccica". Mi ha colpito la facilità con cui a caldo è possibile aumentare o diminuire il numero di dischi ed anche le repliche. Ma la sorpresa è stata amara quando abbiamo approfondito la parte di performance. La rete ad 1 Gbit NON è affatto sufficiente, le macchine sono troppo lente, le latenze estenuanti, hdparm restituiva un valore di circa 80MB/s su qualsiasi Pool (sia SATA sia SSD), quindi il nodo va veloce quanto la NIC dedicata alla parte storage, sempre e comunque meno di un FC o di un DAS. Questo comporta la necessità di salire come minimo a 10Gbit, con costi anche molto elevati. Da un punto di vista si risparmia sull'hardware dei nodi e della SAN, da un altro invece si spende sulla componente networking.

Nel frattempo ho ordinato 6 NIC a 10GbE ed uno switch Full 10Gbit (la ricerca costa! purtroppo solo il Cliente lungimirante comprende che gli esperimenti è meglio farli in laboratorio e non sulla sua pelle, e questo è incompatibile con una valutazione al massimo ribasso). Questo ci consentirà di fare dei test e capire se il livello di performance è accettabile, anche per applicazioni ad alto IO. Approfondiremo questa parte nel prossimo articolo, così come approfondiremo anche tutta la parte vmware vSAN.

Ultima nota: il FileSystem Distribuito consuma RAM e CPU, non poco, quindi i nodi devono essere dimensionati molto attentamente per non incorrere in freeze in caso di operazioni di riallineamento.



Discaimer: Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione, anche parziale, è vietata salvo autorizzazione.










giovedì 23 gennaio 2020

Muovere i primi passi in IPv6 (dal tunnel broker all'host ipv6 only)

L'articolo che sto scrivendo ha un taglio più tecnico, per cui non me ne vogliano i meno esperti (a cui comunque cerco spesso di dedicare anche articoli "digeribili"), ma sarebbe opportuno che il lettore conosca cos'è un IPv4 e la relativa logica di routing legata alla maschera di rete, inoltre è necessario avere già conoscenze sui meccanismi di NAT per meglio comprendere il proseguo.

Lo scopo è quello di far muovere i primi passi e consentire al lettore di creare un laboratorio di test per effettuare una serie di esperimenti.

L'architettura presa in esame non prevede che il proprio ISP fornisca nativamente IPv6, quindi utilizzeremo un TunnelBroker, ovvero un  servizio in grado di creare un tunnel con il nostro gateway ed erogarci una classe /64 di IPv6 (di 18 milioni di miliardi di IP pubblici, ma questo lo vedremo avanti).

Premessa

Visto il taglio tecnico, mi dilungherò poco sulle premesse: oramai anche i muri sanno che gli IPv4 sono praticamente terminati su RIPE e ARIN, quindi la situazione (seppur se ne parli da molto tempo) riveste carattere d'urgenza. Piuttosto è importante sfatare alcuni miti per cui è opportuno che il lettore legga queste FAQ in italiano ad opera di ipv6italia (gruppo non più attivo, ma le cui fonti risultano comunque estremamente utili e preziose).

E' altrettanto opportuno che il lettore sappia leggere un IPv6, quindi rimando a https://it.wikipedia.org/wiki/IPv6 e nello specifico la sezione di "Notazione per gli indirizzi IPv6".


Primo Step: creare un collegamento ad un Tunnel Broker

Come abbiamo visto poc'anzi, un servizio di Tunnel Broker si occupa di fornire connettività IPv6 tunnellizzandola su una esistente IPv4, esso ci darà a disposizione una classe IPv6 /64 liberamente utilizzabile, ovvero 18446744073709551616 IP Pubblici Statici (per dirla con nomi familiari). Opzionalmente è possibile richiedere una /48 con un semplice click, ma ritengo che non siano particolarmente necessari i 1208925819614629174706176 indirizzi IP di questa maschera di rete. (almeno non ora, non parleremo di subnetting)

Nel nostro esperimento (estremamente pratico), ci collegheremo su https://www.tunnelbroker.net/, effettueremo una registrazione, quindi cliccheremo su Create Regular Tunnel. A questo punto potremo scegliere il nodo di collegamento IPv4 tra una serie corposa di Server sparsi in tutto il mondo.



A questo punto avremo tutto per creare un Tunnel tra noi e loro per utilizzare la nostra classe IPv6.


Potremo avere visibilità degli IP pubblici utilizzando il semplice tool CIDR Calculator per IPv6 reperibile qui https://www.ultratools.com/tools/ipv6CIDRToRange (in effetti non è proprio banale calcolare la notazione CIDR in v6!).



Secondo Step: Configuriamo il nostro router-tunnel

Qualcuno dovrà fare un tunnel, nel nostro caso il router che si occuperà di fare questo è un pfSense la cui documentazione relativa a questo aspetto è estremamente dettagliata e reperibile qui: https://docs.netgate.com/pfsense/en/latest/interfaces/using-ipv6-with-a-tunnel-broker.html


Se tutto va bene ed abbiamo seguito la guida "religiosamente", avremo il tunnel online. 

Interfaccia Tunnel online


Architetturalmente abbiamo deciso di mettere, a seguire, un firewall Stormshield dietro il pfSense, pertanto quest'ultimo non viene utilizzato come firewall, ma come semplice router.

Facciamo qualche prova utilizzando http://www.ipv6now.com.au/pingme.php

Perfetto, siamo belli, biondi e con gli occhi azzurri.


Terzo Step: La nostra LAN full IPv6

A questo punto abbiamo messo il firewall Stormshield a valle del pfSense (abilitandolo all'IPv6) in bridge, così da consentire l'adozione degli IPv6 pubblici su tutta la LAN. Il NAT su IPv6 non è necessario e da un punto di vista di sicurezza, in verità, non apporta alcun beneficio rispetto ad un filtro ben strutturato... anzi.





Configurato correttamente il Firewall in bridge, potremo notare sull'interfaccia out il traffico IPv6 mediante un tcpdump:



A questo punto abbiamo messo un server vmware direttamente connesso all'altra interfaccia del bridge sul firewall, così da poter installare due macchine virtuali, una Linux ed una Windows.


NB: Abbiamo abilitato sul firewall il DHCP6 Server, tuttavia esso non era indispensabile avendo lasciato abilitati i protocolli di Router Advertisemen (RA), di cui tuttavia ci occuperemo in un prossimo articolo.

A conti fatti, l'architettura che abbiamo realizzato è la seguente:

Qualche test

A questo punto abbiamo la nostra rete Full IPv6, ovvero ora non sussiste alcun IPv4 tradizionale (per la cronaca, il protocollo IPv4 è stato proprio disabilitato all'interno delle VM).




Le VM navigano (sui siti, pochi, IPv6 abilitati). Ovviamente Debian si è riuscito nativamente a scaricare i suoi aggiornamenti fin dalla fase di installazione. Come DNS abbiamo messo (quando facevamo da DHCP6 Server) i DNS6 di CloudFlare 2606:4700:4700::1111 e 2606:4700:4700::1001.


In sostanza, le due macchine tra di loro si pingano, raggiungono l'esterno e sono contattabili dall'esterno. Hanno, di fatto, degli IP pubblici. In questa fase non sono stati messi dei filtri, ne parleremo più avanti, è un laboratorio. Da notare che questa architettura non utilizza ovviamente NAT. Era banale da precisare (trovandoci in Bridge), ma è importante entrare nell'ottica che il NAT appartiene al mondo IPv4, e non a quello IPv6 (il NAT-PT è un'altra storia, prima o poi lo approfondiremo).

A questo punto, non posso che augurare al lettore sopravvissuto "buon divertimento" con i nuovi host IPv6 only. Buoni esperimenti!

E poi?

Le domande che a questo punto il lettore dovrebbe essersi già posto sono:
  • In una rete fullbridge (un po' come accade nei campus), come faccio a creare delle policy di firewalling?
  • In una rete fullbridge, come gestisco le VLAN e la relativa compartimentazione?
  • Il DHCPv6 Relay che vedo ha più IP, che ruolo ha la Router Advertisement (RA) in tutto questo?
  • Perchè la mia scheda di rete ha un indirizzo speciale fe80::/10 valido (da RFC) per lo specifico link fisico? (ovvero: cosa significa link fisico?? Che centrano i layer più bassi? Parleremo di Scope Address, un nuovo concetto) 
  • Facciamo alcune considerazioni di sicurezza, l'assenza del NAT semplifica di molto la gestione (NO! Il NAT non si applica per motivi di sicurezza ma solo per incrementare il numero di IPv4 utilizzabili!), inoltre il numero sproporzionato di indirizzi IPv6 rende difficoltoso il lavoro degli scanner generici. Tralasciando le fantasie sul supporto IPsec nativo di IPv6 rispetto a IPv4, che altri scenari si aprono sotto il fronte security?
Ne parleremo nel prossimo articolo, nel frattempo sarebbe interessante confrontarci sul tema. Lasciate pure nei commenti i vostri contatti (se personali non li pubblicherò, i commenti sono moderati). Ogni confronto è bene accetto, anche non necessariamente epistolare.

RA su StormShield

RA su pfSense



Discaimer: Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione, anche parziale, è vietata salvo autorizzazione.

venerdì 10 gennaio 2020

MicroFollie dei filtri antispam Outlook/Live/Hotmail

Come molti dei miei lettori sanno, uno dei nostri prodotti di punta è il DM Pro, ovvero un MailServer basato su piattaforma Linux con Postfix come MTA. Inizialmente abbiamo avviato questo progetto timidamente, per poi acquisire sempre maggior know-how nel corso di questi intensi 8 anni di attività. Ne abbiamo viste di tutti i colori ed il nostro osservatorio umano ha classificato e creato oltre 25.000 regole personalizzate e specifiche per combattere lo spam. Insomma, la posta elettronica è un argomento complesso "sotto al cofano", ma è anche uno di quei settori dove abbiamo investito maggior tempo.

Purtroppo accade che alcuni grandi nomi decidano di non rispettare i protocolli standard (abbiamo in passato già parlato dei "capricci" di Microsoft in questo articolo) ed implementino variabili spesso fantasiose degli stessi. Anche per questo motivo può accadere che una email perfettamente lecita e formattata, inviata da un MailServer perfettamente configurato, finisca nello spam.

Per i meno addetti ai lavori, finire o meno in spam è una questione di reputazione. Migliore sarà la reputazione del mio MailServer, più probabilità ho di recapitare un'email al mio destinatario. Definiamo però reputazione perchè, in questo caso, reputazione è una parola che ha un ampio respiro. Fondamentalmente ci sono due momenti in cui un'email può essere rifiutata:
  1. In fase di contatto con l'MTA: ovvero quanto il mailserver mittente si presenta a quello di destinazione. Se vieni escluso in questa fase, probabilmente l'hai fatta grossa. Si tende, infatti, a limitare il rifiuto in questa fase in quanto il reject darà un errore di tipo 5.x.x, ovvero l'email verrà rifiutata senza se e senza ma. E' il caso (spesso, poi ognuno configura il proprio server come meglio crede) di un'email contenente un virus, o listata in una RBL particolarmente affidabile, o magari in caso di email inviata da una classe di IP pubblici.
  2. In fase di analisi: ovvero quando l'email ha passato i primi controlli, è stata totalmente scaricata e presa in carico dall'MTA e viene inviata al motore antispam (tipicamente SpamAssassin). Qui possiamo fare un controllo aggiuntivo che prima non potevamo fare, ovvero leggerne il contenuto intero (il body) e muoverci di conseguenza. A questo punto ogni cosa sviluppa un punteggio, al superamento di una soglia l'email verrà classificata come spam (e normalmente contrassegnata e spostata comunque dall'LDA nella casella di destinazione ma nella directory IMAP Junk). Un testo bianco su sfondo bianco, ad esempio, svilupperà un punteggio di 0.3, che si aggiungerà (sepre ad esempio) al punteggio di 3.0 se il link all'interno dell'email è ritenuto spam da una DBL, e così via. La soglia standard è 7, se l'email supera questo punteggio è spacciata. Un'email perfetta ha ottenuto un punteggio di 0.


Il fattaccio

Ebbene, ultimamente abbiamo notato che i filtri antispam di Microsoft (applicati quindi a Hotmail, Outlook, Live e tutti i servizi correlati) penalizzano MailServer perfettamente leciti la cui colpa è, probabilmente, non aver acquistato un prodotto Office 365.

Ma andiamo con ordine. Il MailServer in questione è stato perfettamente configurato:
  • Reverse DNS perfetto
  • Protocollo SPF perfettamente implementato
  • Protocollo DKIM perfettamente implementato
  • Protocollo DMARC perfettamente implementato
  • Punteggio ottenuto con mail-tester.com di 10/10 (il massimo, qui un punteggio alto invece è positivo)
ma le email ad un indirizzo hotmail finiscono in "indesiderata".

Apriamo un ticket al provider che erroneamente classifica l'email come spam e l'operatore, onestamente ignaro delle motivazioni astruse che stanno alla base del diniego nel recapito della posta, ci risponde di iscriverci al programma Outlook SNDS e al programma Outlook JMRS. Rispettivamente un programma di analisi reputazionale degli indirizzi IP e di reportististica dello spam.

Bene, ai punti sopra, quindi aggiungiamo:
  • Iscrizione al programma SNDS per gli IP correlati agli MX
  • Iscrizione al programma JMRS per i domini gestiti
Ma nulla, le email continuano inspiegabilmente a finire in spam nonostante il monitoraggio indichi come status "normal", ovvero senza alcun problema.

In qualche meandro della rete si vocifera che randomicamente un'email inviata da un altro client di posta (ad esempio Thunderbird) venga ritenuta spam solo perchè l'utente non ha come molti acquistato Outlook, ma noi non vogliamo crederci. Proviamo con Outlook e, ad onor del vero, anche qui l'email finisce in spam.

Il caso di "bullismo informatico" da parte del colosso verso il piccolo qui diviene evidente, ci impuntiamo, siamo certi di aver fatto le cose per bene e incalziamo pretendendo una risposta. Il supporto tecnico ci risponde:
Apply for the Sender Score Certified Mail program.
If you are doing all the above and you continue to have deliverability issues, you may wish to consider joining the Sender Score Certified Mail Program, a third party program administered by Return Path, Inc. Many legitimate mailers and marketers have qualified and joined this program to improve mail deliverability and decrease email from being filtered to the Junk E-mail Folder. Sender Score (https://returnpath.com/solutions/email-deliverability-optimization/ip-certification/) is the only service to which we subscribe.
Che per i più pigri significa:
Se stai facendo tutto quanto sopra e continui ad avere problemi di consegna, potresti prendere in considerazione l'idea di aderire al Programma di posta certificata Sender Score, un programma di terze parti gestito da Return Path, Inc. Molti mailer e rivenditori legittimi si sono qualificati e si sono uniti a questo programma per migliorare la consegna della posta e ridurre il filtraggio della posta nella cartella Posta indesiderata. Il punteggio mittente (https://returnpath.com/solutions/email-deliverability-optimization/ip-certification/) è l'unico servizio a cui ci abboniamo.

In sostanza: se il tuo MailServer è perfettamente configurato ma la tua unica colpa è non utilizzare un nostro software o un nostro servizio, allora per consegnarci la posta puoi iscriverti a pagamento a questo servizio esterno.


Forse è uno scherzo, il primo aprile è distante, ma magari c'è stato un cambiamento nel calendario americano, chi lo sa. Rispondo alle 7.53 indicando che una risposta simile non è accettabile, noi siamo in regola, abbiamo fatto tutte le cose per bene e devono approfondire il ticket.

Mi arriva un'email alle 8.11:
Thank you for contacting Microsoft Technical Support. The service request has been archived due to inactivity. If you still require assistance, please contact us via support.microsoft.com or 1-800-Microsoft.

Onestamente per molto meno Microsoft ha ricevuto multe milionarie e la prepotenza e l'arroganza di chi si sente in diritto di dettare leggi in un mondo che segue standard e regole, è imbarazzante. E questo si aggiunge all'incredibile politica di licensing folle basata su core che ha aumentato, in molti casi, il costo dei sistemi operativi di svariati ordini di grandezza. Ma questa è un'altra storia e, soprattutto, del tutto lecita. 

In ogni caso, manterrò aggiornato questo articolo.