No, Zuckerberg NON ha detto che WhatsApp e Facebook sono a rischio

No, Zuckerberg NON ha detto che WhatsApp e Facebook sono a rischio

Oggi mi è passata davanti agli occhi una notizia del Corriere secondo la quale Zuckerberg avrebbe “lanciato l’allarme” perchè “i server” di WhatsApp e Facebook “rischiano di fondersi” se il traffico continua a crescere a causa del Coronavirus/COVID-19.

Quindi, almeno pare, saremmo a rischio catastrofe (un’altra). Questo il titolo:

La notizia è stata subito ripresa da molti altri, come Il Giornale:

E Adnkronos:

Hardware Upgrade rilancia il grido d’aiuto con toni ancora più disperati:

Secondo l’articolo de Il Corriere, questo “allarme” senza precedenti sarebbe stato lanciato da Zuck in una conferenza stampa Mercoledì scorso:

…non fosse che la citazione è completamente inventata, che Zuckerberg non ha lanciato nessun allarme e che il contenuto del suo intervento è stato completamente ribaltato.

Cosa ha detto, quindi, veramente, Zuck? Molto semplicemente, ha affermato che i livelli di traffico sono altissimi (e lo sapevamo già), più del normale picco di capodanno, e che in Facebook si stanno impegnando per assicurarsi che l’infrastruttura sia in grado di soddisfare le necessità degli utenti.

Nel testo originale, che riposto qui sotto, non c’è nessun accenno a possibili problemi, nessun grido di allarme, nessuna richiesta di aiuto:

So the normal spike for us is New Years Eve, right, where basically everyone at the same time just wants to message everyone and takes a selfie and sends to their family wherever they are, and to wish them a Happy New Year. And we are (inaudible) basis well beyond what that spike is, on New Years.

And just making sure that we can manage that is the challenge that we‘re trying to make sure that we can stay in front of because of course right now this isn’t a massive outbreak in the majority of courtiers around the world yet, but it is – if it gets there then we really need to make sure we’re on top of this from an infrastructure perspective to make sure that things don’t melt down, and we can continue to provide the level of service that people need in a time like this.

Il testo integrale dell’intervista lo trovate qui.

Un ennesimo facepalm per la stampa italiana, a questo giro con tanto di citazioni inventate. Ironia della sorte? Tutto nasce da una conferenza stampa in cui per 2/3 del tempo Zuckerberg ha parlato di fake news e di quanto siano pericolose.

…verrebbe quasi da pensare sia stato fatto in malafede e a scopo clickbait.

Vademecum 2.0 per picchi di carico imprevisti

Vademecum 2.0 per picchi di carico imprevisti

[questo articolo è la versione aggiornata e rivista del precedente articolo che era a sua volta la versione rivista e curata di un mio thread inizialmente pubblicato su Twitter]

A volte succede che siti web a basso traffico per la maggior parte della loro esistenza divengano improvvisamente critici per la sopravvivenza dell’umanità.

Questa settimana è stato il turno del sito del Ministero della Salute (salute.gov.it), diventato importante a seguito dell’arrivo del COVID-19 (Coronavirus) in Italia, e collassato sotto il peso dei cittadini che cercavano di informarsi.

Da cittadino non posso che pensare il Ministero non ci abbia fatto una bella figura: in casi come questo l’accesso alle informazioni può veramente prevenire il panico (e/o salvare vite). Da persona (dicono) competente nel settore devo riconoscere che pur essendo la scalabilità delle piattaforme web uno dei problemi più complessi dell’informatica, nel caso di siti informativi (in sola lettura) gestire i picchi di carico diventa estremamente semplice (e veloce).

Ecco quindi un vademecum che spiega come reagire nel caso in cui vi troviate in una situazione simile e doveste riportare online con molta fretta un sito sotto un carico talmente alto da non riuscire nemmeno a collegarvi all’infrastruttura.

