A tutta velocita’ con PHP-FPM

PHP-FPM Very Fast

Come sa bene chiunque si occupi di creare e gestire un servizio Web moderno, il primo aspetto che viene ricercato e di cui si chiede la massima affidabilita’, e’ la velocita’ di risposta, cosi da garantire la presenza online delle imprese supportando il lavoro quotidiano delle Web Agency.

Nonostante oggi giorno ci siano nuovi linguaggi di sviluppo e di scripting il PHP rimane comunque ancora uno dei piu’ utilizzati e, grazie alle nuove funzionalita’ del PHP-FPM, questo linguaggio tornera’ sicuramente ad avere un ruolo di rilievo.

Ma, facciamo un piccolissimo passo indietro per rivedere come sono state gestite fino a ieri tutte le richieste php fatte dagli utenti ai vostri siti.

La maggior parte degli amministratori di siti sa che il PHP può essere incorporato nell’ HTML e che funziona con i principali web server. Tuttavia, l’aspetto meno conosciuto è la modalità con cui può essere eseguito il PHP sul web server, e questo può avvenire in diversi modi.

Aggiungiamo nell’equazione anche l’acronimo LAMP che, per chi non lo conoscesse, indica una piattaforma software per lo sviluppo di applicazioni web e sta per :

  • Linux (il sistema operativo)
  • Apache (il server web)
  • MySQL o MariaDB (il database management system)
  • PHP (il linguaggio di programmazione)

Come stavamo dicendo, fino a ieri  la modalità con cui si eseguivano le richieste e i processi di php sulla piattaforma LAMP era il PHP FastCGI.

Si tratta di un protocollo generico utilizzato per l’interfacciamento con un server web. Nello specifico è una variante della precedente Common Gateway Interface (CGI) che ha come obiettivo quello di ridurre il sovraccarico associato all’ interfacciamento tra web server e programmi CGI, consentendo ad un server di gestire più richieste contemporaneamente.

Ma con FastCGI è possibile configurare più versioni di PHP, cosa particolarmente utile quando si hanno vecchi siti web creati, ad esempio, in PHP 5.1 che non sono compatibili con l’ultima versione, inoltre, con FastCGI è possibile supportare diversi utenti ognuno con le proprie istanze di PHP. Questa funzione è particolarmente importante per migliorare la sicurezza in un ambiente condiviso, in cui è possibile avere utenti diversi che gestiscono ciascuno i propri siti web.

Andiamo ancora avanti, quindi grazie al protocollo PHP FastCGI il webserver genera un’ unico processo in fase di inizializzazione che, al termine della fase di start-up, si mette in attesa. Ogni volta che arriva una nuova richiesta in ingresso, il webserver apre una connessione con il processo fast-cgi (in attesa) che a sua volta genera l’output sulla connessione con il client, trasferitagli dal server. Il vantaggio principale di questo protocollo è la creazione dei processi solo in fase di inizializzazione, ottimizzando così il numero dei processi php.

Bene, quindi cerchiamo di capire adesso che cosa cambia con l’introduzione di PHP-FPM ?

PHP-FPM è una modalità più recente (nato nel 2004 come patch di PHP) di utilizzare PHP con un server web, ed è un’alternativa al precedente PHP FastCGI con l’implementazione di alcune funzionalità aggiuntive molto utili, in particolare ai siti che gestiscono quotidianamente sempre più traffico (dai siti vetrina agli e-commerce). Per queste tipologie di siti web è sempre piu’ necessario avere a disposizione strumenti sempre più performanti, proprio come il PHP-FPM.

Fino ad oggi una delle grosse mancanze di FastCGI è stata l’impossibilità di avere un numero di CHILD (processi) PHP che cambi in modo dinamico a seconda delle richieste effettive.

