Servizi digitali, sviluppo software personalizzato e consulenza:
Networking
Fornisco servizi digitali e supporto nella progettazione e manutenzione di infrastrutture di rete (LAN, WAN, WLAN), infrastrutture di supporto (DNS, DHCP, router, firewall, VPN, ecc), sistemi per l’erogazione servizi ( posta elettronica, aree di condivisione dati, web server, proxy/reverse proxy server, application server, videochat per lavoro collaborativo, condivisione archivi digitali, ecc.).
Nella progettazione di infrastrutture di reti impiego diversi protocolli layer 2 (STP, RSTP, 802.1q, 802.1ad, 802.11 a/b/g/n/ac, Hiperlan, ecc.) e layer 3 (RIP, OSPF, BGP, ecc.) per l’instradamento dei pacchetti di comunicazione dati. Ottimizzo la struttura della rete fisica tenendo conto dei limiti fisici e dei protocolli da impiegare. Realizzo reti definendo vari livelli di ridondanza, affidabilità e sicurezza tenendo conto del canale trasmissivo impiegato come il doppino telefonico, il cavo ethernet, il mezzo wireless e la fibra ottica. Una corretta progettazzione od implementazione consente di prevenire problemi sulla sicurezza, affidabilità e disponibilità delle trasmissioni di dati.
Nella progettazione di infrastrutture di supporto configuro vari servizi come DNS, DHCP, regole di firewall su dispositivi embedded come Cisco, HP, Mikrotik, Ubiquity, ecc. o di tipo software come iptables di GNU/Linux.
Nella progettazione di servizi di erogazione configuro ed ottimizzo server web/reverse proxy come Apache2, NGinx, HAproxy, pound ed altri. Implemento sistemi di autenticazione federata con IDP ed SP Shibboleth, implementando anche moduli ad hoc per integrare l’autenticazione federata con applicativi non progettati a questo scopo. Configuro Web Application Firewall seguendo le raccomandazioni OWASP, strumenti di anti-ddos come fail2ban e tanti altri. Configuro ambienti di condivisione dati come Server NFS, server Owncloud, server Nextcloud, Server Samba. Configuro ambienti di autenticazione centralizzati come Domain controller, server Kerberos, Server Radius, Server LDAP. Configuro servizi di posta elettronica con postfix con personalizzazione di antispam, antivirus, firme DKIM, ecc. Configuro server Voip come Asterisk, freePBX, Kamailo, ecc. Una corretta configurazione e progettazione degli ambienti deputati all’erogazione di servizi consente di calibrare correttamente il livello di affidabilità, disponibilità, resilienza e sicurezza.
Nell’attività di manutenzione mi avvalgo di strumenti di monitoraggio configurati ad hoc per rilevare e prevenire malfunzionamento o comportamenti anomali. Impiego strumenti open source come Nagios, check-mk, Zabbix, ecc. Una corretta configurazione dei sistemi di monitoraggio consente di prevenire effetti negativi causati sia da anomalie hardware che software. L’impiego degli strumenti di monitoraggio consente di avere un punto di osservazione esterno al sistema controllato e fornire diverse modalità di allerta o segnalazione ( pannelli, email, sms, ecc)
In tutte le soluzioni impiego strumenti open source. Adottando prodotti o soluzioni open source si raggiunge un alto grado di libertà nella personalizzazione del progetto. L’impiego di soluzioni open source, a fronte di un maggiore sforzo iniziale, fornisce enormi soddisfazioni sia in termini economici al cliente.
Cos’è il Networking
Con il termine networking possiamo intendere, banalmente, una connessione di rete.
Alla base, a livello fisico, abbiamo una connessione di elementi (host, end point, ecc.) attraverso reti fisse o wireless, che ha motivo di esistere solo se ha lo scopo di erogazione un servizio:
– transito/instradamento di dati/informazioni (ISO/OSI, TCP/IP, routing statico, dinamico);
– esposizione di servizi di base (dns, dhcp, time server, firewalling, filtering, ecc.
– esposizione di servizi più specifici (siti web, applicativi, ecc.).
Il networking è quindi un mix di tecnologie e concetti che non possono essere presi singolarmente, ma nel loro insieme contestualizzati e integrati nel sistema preso a riferimento.
Approfondimento
Virtualizzazione
Impiego diversi strumenti per realizzare ambienti virtuali come VMware, Xen, Proxmox, KVM, docker, UML, LXC e tanti altri che consentono di implementare soluzioni a diversi gradi di complessità e granularità. La virtualizzazione la impiego per perseguire il concetto del divide et impera.
Realizzo ambienti virtuali con vari hypervisor. Ottimizzo l’installazione e la configurazione dell’hypervisor tenendo conto del server fisico sul quale deve andare in esecuzione. Predispongo l’infrastruttura di rete virtuale, interconnettendola con le interfacce di rete fisiche del server e gli apparati di rete a cui è collegato quest’ultimo. Predispongo dei template di server virtuali ottimizzandoli al fine di ridurre il sovraccarico per l’hypervisor. Realizzo l’implementazione degli ambienti di virtualizzazioni sia su server in house (presso la sede del cliente) che localizzati in datacenter di terze parti. Nel caso di installazioni in datacenter di terze parti impiego tutte le tecnologie che vengono offerte dai vari provider. Un esempio di tecnologia molto utile è la vrack del provider OVH che consente di realizzare reti private tra server fisici dislocati nel medesimo datacenter o in aree geografiche diverse. Questa modalità di lavoro consente di ottenere i seguenti risultati
- ridondanza dei dispositivi e dei servizi;
- estendibilità e/o scalabilità dei sistemi;
- ridistribuzione geografica dei sistemi;
Mantengo ambienti virtuali predisponendo una adeguata configurazione del pannello dei gestione. Configuro l’ambiente al fine di consentire l’accesso in manutenzione attraverso i vari strumenti resi disponibile dall’hypervisor (ssh, https, remote Desktop) sempre in sicurezza, tramite VPN o limitazioni di accessibilità. Il monitoraggio degli ambienti virtuali avviene con una combinazioni di strumenti, quelli propri dell’hypervisor e di altri estranei alla piattaforma di virtualizzazione, consentendo una sovrapposizione di osservazione ma anche una più dettagliata valutazione del comportamento dell’ambiente di virtualizzazione. La manutenzione comprende anche l’aggiornamento dei componenti software dell’ambiente operativo ove viene eseguito l’hypervisor al fine di garantire risoluzioni di bug di funzionamento che di sicurezza. Questo attività consente di verificare:
- disponibilità dei servizi;
- resilienza a fenomeni avversi;
- resilienza ai cambiamenti.
Eseguo backup di ambienti virtuali sia di tipo incrementale che integrale. Adeguo la strategia di backup da implementare a seconda dell’ambiente di virtualizzazione impiegato. Impiego sia strumenti offerti dall’ambiente di virtualizzazione che strumenti o script calibrati per l’infrastruttura definita. L’attività di backup viene sempre monitorata e validata, sia con l’impiego di strumenti di verifica sia con prove di ripristino manuale come previsto in tutte le procedure di qualità come la ISO 27001. I backup vengono sempre replicati al fine di poter garantire una tutela dei dati e del sistema in caso di compromissioni gravi dell’ambiente ove risiede l’ambiente di virtualizzazione. Questa modalità operativa consente di poter perseguire obiettivi come:
- disponibilità di servizi;
- disaster recovery;
Eseguo ripristini di ambienti virtuali sia sul nodo ove è stata definita l’ambiente originale sia in nodo diversi. Questa attività è perseguibile con l’implementazione del lavoro di backup. Il ripristino può essere sia totale che parziale e può essere eseguito sia da backup integrali o incrementali. Con queste attività si riesce a perseguire i seguenti obiettivi:
- disponibilità servizi;
- disaster recovery;
- resilienza ai cambiamenti.
Tra i servizi digitali la virtualizzazione consente anche di atomatizzare l’esecuzione di applicazioni impiegando strumenti come docker, UML o LXC. Questo aspetto consente di installare ambienti di produzione immuni da variabili esterne dipendente dall’ambiente operativo ove risiede. Questo modalità operativa consente di poter realizzare servizi in poco tempo e con elevato grado di affidabilità perchè viene ridotto al minimo gli errori associati al fattore umano.
Cos’è la Virtualizzazione
Con il termine virtualizzazione si intende un’astrazione di elemento fisico.
Un esempio di astrazione fisica si ha quando invece di voler impiegare un server fisico si utilizza un server virtuale, che è in esecuzione sempre su un server fisico, per erogare un determinato servizio.
Una tecnologia utile da impiegare per suddividere elementi hardware e software in elementi minimali ed atomici che vengono eseguiti in ambienti di virtualizzazione (Vmware, Xen, kvm, proxmox, docker, UML, LXC, ecc.).
In sostanza un mix di componenti atomici che, come tanti mattoncini elementari, consentono di poter definire un sistema complesso con il vantaggio di fornire maggiore flessibilità per perseguire gli obiettivi di disponibilità, resilienza, scalabilità, sicurezza.
Approfondimento
DBMS
Progetto e realizzo archivi relazionali adatti a diversi scopi, dal semplice gestionale, al sistema di raccolta informazioni da impiegare per motivi statistici o di analisi (OLAP).
Il database può essere gestito con diversi strumenti come Oracle, Mysql, MariaDB, Postgress, ecc. Ogni strumento ha delle peculiarità e garantisce diversi livelli di efficienza e sicurezza.
Progetto archivi relazionali seguendo le best practice impartiti nei corsi di Basi di Dati e di Ingegneria del Software, come la normalizzazione. Eseguo attività di ottimizzazione della struttura, degli indici al fine di consentire attività di query più performanti. Questa attività consente di poter aver un archivio di dati performante nei termini di risposta alle interrogazioni ed alle variazioni ed una maggiore scalabilità nell’evoluzione del contenuto.
Eseguo analisi di valutazione dell’efficienza delle query consentendo di individuare individuare le varie ottimizzazioni applicabili con l’impiego di indici, variazioni di variabili di ambiente.
Eseguo un corretto dimensionamento in termini di spazio delle partizioni e della tipologia di filesystem da impiegare tenendo conto del sistema operativo ove è in esecuzione il servizio DBMS e in quale ambiente di virtualizzazione è in esecuzione. Questa attività ha un peso decisivo sulle prestazioni a livello applicativo.
Configuro meccanismi di replica master slave e master master, sia impiegando strumenti nativi del DBMS sia strumenti esterni come DRDB, Corosync, Pacemaker, Hearbeat, Ceph, ecc. Nei casi in cui è necessario elevare il grado di disponibilità ed affidabilità del servizio DBMS sono necessari impiegare queste tecnologie e metodologie.
Ripristino database corrotti, tramite strumenti specifici ed impiegando i log transazionali impiegati per questo scopo.
Cos’è un DBMS
Il DBMS è un database management system, cioè una sistema software per la gestione di dati strutturati in forma relazionale.
Il DBMS è uno strumento importante che consente di ottenere enormi benefici nello sviluppo di applicativi sicuri, scalabili ed efficienti.
Il DBMS impiega un linguaggio specifico, SQL (Structured Query Language), per eseguire attività di definizione delle strutture dati (DDL: Data Definition Language) e manipolazione dei dati (DML: Data Manipulation Language).
Approfondimento
Cybersecurity
Nei miei servizi digitali perseguo sempre l’obiettivo della sicurezza. Con l’introduzione del RGPD/GDPR si sta sempre più diffondendo il sentire comune di mettere in sicurezza i propri sistemi e programmi. Questa strada è perseguibile in vari modi uno dei quali è l’attività di attacco mirato sui propri sistemi alla ricerca di vulnerabilità. In pratica svolgendo attività di hackeraggio sui propri sistemi si riesce ad acquisire sempre più dimistichezza con le tecniche di intrusione e si riesce a valutare la sicurezza dei propri sistemi. Per eseguire queste attività è necessario costantemente tenersi aggiornati ed impiegare tool ideati appositamente a questo scopo. Adotto ove possibile strumenti open source come NMAP, OWASP ZAP, Nikto, atk6-dnsdict6, msfconsole, kali-linux, ecc.
Eseguo attività di analisi di vulnerabilità sia in modalità black-box che in modalità white-box.
La modalità black-box prevede l’individuazione di tracce presenti o rilevabili su Internet mediate antività di fingerprint sia passive che attive. Questo tipo di attività viene impiegata quando si vuole simulare un’attività di hackeraggio di tipo malevolo. Questa attività mi viene richiesta non solo per valutare la vulnerabilità dei propri sistemi ma anche quella dei propri fornitori, al fine di valutarne la bontà del servizio offerto.
La modalità white-box invece prevede descrizione del sistema da parte del cliente. A seguito di ulteriori attività di verifiche e scansioni viene illustrato un report di criticità e miglioramenti adottabili.
Cos’è la Cybersecurity
Per cybersecurity si intende l’insieme delle tecnologie e metodologie da impiegare per mettere in sicurezza, sotto il profilo informatico i propri sistemi IT e non solo.
La cybersecurity è un concetto così ampio, che credo sia impossibile, per una solo individuo poter padroneggiare con tutte le tecniche di difesa presenti e future. Però padroneggiare questa materia e mantenersi aggiornati in questo contesto consente di avere un’arma in più per proteggersi.
Approfondimento
Sviluppo Software
Sviluppo software gestionali non fiscali di tipo enterprise multi-tier, per offrire ai clienti strumenti personalizzati, cuciti sui propri processi operativi, non disponibili sul mercato.
Impiego una strumento di proprietà innovativo per la produzione di applicativi web-based che consente uno sviluppo software celere e facilmente manuntenibile. Gli applicativi realizzati impiegano il linguaggio di programmazione Java e sono basati su tecnologie/framework open source come Spring 5, Hibernate, Thymeleaf, Bootstrap 4.0.
Grazie alla metodologia impiegata, che si basa sul manifesto Agile, e all’impiego di un strumento di supporto alla generazione e validazione del codice prodotto sviluppo software di qualità, facilmente manutenibili ed integrabili nel tempo. Inoltre la realizzazione e manutenibilità avviene in tempi brevi contenendo i costi per il cliente.
Nello sviluppo software di prodotti software ad hoc, viene sempre implementata la compliance al GDPR e, ove applicabile, le best practice previste dallo standard ISO 27001 e dalle raccomandazioni AGID.
La metodologia di sviluppo software consente di realizzare velocemente il prototipo, di modificarlo facilmente durante gli iter di analisi → implementazione → verifica con il cliente, per ottenere un prodotto adeguato alle specifiche e alle reali esigenze.
Nell’arco di poche settimane può essere rilasciato un prodotto software funzionante ed operativo, facilmente aggiornabile ed integrabile.
Nello sviluppo software vengono impiegati tutti gli strumenti che consento uno sviluppo controllato del software tramite servizi realizzati e configurati rigorosamente all’interno dell’azienda come Server Git, Server Maven, ambienti di testi interni, Server di tracciamento bug e attività.
Cos’è lo Sviluppo Software
Per Sviluppo Software si intende la realizzazione di un programma che svolge un determinato lavoro al fine di raggiungere un determinato scopo/obiettivo.
Quindi un programma non è altro che fusione o combinazione di tanti algoritmi.
Didatticamente un Algoritmo è una sequenza di passi finiti di azioni che portano alla definizione di calcolo/valutazione partendo da determinati informazioni di ingresso.
Un programma essendo una fusione o combinazione di Algoritmi consente di raggiungere un obiettivo che è un combinato disposto dei vari algoritmi di cui è composto.
L’arte dello Sviluppo del Software può essere espressa in vari modi:
– individuando modelli comuni di risoluzione dei problemi (Design Pattern)
– impiegando modelli di implementazioni come quello a cascata, evolutivo, a spirale, Agile, ecc
– impiegando linguaggi di modellazione come UML, diagrammi E-R, IFML, ecc
– impiegando diversi linguaggi di programmazione come Assembler, C, C++, Fortran, Pascal, Cobol, Java.
Approfondimento
Consulenza informatica
Grazie alla mia esperienza di vari decenni nel settore della sistemistica, dello sviluppo del software e della sicurezza sono in grado di fornire servizi digitali avanzati e varie tipologie di consulenza informatica a coloro che hanno la necessità di trovare una soluzione ad un problema o una necessità.
La consulenza richiede la capacità di interagire con diversi attori che hanno skill e punti di vista anche non tecnici.
Negli anni ho affrontato diverse sfide che mi hanno coinvolto in attività di consulenza informatica in vari ambiti come come ISO 27001, GDPR, sicurezza, sviluppo software, sviluppo piattaforme di lavoro collaborativo, integrazione di sistemi eterogeneri, ecc..
Aiuto sempre il cliente a trovare una soluzione alle sue esigenze tenendo sotto controllo il budget preso a riferimento, per offrire servizi digitali adatti alla tipologia di azienda.
Consulenza informatica
Per Consulenza informatica si intende (in inglese “IT Consulting” o “Business and Technology Consulting”) una forma, ramo o settore della consulenza che consiste nella prestazione professionale, di una o più persone esperte nel settore dell’informatica aziendale, che fornisca consigli a un’impresa su come utilizzare al meglio le tecnologie dell’informazione (ICT) al fine di raggiungere determinati scopi o obiettivi aziendali. Oltre alla mera consulenza informatica il professionista, il più delle volte, progetta, implementa e amministra il sistema informatico (sistemista) oppure si adopera nello sviluppo software (analista funzionale, analista programmatore, programmatore e tester). Un altro argomento di lavoro riguarda gli aspetti hardware, di rete o di apparati e sistemi di telecomunicazione.
Approfondimento