Il primissimo passo (contro intuitivo) è quello di chiudere gli utenti fuori dal sito e far si voi siate gli unici a poterlo raggiungere. Il modo migliore è bloccare le porte HTTP/HTTPS sul firewall: se il numero di connessioni è molto elevato, un semplice deny sul frontend potrebbe non bastare.

Fatto questo, procedete con il ripristino del funzionamento del sito per poterci lavorare dall’interno della vostra rete: spesso un riavvio dei componenti (database, application server, frontend) è sufficiente. Controllate che le partizioni in cui vengono scritti file temporanei, sessioni e log non siano piene: in base alla situazione (e al software specifico) potrebbe avere senso rimontarle temporaneamente in /dev/null per escludere una fonte di possibili problemi.

Date anche uno sguardo alla configurazione per controllare non ci siano inutili colli di bottiglia, come limiti troppo stringenti al numero di connessioni verso il database o verso l’application server: in una simile situazione potrebbero creare più problemi che benefici.

Sostituite l’indirizzo IP esterno del frontend: dobbiamo assicurarci che non sia più raggiungibile direttamente dagli utenti una volta riaperto il firewall, motivo per cui aggiungere un nuovo indirizzo in alias non è sufficiente e quello precedente va completamente rimosso.

Create anche un record DNS temporaneo che punti al nuovo IP (ad esempio origin-www.grg.pw). Già che ci siete, assicuratevi che il TTL del vostro hostname principale sia basso, a 300 secondi o meno.

Configurate una CDN: create una distribuzione/vhost usando l’hostname primario del vostro sito web (www.grg.pw) che abbia come origin/backend l’hostname temporaneo creato poco prima. Mi riferirò ad Amazon Cloudfront perchè a differenza di altre è disponibile in self provisioning

In questo scenario ci sono alcuni valori di configurazione estremamente critici: prima di tutto, alzate l’origin timeout ad almeno 60 secondi.

Configurate poi la CDN perchè ignori gli header di caching (non) impostati dal vostro CMS e forzi invece un default e un minimum TTL ragionevolmente alti (nel mio esempio 24 ore).

[NB: questa configurazione non sarebbe ottimale in un normale ambiente di produzione, ma nello scenario sopra descritto la priorità è massimizzare la probabilità che i contenuti finiscano in cache, e che poi ci rimangano]

Disabilitate il forward dei cookie e degli headers HTTP: questo aumenterà la resa delle cache (ma romperà tutte le funzioni di personalizzazione e il login). Il forward delle query string è un tema leggermente più spinoso e richiede conoscenza del CMS: impostatela in modo che venga inoltrato il minimo necessario alla generazione delle pagine (se le vostre URL non includono query strings, disabilitatelo).

Se il sito in questione ha un’area amministrativa (diciamo /wp-admin/), rendete l’intero path inaccessibile al pubblico: potete farlo sia con una eccezione nella configurazione della CDN stessa o direttamente sul vostro frontend. Questo passaggio è importante perchè con la configurazione che stiamo usando la CDN potrebbe inserire in cache (in sola lettura, ovviamente) anche le pagine amministrative e renderle disponibile a tutti gli utenti.

Ci siamo quasi. Il prossimo passo è configurare il vostro firewall perchè accetti solo connessioni provenienti dalla CDN. Se vi risulta troppo complicato se ne può temporaneamente fare a meno (ricordiamo che il nuovo indirizzo IP del frontend è sconosciuto agli utenti, così come il record DNS temporaneo che abbiamo creato).

Potete ora procedere con l’aggiornamento dei record DNS del vostro dominio principale perchè puntino alla CDN e non più direttamente al server.

Il vostro portale tornerà lentamente online, con la propagazione dei nuovi record.

DISCLAIMER: quella qui descritta è una configurazione di emergenza, da usare nei casi in cui riportare online nel minor tempo possibile un portale contenente informazioni critiche è la priorità. Dovrete eseguire invalidation a mano ogni volta che i contenuti vengono aggiornati, e potete stare certi che qualche funzione del portale si romperà. Se avete usato questa guida, è importante pianifichiate l’implementazione di una configurazione adeguata il prima possibile.