Nel suo insieme, il funzionamento è molto simile al FastCGI e si basa dunque sull’ esecuzione ottimizzata dei processi php che vengono creati solo in fase di inizializzazione e rimangono in attesa di una nuova richiesta. La grossa differenza sta nel fatto che è lo stesso PHP-FPM ad eseguire il processo e non più il web server.

Il “Process Manager” è uno script che gestisce direttamente i processi PHP, nella pratica attende e riceve istruzioni dal server web ed esegue gli script PHP richiesti, permettendo cosi ad un sito web di gestire carichi intensi. Il PHP-FPM mantiene dei “pool” per rispondere alle richieste PHP e i processi che si generano sono direttamente “figli” (CHILD) del Process Manager e possono quindi essere gestiti separatamente dal web server.

Questa modalità garantisce una maggiore robustezza del servizio, poiché tutte le operazioni come i cambi di configurazione o il restart dei processi, impattano i singoli pool FPM e non più l’intero web server.

Ecco alcune delle interessanti caratteristiche tecniche:

  • Demonizzazione dei processi PHP (file PID, file log, setsid(), setuid(), setgid(), chroot();
  • Possibilità di riavviare i processi PHP senza causare alcuna interruzione delle richieste in fase di processamento, si potra’ quindi cambiare qualsiasi parametro nel file di configurazione o addirittura aggiornare PHP senza avere nemmeno 1 secondo di downtime;
  • Possibilità di non processare le richieste provenienti da un determinato IP;
  • Possibilità di avviare i CHILD sotto differenti UID/GID/CHROOT e con differenti impostazioni di PHP (php.ini) il tutto senza bisogno di safe mode;
  • Possibilità di loggare tramite stdout e stderr;
  • In caso di corruzione della memoria RAM condivisa utilizzata da un OPCode Cache, PHP-FPM può effettuare un riavvio di emergenza di tutti i CHILD PHP;
  • Forza l’arresto dell’esecuzione di uno script nel caso in cui set_time_limit() avesse dei problemi.

Secondo un recente articolo pubblicato su CloudWays, effettuare uno switch da mod_php a PHP-FPM permetterebbe, tra i tanti vantaggi attesi, di ridurre del 300% i tempi di caricamento delle Web Application a traffico elevato.

OpenStack – Introduzione

OpenStack Cloud Software

OPENSTACK – PARTE PRIMA

Si parla molto di OpenStack e delle sue applicazioni. Ma che cos’è davvero, perché è stato sviluppato e quali sono i suoi vantaggi?

Che cos’è?
OpenStack è un sistema operativo per il cloud computing in grado di controllare componenti di storage, networking e computing. È open source e gratuito, di solito è installato sotto forma di soluzione IaaS. OpenStack fornisce un insieme di strumenti che servono a costruire e gestire piattaforme cloud sia pubbliche sia private. Permette agli utenti di installare macchine virtuali e si può accedere al codice sorgente per modificarlo in qualsiasi modo sia utile per gli scopi specifici del progetto.

Chi lo ha sviluppato?
Nel 2010 Rackspace e la NASA hanno collaborato a un progetto congiunto che è poi diventato OpenStack. Il codice iniziale è stato usato per Nebula, la piattaforma cloud della NASA, poi il progetto si è dato l’obiettivo più ampio di aiutare le aziende a far girare software cloud su hardware standard.

Chi lo usa?
Tra i vendor, alcuni dei nomi più importanti che attualmente supportano e distribuiscono OpenStack sono Canonical, Cisco, EMC, HP, Huawei, IBM, Oracle, Google e Red Hat. Tra gli utenti attuali ci sono Bloomberg, Comcast, PayPal e Wells Fargo. Ci sono incontri internazionali periodici su OpenStack – gli OpenStack Summit – in tutto il mondo, che raccolgono programmatori e utenti della piattaforma.

E’ quindi ormai innegabile l’interesse che tutto il mondo IT ha riservato in questi ultimi anni ad OpenStack.

Qual’è la ragione di tutto questo?

L’ormai tradizionale paradigma client-server, in progetti in cui la scalabilità e le finestre di picchi di carico sono variabili essenziali all’interno dell’equazione della produttività, presenta oggi giorno evidenti limiti di gestione dei carichi e della velocita’ di evoluzione dei progetti. Ecco quindi nascere l’esigenza di uno strumento che fosse flessibile ed allo stesso momento affidabile.

Questo concetto spiega quindi le motivazioni che possono spingere ad adottare una piattaforma cloud, ma perché fra tutte le piattaforme esistenti si parla sempre di OpenStack?

OpenStack è un progetto aperto
La sua natura aperta ha fatto sì che tutti i vendor interessati all’introduzione di specifiche funzionalità o determinati ambiti potessero contribuire in maniera attiva e funzionale al progetto, innescando un circolo virtuoso in cui ogni miglioramento apportato per favorire se stessi va a beneficio della comunità.

La sua natura aperta fa sì che chi adotta OpenStack per il proprio ambiente cloud è di fatto esente dal cosiddetto vendor lock-in, ossia l’essere vincolato ad un rivenditore specifico per le proprie tecnologie. Infatti se lo standard OpenStack è garantito, ogni venditore potrà essere valutato in modo paritetico a tutti gli altri, rendendo così il mercato più competitivo e conveniente per il cliente finale.

I presupposti di un progetto OpenStack

Bisogna subito tenere presente che “non tutti i progetti sono adatti al cloud“, nonostante cio che viene erroneamente interpretato leggendo in giro per il web, infatti questo principio sfugge a molti che guardano verso le nuvole vedono unicamente un posto differente da cui erogare i propri servizi. Esistono dei requisiti da tenere presente per capire se un progetto è adatto al cloud.

Un progetto OpenStack quindi deve essere:

** Non persistente: non deve basarsi sulla persistenza dei dati all’interno delle macchine coinvolte. Questo aspetto non va confuso con l’esigenza di avere uno storage solido e sicuro, si tratta invece di non giudicare le istanze che concorrono al progetto come perenni, ma come componenti utili al loro scopo e liberamente sacrificabili;

** Scalabile: deve supportare applicazioni che nativamente siano in grado di scalare. L’applicazione nasce già dallo sviluppo come pensata per il cloud;

** Dinamico: a fronte di un innalzamento delle richieste ricevute il progetto deve essere in grado in maniera autonoma di gestire le nuove componenti. Gli interventi manuali successivi all’implementazione sulle istanze coinvolte devono essere inesistenti;

** Rapido: deve essere passibile di provisioning, favorendo la velocità di creazione (e distruzione) di nuove istanze;

Se il vostro progetto risponde a questi requisiti messi in evidenza qui sopra, allora potete pensare ad integrare OpenStack ed è giunto quindi il momento di capire in cosa consiste.

Le componenti di OpenStack

La parola stack descrive un insieme di entità che concorrono ad uno scopo comune. OpenStack è composto da numerose elementi che devono comunicare fra loro, lo strato di comunicazione passa attraverso due filoni fondamentali: la memorizzazione delle informazioni e la coda delle azioni da svolgere. Queste due azioni sono coperte ciascuna da un elemento specifico:

MySQL

Il database MySQL è necessario per la memorizzazione delle informazioni di configurazione generali del sistema, per la memorizzazione delle informazioni di autenticazione relative a ciascun componente e per il mantenimento dinamico dello stato del sistema.
Ogni azione eseguita all’interno dell’infrastruttura OpenStack è tracciata all’interno del database. L’importanza di questa componente è evidentemente capitale.

RabbitMQ

RabbitMQ è uno scheduler, un software didicato alla gestione delle code ed all’organizzazione delle sequenze di operazioni. Tutti i nodi facenti parte dell’infrastruttura OpenStack comunicano con lo scheduler, ed anche in questo caso è presto spiegato come questa componente ricopra enorme importanza per il regolare funzionamento dell’ambiente.

Determinato quindi il sistema di circolazione e reperimento delle informazioni si può focalizzare l’attenzione sugli elementi peculiari di OpenStack, riassunti in questo diagramma che si trova sul sito ufficiale del progetto:

OpenStack Diagramma Software

                                                     OpenStack Diagramma Software

Keystone

Keystone è il software che gestisce il sistema di autenticazione di OpenStack. Il principio su cui si fonda è quello classico degli utenti e dei gruppi, ma di fatto si occupa di gestire le tre tipologie di utenti configurabili in OpenStack:

  • Cloud Provider Admins: ossia gli amministratori del sistema OpenStack;
  • Tenants: ossia i profili delle compagnie fruitrici dei servizi;
  • Users: ossia gli utenti delle compagnie fruitrici dei servizi;

Il concetto di “compagnia” si riferisce ad un sotto-ambiente interno alla stessa installazione di OpenStack. Applicato ad un provider esso potrebbe essere rappresentato dai clienti, mentre all’interno di un cloud privato potrebbe essere associato ad un dipartimento interno.

Glance

Glance si occupa del provisioning (ossia di fornire) delle immagini all’interno dell’ambiente. Questa componente fornisce un bacino di istanze gia preconfigurate, disponibili ai fruitori dei servizi, per effettuare il deploy (ossia la messa in produzione) dell’istanza desiderata all’interno del proprio ambiente.
Le immagini sono supportate nei formati KVM qcow, Aws, VMWare purché esista su queste un Master Boot Record.

Nova

Nova è il compute service, un servizio che permette di gestire i sistemi virtuali erogati all’interno dell’ambiente. All’interno della macchina definita controller il servizio nova-api guiderà l’avvio e la terminazione delle istanze comandando la sua controparte nova-compute, attiva su tutte le macchine hypervisor facenti parte della struttura OpenStack.
Le decisioni su dove e come le istanze dovranno essere avviata saranno gestite dal servizio nova-compute-service (basato su libvirt).

Horizon

Horizon è l’interfaccia web dalla quale è possibile controllare agevolmente le istanze in modalità point-and-click oltre che le immagini gestite da Glance. Il software Horizon è basato sul modulo wsgi del webserver Apache.

C’è ancora un’ultimo aspetto da tenere presente, come è deducibile dallo schema, lo storage.
In un setup base le macchine possono essere erogate direttamente dai dischi degli hypervisor, ma in ambienti di larga scala ciò potrebbe non essere auspicabile. In questi casi fare riferimento ad un gestore dello spazio centralizzato permetterebbe di utilizzare gli hypervisor come semplici erogatori, valorizzando la scalabilità generale del progetto, ed ecco dunque venirci in aiuto questo componente per la gestione dei volumi, Cinder.

Cinder

In origine parte del progetto Nova (chiamato nova-volume) e dal 2012 progetto a se stante, Cinder è il servizio che fornisce il block storage per le istanze, uno storage gestito e centralizzato che funziona da dispositivo a blocchi per le virtual machines. Le macchine virtuali risiedono quindi su un device dedicato, definito sulla base di quello che è la modalità con cui l’hypervisor ha accesso allo storage.
Cinder supporta diverse modalità per essere visto dagli hypervisors: è possibile infatti utilizzare dischi locali o sistemi storage esterni, quali NFS, FibreChannel, DRBD o iSCSI.

Swift

A differenza di Cinder, Swift è un servizio di storage online che si occupa di rendere disponibile spazio all’interno dell’ambiente OpenStack mediante la modalità object storage. I dati non vengono registrati direttamente su dispositivi a blocchi, ma preventivamente convertiti in oggetti binari, distribuiti all’interno di più device in modo da garantirne la massima accessibilità oltre che la replica.
Swift è compatibile con il servizio di storage Amazon S3 e funziona con lo stesso principio: fornire uno storage web accessibile e scalabile.

Conclusioni

In questa lunga introduzione sono stati illustrati filosofia, componenti e soprattutto potenzialità di OpenStack, ma sebbene la lettura possa essere apparsa lunga, questa tocca appena la superficie dell’universo relativo a questo grande progetto.
Nel prossimo articolo verrà avviato un piccolo studio di fattibilità vero e proprio con lo scopo di mettere su strada tutti i vari software che lo compongono ed iniziare cosi ad adoperare OpenStack.

MaxScale DB Proxy scalabile

 

MaxScale DB Proxy Server

MaxScale DB Proxy Server

Il suo nome per esteso e’ “MariaDB MaxScale” ed è il nuovo database proxy server open source sviluppato da MariaDB Corporation Ab.

In pratica  MaxScale ci permetta di avere database ad alte prestazioni, in grado di consentire la costruzione di architetture flessibili. Ecco nel dettaglio le sue caratteristiche e funzionalità principali.

 

Innanzitutto ricordiamo a tutti che, un proxy è un server che fa da intermediario in una connessione: riceve le richieste da un client e le reindirizza verso altri server che sono i destinatari delle richieste. In altre parole un proxy è un mezzo per deviare una connessione tra due computer in modo da non collegarli direttamente. Un proxy funziona, nella sua pratica, come un centralinista: riceve la chiamata da chi vuole telefonare e la gira all’interno desiderato.

MaxScale si può inserire in modo trasparente tra l’applicativo e il server MySQL, esattamente come fa un proxy web tra il nostro browser (es. Chrome) e il sito che stiamo cercando di visitare.

Grazie ad un proxy è possibile avere:

  • Ridondanza: usando più di un database dietro al proxy. Un solo server non fornisce l’affidabilità e l’alta disponibilità in caso di down di una macchina.
  • Diminuizione dei costi di infrastruttura: perché generalmente due server piccoli sono meno costosi che un unico server molto performante.

Vedremo ora due tipologie di database proxy server:

I proxy di livello trasporto come HAProxy
I proxy di livello applicativo come MaxScale

HAProxy: un proxy efficiente, rapido e funzionale

Fino ad oggi il proxy più usato in ambito MySQL è l’HAProxy che lavora ad un livello più basso (livello 4: trasporto). HAproxy non conosce nulla di MySQL e si occupa solo di bilanciare le connessioni tra più server. E’ molto veloce, leggero ed efficente, tuttavia questo bilanciamento è fatto senza conoscere cosa sta smistando. Questo rende il sistema meno efficente poiché un server può ricevere molte richieste pesanti, mentre altri server possono essere scarichi. Quindi l’HAProxy non è la scelta vincente in tutti i casi.

MaxScale: un proxy che può fare cose incredibili

MaxScale lavora a livello più alto (livello 7: applicativo), monitorando i server riesce a capire cosa sta succedendo all’interno dell’infrastruttura. Conoscendo il protocollo MySQL può intervenire manipolando il traffico tra client e server. Ecco alcune delle sue principali funzionalità:

  • Filtro delle query al database
  • Gestione del routing: instradamento delle richieste a uno o più database server
  • Modifica delle query al volo prima che raggiungano il database
  • Possibilità di nascondere la struttura interna dell’infrastruttura lasciando un singolo punto d’accesso.
  • Alta affidabilità e scalabilità del sistema
  • Possibilità di spostare un database dal server locale ad un server esterno senza modificare la configurazione delle applicazioni
  • Divide automaticamente le scritture sul server MasterR e le letture su uno o più database Slave.

MaxScale può fornire un Load Balacing delle connessioni senza bisogno di utilizzare applicazioni o CMS che prevedano questa funzionalità. Questo significa che CMS come WordPress o Joomla possono trarne dei benefici, usando una replicazione Master/Slave per rendere scalabile il proprio sito.

Caratteristiche di MaxScale

Il punto di forza di MaxScale è sicuramente la sua modularità che permette una notevole libertà adattandosi a molti casi d’uso, infatti MaxScale è:

  • Modulare: un sistema di moduli ne definisce le funzionalità
  • Estendibile: è possibile applicare più filtri anche in cascata
  • Flessibile: i moduli e i filtri possono essere aggiunti dinamicamente

I moduli base di MaxScale

Quelli elencati qui sotto sono i 5 moduli che costituiscono il cuore di MaxScale:

  • Protocol: da la possibilità di utilizzare più protocolli es. MySQL client, http, telnet
  • Authentication: il sistema di autenticazione permette ai client di accedere a MaxScale usando le credenziali presenti sui server di Backend
  • Monitor: legge la configurazione dello stato del sistema direttamente dai server di backend
  • Router: smista le connessioni a uno o più database di backend
  • Filter e logging: i filtri permettono di modificare le query oppure di scrivere un file di log con tutte le richieste e le risposte ricevute.

1. Protocollo di connessione
I client si connettono a MaxScale anziché al database MySQL senza accorgersi della differenza. Possono usare le stesse librerie di connessione utilizzate fino ad ora: es. MySQL client o MariaDB client.

2. Autenticazione
MaxScale non ha un sistema di autenticazione o un database di utenti. Vengono utilizzati gli stessi utenti presenti sui database di backend, caricati all’avvio dell’applicazione.

3. Monitor
Viene utilizzato per capire in ogni momento lo stato di tutti i database di backend collegati a MaxScale. In questo modo è possibile sapere qual’è il server Master e quanti Slave stanno replicando correttamentei dati.

4. Router
Dirige il traffico dal client ai server utilizzando una regola specifica:

  • Connection routing: normale router di connessione ad un database
  • Read/Write Split router: smista le richieste di scrittura sul Master e le richieste di lettura su uno degli Slave collegati

5. Filtri e log delle query
Tra i più potenti strumenti messi a disposizione di MaxScale ci sono sicuramente i filtri che permettono di effettuare operazioni avanzate sulle query senza modificare il comportamento dell’applicazione:

  • Processando query SQL e risultati
  • Utilizzando una semplice regex
  • Analizzando, modificando o rifiutando le query
  • Mettendo più filtri in cascata

Insomma, da questo primo articolo, si deduce che le potenzialita’ sono tutte a favore di MaxScale

 

#MaxscaledbproxyserverMysql

Le novita’ di Debian 8

Debian 8 Jessie

Debian 8 Jessie

Il 25 aprile 2015 è stato annunciato il rilascio di Debian 8 (alias Jessie), che e’ l’ultima versione di uno dei più noti ed apprezzati sistemi operativi basati su Linux. Questo rilascio, atteso da moltissimi utenti e da altrettante aziende, porta con sè alcune novità significative, frutto di un lavoro di sviluppo durato circa due anni, e culminato in un sistema operativo che sarà supportato fino al 2020.

In questo articolo vedremo le principali novità introdotte su Debian 8, di cui è possibile effettuare il download direttamente dal sito ufficiale del progetto.

Una distribuzione universale
Debian, ad oggi vanta una vasta gamma di pacchetti software (circa 43 mila), che consentono a chiunque di personalizzarla a proprio piacimento, in base al tipo di applicazione per cui questo sistema sarà utilizzato: dai server alle workstation, passando per il cloud, i mainframe o le board che implentano l’Internet of Things.

L’idea della distribuzione universale, adatta a tanti contesti, ha spinto negli anni la comunità open source a creare un gran numero di derivate (ed il caso più noto risponde al nome di Ubuntu). Il fatto che molti sistemi Linux si basino su Debian aumenta quindi l’importanza di ogni aggiornamento apportato a questa distribuzione in ogni rilascio, dal momento che ciò si ripercuote su tutte le sue derivate (ufficiali e non).

Il passaggio a systemd
La novità più significativa, che ha creato molti dibattiti accesi, introdotta con Debian 8, riguarda il passaggio definitivo a systemd quale sistema di init principale, sebbene sia possibile utilizzare sysvinit come alternativa. Tale scelta trova le sue motivazioni nella riduzione dei tempi di avvio ed arresto del sistema, sebbene non tutti gli utenti sembrano convinti di ciò. Inoltre, systemd non si occupa solo della fase di boot: in quanto gestore di sistema, esso incorpora anche la gestione di diverse altre funzioni (alimentazione, dispositivi, login, eccetera), con conseguenze che potrebbero comportare, ad esempio, la necessità di riavviare il sistema in caso di aggiornamento. Un problema significativo per una distribuzione server, dovuto proprio a systemd. Il problema piu’ grande sorge per via del fatto che oggettivamente, l’attuale sistema usato, SysVInit, è oggettivamente un sistema antiquato, con un elenco di noti difetti, il principale dei quali è sicuramente la grande lentezza derivante dall’approccio seriale all’avvio dei servizi. L’idea di sostituirlo con un prodotto più moderno e meglio ingegnerizzato è, quindi, tutt’altro che sbagliata.

Il problema reale è che systemd sta andando ben oltre questo encomiabile tentativo, ma sta fagocitando al suo interno tutta una serie di servizi che con la gestione dei processi e la creazione dello ‘spazio utente’ poco hanno a che fare. Approccio, questo, che viola radicalmente le logiche della filosofia Unix, che sono alla base non solo dei Linux che usiamo oggi, ma in larga parte di quella che è l’informatica moderna.

Va detto, però, che il passaggio a systemd era già in atto da tempo, e non soltanto sulle distribuzioni basate su Debian: anche Red Hat, Fedora e SUSE (per citare alcune grandi distribuzioni Linux) sono già passate a questo nuovo gestore.

Desktop e applicazioni
Dal punto di vista dell’interfaccia utente, il grande grado di personalizzazione offerto da Debian si traduce nella possibilità di scegliere il proprio desktop environment preferito tra un gran numero di possibilità. L’ultimo rilascio è infatti compatibile con GNOME 3.14, KDE Plasma 4.11.13, Xfce 4.10, MATE 1.8 e Cinnamon 2.2.16.

Ai sopra citati desktop environment si aggiungono anche diverse applicazioni, tra cui Iceweasel 31.6, GIMP 2.8.14 e LibreOffice 4.3.3 per la sfera desktop, Apache 2.4.10, Tomcat 7.0.56 e 8.0.14, MariaDB 10.0.16 e MySQL 5.5.42 per quella server, nonchè OpenJDK 7u75, PHP 5.6.7 e Python 2.7.9 e 3.4.2 per gli sviluppatori.

Altre novità
Per concludere ricordiamo che Debian 8 è basato sul kernel Linux 3.16.7, che garantisce la compatibilità con le più recenti tecnologie disponibili. È altresì interessante notare che, con il nuovo rilascio, viene garantito il supporto a ben dieci architetture diverse, tra cui x86, PowerPC, MIPS, ARM e diverse altre.

 

#DebianottoJessie

Proteggi Mysql con GreenSQL

SQL Injection

SQL Injection

Mysql DB, GreenSQL FW e le SQL injection

Nel corso degli anni i Database hanno conosciuto un’evoluzione repentina, a questa ha fatto seguito, data l’importanza dei dati contenuti, un’escalation dei problemi inerenti la sicurezza. Le vulnerabilita’ che colpiscono i DB sono ormai molte e differenziate e gli “exploit” di tipo SQL injection sono quasi all’ordine del giorno, tra i piu’ colpiti c’e’ proprio Mysql che in pochi anni e’ diventato il default DB di moltissime applicazioni web; ecco perche’ bisogna fare molta attenzione e sapere come correre ai ripari.

Come ben noto ai web master le SQL Injection sono un problema comune di molte applicazioni web li dove le piu’ banali cause possono venire arginate da un sitemista scrupoloso e attento ad un buon hardening di sistema, possono sempre insorgere altri “bachi” non voluti, negli algoritmi di arginazione.

Una soluzione efficiente e ben strutturata la propone GreenSQL, un software Open Source che si presenta sotto l’aspetto di un proxy/firewall, al quale ci si interfaccia come una comunissima connessione ai database e gestisce le connessione con il database filtrando eventuali codici “illegali”.

Come funziona

In pratica la query inviata alla web application viene esaminata da GreenSQL, che intercetta il traffico diretto al DB, e nel qual caso la query sia ritenuta rischiosa non viene inoltrata al database e il risultato restituito sara’ nullo.
Viceversa se l’interrogazione risulta conforme alle specifiche verrà inoltrata al database e il risultato reso disponibile all’applicazione.

Il software può lavorare in tre modalità:

  • Simulation Mode (IDS)
  • Blocking Suspicious Commands (Database IPS)
  • Learning Mode
  • Active protection da query sconosciute (DB Firewall)

Come agiscono
Se l’applicazione è impostata in Simulation Mode funziona sostanzialmente come un sistema IDS (Intrusion Detection System). Tutte le query ritenute dannose vengono semplicemente loggate e poi notificate all’amministratore che può consultarle attraverso la console d’amministazione.

In modalità Blocking Suspicious Commands il sistema invece funziona come un IPS (Intrusion Prevention System). In questa modalità le query che non sono all’interno della white list del programma vengono automaticamente bloccate e, il programma, restituisce un risultato nullo all’applicazione web. Altrimenti, se la query è considerata non maligna, viene eseguita. Durante questa modalità però possono essere generati falsi positivi o falsi negativi.
Per evitare i problemi dovuti alle due modalità sopra citate è stata sviluppata la modalità Learning mode durante la quale il programma impara tutte le query che l’applicazione web può inviare e le aggiunge alla white list. Una volta finita la modalità d’apprendimento si deve ripassare ad una delle due modalità citate in precedenza, in modo da avere un livello di protezione piu’ adeguato.
Si può inoltre attivare la protezione dalle query sconosciute, questa opzione permette di bloccare in automatico i comandi sconosciuti che giungono GreenSQL. Per poter calcolare se un comando è illegale o meno si avvale di un motore di pattern matching che lavora in due modalità. La prima controlla che la query inviata non vada ad eseguire comandi amministrativi (ad esempio GRANT o REVOKE, o comandi che vanno a modificare la struttura del database). L’altra invece calcola il rischio di una query basandosi su dei metodi euristici, se il rischio è sufficientemente alto la query viene bloccata in automatico.

Calcolare il rischio delle query
GreenSQL puo’ calcolare il rischio di ogni query ; essenzialmente, questo è un sottosistema di rilevamento delle anomalie. Dopo che il rischio è calcolato, GreenSQL è in grado di bloccare la query o semplicemente creare un messaggio di avviso (questo dipende dalla modalità attivata). Ci sono una serie di operazioni euristiche che GreenSQL utilizza per il calcolo del rischio. Per esempio, il rischio di query è aumentato da:

  • L’accesso alle tabelle sensibili (gli utenti, gli account, le informazioni di credito)
  • Commenti all’interno di comandi SQL
  • Una stringa password vuota
  • Una ‘OR’ all’interno di una query
  • Un’espressione SQL che restituisce sempre vero

Per trovare anomalie, GreenSQL usa il proprio lexer ( o analizzatore lessicale ) cercando SQL tokens (costituiti da identificatori, costanti e parole chiave).

Per maggiori chiarimenti e per avere una guida ufficiale non esitate ad andare sul sito ufficiale di GreenSQL FW