Per ogni necessità, mi trovate su Twitter.

La trasparenza dell’Agenzia delle Entrate in tema di Fattura Elettronica

La trasparenza dell’Agenzia delle Entrate in tema di Fattura Elettronica

Volendo fare luce su alcune delle scelte tecnologiche effettuate in tema di “Sistema di Interscambio” (Fattura Elettronica), come avevo anticipato nel precedente post sull’argomento (se non lo avete già letto lo trovate qui), un gruppo di professionisti si è riunito ed inviato, sia a Sogei (società che gestisce la piattaforma) che ad Agenzia delle Entrate una Istanza di Accesso Civico Generalizzato (FOIA) richiedendo:

Tutti i documenti di collaudo inerenti gli sviluppi software di applicazioni informatiche inerenti il sistema di Fattura Elettronica divenuto obbligatorio in data 1.1.2019 (SDI).

Tutti i documenti di analisi di sicurezza informatica, specificamente rivolti ad analizzare, verificare eventuali problematiche di sicurezza applicative e/o infrastrutturali relative al servizio di Fattura Elettronica di cui sopra.

L’accesso a questi documenti permetterebbe una analisi esterna dell’architettura nonché l’avvio di una ben più aperta conversazione allo scopo di migliorare questa piattaforma che, pare, accompagnerà l’Italia per molti anni a venire. Il testo completo della richiesta, se siete curiosi, potete leggerlo qui.

Abbiamo deciso di inviare questa richiesta soprattutto alla luce dei molti enti pubblici nel mondo che stanno infatti intraprendendo la via della trasparenza totale: Swiss Post, per esempio, interessata a confermare/verificare la sicurezza del proprio portale di e-voting (voto online), ha pubblicato il codice sorgente della piattaforma e ha invitato esperti ed interessati ad un “Public Intrusion Test”. Non garantirà ai partecipanti solo un safe harbour legale e il diritto di pubblicazione delle loro scoperte, ma offrirà anche una ricompensa economica a chi scoverà delle vulnerabilità.

In settimana però abbiamo ricevuto la risposta da parte dell’AdE, la quale ci comunica che:

…valutata la probabilità e serietà del danno ai correlati interessi, nonché il rischio di pregiudizio ai beni e interessi tutelati dall’ordinamento in rapporto all’interesse conoscitivo del richiedente, l’istanza non viene accolta.

Accesso negato, quindi. Questo appare come un tentativo di mantenere alcune informazioni segrete secondo il principio (ampiamente contestato) di “security through obscurity“: un qualcosa di opposto ad esempi come quello di Swiss Post e delle decine di altri enti pubblici che rilasciano il codice dei loro applicativi sotto licenze Open Source.

Di seguito acuni punti salienti del loro rifiuto (la cui versione integrale è qui):

All’esito della valutazione effettuata, si ritiene che dall’ostensione dei documenti richiesti possa derivare un pregiudizio concreto ai predetti interessi pubblici, rispetto ai quali recede l’interesse del singolo alla conoscibilità dei dati, dei documenti e delle informazioni in possesso della pubblica amministrazione.

I documenti oggetto di richiesta, infatti, contengono informazioni idonee a disvelare l’architettura del sistema di interscambio, anche con riferimento alle caratteristiche di sicurezza dello stesso e alle relative misure progettate e realizzate a protezione del suo funzionamento e dei dati ivi contenuti.

L’accesso a tali documenti, pertanto, risulta concretamente idoneo ad arrecare grave pregiudizio alla salvaguardia dell’interesse patrimoniale dell’Erario.

Sotto altro profilo, occorre rilevare che l’ostensione dei documenti richiesti comprometterebbe, altresì, la sicurezza delle informazioni relative ai sistemi informatici utilizzati nell’ambito del processo di fatturazione elettronica.

I due paragrafi che seguono sono particolarmente interessanti:

Occorre inoltre evidenziare che le finalità per le quali il legislatore riconosce il diritto di accesso civico generalizzato sono quelle “di favorire forme diffuse di controllo sul perseguimento delle funzioni istituzionali e sull’utilizzo delle risorse pubbliche e di promuovere la partecipazione al dibattito pubblico”.

La comunicazione dei documenti richiesti appare evidentemente non pertinente ed eccedente rispetto a tali finalità.

Noi abbiamo infatti richiesto i documenti per verificare l’adeguatezza, la sicurezza e l’architettura di un sistema dal quale dipenderà l’economia di un intero paese (e che tutti noi abbiamo finanziato), sulla base di osservazioni effettuate sul materiale già di pubblico dominio: scopi che sembrano ricalcare parola per parola gli scopi dell’accesso civico generalizzato.

I documenti richiesti sono di carattere prettamente architetturale, informazioni di alto livello che, come è chiaro ad un qualunque esperto di infrastrutture, sono ben lontane dal causare un diretto rischio per la sicurezza o la stabilità di una infrastruttura.

AdE ha nel frattempo emesso un nuovo comunicato in cui sostanzialmente, nuovamente, conferma che il Sistema di Interscambio stia funzionando a dovere. Al comunicato ha però prontamente risposto l’Associazione Nazionale Commercialisti, segnalando qualcosa di diametralmente opposto: in molti casi i tempi di consegna delle fatture non sono rispettati (30 giorni al posto di 5), si riscontrano problemi tecnici di varia natura, e, a conferma di quello che era il più grande timore, iniziano ad emergere problemi intrinseci del protocollo di interscambio.

Quando potremo contare su un livello di trasparenza adeguato per un paese che vuole guardare avanti ed evolversi, e non indietro?

I dubbi sulla tecnologia del Sistema di Interscambio (Fattura Elettronica)

I dubbi sulla tecnologia del Sistema di Interscambio (Fattura Elettronica)

Essendo l’Italia detentrice del Guinness World Record per le catastrofi tecnologiche, dalla Posta Elettronica Certificata (PEC) ai vari down dei siti istituzionali durante elezioni e censimenti, non ho potuto sottrarmi dal dedicare le mie attenzioni a Sistema di Interscambio e Fattura Elettronica.

Tutto è iniziato quando mi sono trovato sommerso nella valanga di commenti negativi di utenti che segnalavano problemi tecnici e di sviluppatori che si lamentavano della complessità di implementazione e del basso livello di qualità delle API del SdI. Dopo aver passato qualche serata a studiarne le specifiche (pubblicate qui), mi sento di condividere i dubbi sulla qualità dell’implementazione, dell’infrastruttura e della gestione di quest’ultimo.

Vi starete chiedendo il perchè, immagino. Le osservazioni più rilevanti, in ordine sparso, sono:

  • Le API si basano su SOAP+XML, uno standard superato dal molto più diffuso REST+JSON. Non si tratta solamente di una questione estetica: l’utilizzo di tecnologie obsolete scarica sugli sviluppatori che devono utilizzare queste API una complessità che non potrà che crescere nel tempo. Utilizzare librerie deprecate o poco supportate e standard non più ampiamente utilizzati significa diventare parte di una nicchia, con svantaggi e problemi facilmente immaginabili.
  • I template WSDL pubblicati contengono URL come http://servizi.fatturapa.it/ e http://www.fatturapa.it/): tutte in chiaro, nessuna traccia di HTTPS. Va detto che un redirect verso HTTPS lo effettuano, ma questo modo di procedere lascia comunque aperti vari scenari di attacco Man in The Middle. Potrebbe trattarsi di semplici segnaposto, ma anche se fosse, per quale motivo diffondere dei template che contengono simili oscenità?
  • Gli endpoint SOAP non sono protetti da una CDN che possa permettere di bloccare flooding e attacchi più sofisticati che malintenzionati potrebbero lanciare contro la piattaforma: si possono solo immaginare gli effetti catastrofici che l’indisponibilità del SdI avrebbe sull’economia dell’intero paese (parlavo giusto qualche giorno fa di come realtà quali Netflix e Spotify siano più resistenti di molte infrastrutture critiche nazionali).
  • I frontend, some se non bastasse, sono tutti all’interno dello stesso range di IP, annunciato da AS33964 (Sogei) a due soli carrier prettamente nazionali, Fastweb e BT Italia.

Sia chiaro: queste scelte potrebbero avere serie motivazioni alle spalle, e non possiamo valutarle come “sbagliate” a priori e dal nostro punto di osservazione esterno. La loro distanza dalla pratica comune però garantisce il diritto, il dovere quasi, di fare delle domande e metterle sotto la lente, per assicurare siano la scelta migliore per tutti noi.

Un tema che è importante discutere è infatti quello della trasparenza (trattasi pur sempre di Pubblica Amministrazione, che lavora con i soldi dei cittadini e per i cittadini). Mentre le segnalazioni di difficoltà e ritardi nell’elaborazione non si fermano (basta fare una ricerca sui social media), ad esempio, l’Agenzia delle Entrate diffonde comunicati stampa in cui sostiene che:

“sul sistema di interscambio sono già transitate quasi un milione e mezzo di fatture elettroniche senza che il partner tecnologico Sogei abbiano (sic.) rilevato alcun problema tecnico”

Il valore di una simile affermazione è nullo se non contestualizzato: non serve a niente sapere quante sono le fatture processate se non sappiamo quante ne sono invece fallite, quante sono quelle emesse lo scorso anno nello stesso periodo con metodo cartaceo, qual è il tempo medio di elaborazione, etc.

Molti interrogativi ma poche risposte, quindi. Per trovarle abbiamo riunito alcuni dei professionisti che si erano espressi sulla piattaforma e inviato sia all’Agenzia delle Entrate che a Sogei una Istanza di Accesso Civico Generalizzato (FOIA), richiedendo copia dei documenti relativi a progettazione, sicurezza e manutenzione del SdI.

L’intenzione, una volta entrati in possesso di questi documenti, è quella di studiarli e avviare un dibattito aperto sui punti sopra espressi e quanto di nuovo dovesse emergere: è responsabilità di tutti noi. Vi terremo aggiornati.

UPDATE: qui trovate la seconda parte di questa odissea.

(per domande, richieste varie o se volete contribuire, potete contattarmi qui o su Twitter)

Il Cloud spiegato a Nonna Pina: l’alta affidabilità

Il Cloud spiegato a Nonna Pina: l’alta affidabilità

Noi nerd soffriamo di una patologia che spesso ci porta a dare per scontato che chiunque abbia ben chiaro ciò che, al contrario, è chiaro solo a noi.

Io non sono un nativo delle nuvole: so cosa sono i server, so cosa sono i RAID, e so anche dove si nascondono le birre in datacenter. Nelle mie frequentazioni risalenti a quell’era geologica ho una completa rappresentazione delle idee sbagliate che i sistemisti, gli sviluppatori o gli IT manager hanno in tema di cloud computing.

…e non sono poche: complici sicuramente campagne di marketing di compagnie “wannabe” traboccanti di buzzword (da #cloud a #blockchain passando per #ai), la confusione e quindi l’incomprensione è sempre in agguato. Da qui l’idea di una serie di post, scritti in modo (quasi) semplice, che abbiano lo scopo di spiegare (anche a Nonna Pina, per l’appunto) i fondamenti di questo, per qualcuno, nuovo mondo.

Partiamo da un tema molto caldo: l’alta affidabilità nel cloud. Quello che insomma spinge in media ogni due giorni un sistemista a lamentarsi nel suo gruppo Facebook di fiducia di qualcosa del tipo “…mi avevate detto che il cloud è super affidabile, ci ho spostato la mia macchina virtuale e dopo tre mesi era già down!”.

Questo è senza dubbio il salto concettuale più complesso: nel mondo pre-cloud l’alta affidabilità veniva implementata negli strati più bassi della piramide: si usavano server con componenti ultra ridondati, fatti per non guastarsi mai, collocati in datacenter sotterranei (o con scudi esterni in acciaio), progettati per resistere a qualunque attacco o avversa condizione esterna e, in sostanza, non spegnersi mai.

Un approccio sicuramente molto comodo per chi si occupa dell’applicativo che in questo resta totalmente agnostico perchè pensa a tutto l’infrastruttura sottostante, ma con un numero importante di problemi al seguito. Iniziando dal fatto che un simile modello è sostenibile solo su un singolo datacenter o al massimo un paio, a patto che siano molto vicini geograficamente: i costi crescono in modo sproporzionato, e si arriva comunque ad una situazione sub-ottimale sia di latenza per gli utenti finali (se i DC sono vicini tra loro non possono essere anche vicini agli utenti) che di rischio (sarebbero soggetti alle stesse minacce di tipo metereologico e geologico). Come se questo non bastasse, la scalabilità viene limitata in modo importante, richiedendo di fatto che ogni componente della vostra infrastruttura sia rinchiuso in una ed una sola VM.

Siamo di fronte ad uno dei cambiamenti di paradigma più radicali che il cloud abbia portato: l’alta affidabilità si sposta sugli strati più alti della piattaforma e si basa sul presupposto che ogni componente dell’infrastruttura possa fallire in qualunque momento, sia esso una VM, un datacenter o un intero campus. Notate il salto? Ci siamo evoluti dall’usare componenti indistruttibili pur sapendo non fosse possibile considerare ogni casistica al dare per scontato che tutto ciò che può succedere succederà, e quindi al pianificare reazioni automatiche a qualunque tipo di guasto. Si è passati da un paradigma molto costoso che non poteva considerare ogni eventualità ad un paradigma molto più economico, in cui si progetta tenendo sempre in considerazione il peggiore caso possibile.

Questo vi farà sicuramente riflettere: NukeMap alla mano, con una sola bomba nucleare in un punto strategico un attaccante potrebbe cancellare dalla faccia della terra i vostri conti correnti e infrastrutture critiche nazionali (in Italia ed in Europa, non conosco le leggi/pratiche comuni nel resto del mondo), ma non potrebbe scalfire minimamente le vostre playlist Spotify o i vostri post su Facebook. Quello che alcuni definirebbero “evento catastrofico” è per altri “ordinaria amministrazione”. Se non vogliamo guardare a casi così catastrofici, scommetto che almeno una volta nell’ultimo anno non siete riusciti ad accedere all’home banking della vostra banca a causa di una manutenzione programmata. Vi è mai capitato lo stesso su Snapchat o su Netflix? No? Esattamente.

A riprova del fatto che il focus si sia spostato dall’evitare gli imprevisti al gestirli, ci siamo addirittura inventati il Chaos Engineering: l’idea, anzi, la pratica di causare artificialmente guasti e disastri in produzione per verificare che le nostre piattaforme siano in grado di gestirli senza che gli utenti finali ne risentano.

Ricapitolando, quindi, l’alta affidabilità nei sistemi IT tradizionali si fonda sull’implementare infrastrutture sotto vari aspetti sub-ottimali usando componenti, costosi e complessi, progettati per non fallire mai. Nel paradigma cloud, al contrario, si implementano infrastrutture utilizzando componenti semplici e quindi economici, consci del fatto che questi prima o poi si romperanno e quindi progettando le applicazioni per gestire senza impatto le situazioni avverse.

…chiaro?

[nel prossimo capitolo a Nonna Pina spiegheremo invece i fondamenti di scalabilità]