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.

5G vantaggi e pericoli

Mobile internet and hacking concept with 5G

E’ ormai un’argomento caldo quello del 5G, e quasi sicuramente, nell’immaginario collettivo si tratta di un’ altro potenziamento per la rete mobile che ci dovrebbe permettere di scaricare video, documenti e musica più velocemente sui nuovi smartphone.

Ma se così non fosse???.

Ad un’analisi piu’ attenta dobbiamo meglio specificare che il 5G non serve realmente agli smartphone. Certo, verrà usata anche come infrastruttura per la comunicazione mobile al posto del 3G e in parte del 4G, ma il vero punto della questione è altrove. La forza di questa nuova implementazione avra’ altre caratteristiche in quanto, mentre il 3G e il 4G sono le tecnologie che ci hanno portato Internet sui nostri smartphone, creando per la prima volta una connessione tra gli uomini e la Rete, in qualsiasi momento H24, il 5G è pensato invece per connettere le macchine ad Internet.

Con l’avvento del 5G, la rete mobile avrà la potenza per gestire milioni di piccoli dispositivi (IoT),  sempre connessi,  che genereranno una ulteriore mole di dati che andranno anch’essi trasferiti a centrali di analisi nel cloud. Non è un caso che le sperimentazioni attualmente in progetto siano proprio improntati nel rendere hi-tech le attività industriali molto complesse.

Ma le grandi promesse dell’avvento del 5G sono accompagnate anche da grandi sfide. La piu’ grande tra le promesse fatte dal 5G e’ quella di poter rendere tutto super-connesso, aumentando le prestazioni, i rendimenti ed il controllo; tutto bello ed interessante ma esponenzialmente piu’ pericoloso dal punto di vista di possibili attacchi hacking.

Attacchi, fraudolenti, compiuti tramite “malware” o “ransomware” di ogni tipologia ormai non si contano e riempiono le pagine delle cronache di citta’ di tutto il mondo, si va da intere amministrazioni cittadine bloccate con richiesta di riscatto, porti o aeroporti, ospedali etc…. tutti fatti accaduti negli ultimi due anni in citta’ importanti americane come europee ed i danni sono incalcolabili, sia per gli affari che per la sicurezza delle persone.

Immaginatevi un’ ospedale bloccato, con strumentazioni per esami clinici di ogni tipo fermi e, cartelle cliniche impossibili da aprire perche’ digitali e quindi crittografate del ransomware, etc… etc…., peggio di un film di Hitchcock.

Tutto questo perche’ mettere online tutte le funzioni chiave di una struttura significa dover trovare un modo per proteggerle sia da chi vuole prenderne il controllo, sia da chi vuole semplicemente bloccarle.

Vi ricordate quel caso del pilota della Germanwings che fece schiantare l’aereo? Dopo quel tragico evento qualcuno ipotizzo’ di mettere su ogni aereo un sistema di controllo da terra che potesse permettere di prendere il totale controllo di un aereo per farlo atterrare in sicurezza. Certo l’intento e’ piu’ che giusto, ma il problema sarebbe dover garantire al 100% che nessuno possa inserirsi in un sistema del genere per, invece, creare incidenti disastrosi o minacciarli in cambio di denaro. Ve lo immaginate essere su un’aereo che non puo’ atterrare perche’ gestito da terra da qualche criminale che aspetta di essere pagato, con tutti i passeggeri in ostaggio ed il pilota tagliato fuori da ogni possibilita’ di controllo?? Beh un vero e proprio incubo.

Purtroppo, la messa in sicurezza non è semplice e, nonostante il fatto che con l’arrivo del 5G ci si dovrebbe poter liberare di alcuni vecchissimi sistemi come l’ SS7, una tecnologia usata da 40 anni dagli operatori per gestire la sicurezza delle connessioni ma che non usava la crittografia o ancora il seppur piu’ moderno Diameter, che non sembra essere all’altezza del compito, non basteranno, per lo meno nell’immediato, a garantire completamente l’alto tasso di sicurezza che servira’ per tenere al sicuro i dati di societa’, enti e privati (pensate alle case domotiche).

Molti esperti hanno pubblicato test e studi, lamentando di come si stia dando troppo valore alla gestione di questi dati ed alla loro sicurezza semplicemente perche’ saranno crittografati, ma anche la crittografia ha mostrato molte lacune, e sono moltissimi gli eventi negativi che impattano su errori di programmazione e/o l’implementazione dell’uso di sistemi crittografati in ogni ambito, commerciale e non.

Si spera che per quando il 5G sarà una realtà affermata, le cose saranno state implementate a dovere.

Ma la sicurezza informatica non è l’unico punto critico per il 5G. Anche la semplice copertura del segnale potrebbe rappresentare per gli operatori uno scoglio importante. Infatti, le frequenze usate, sono ideali per quello che riguarda il trasferimento ad altissima velocità dei dati, ma poco adatte agli ambienti “affollati” di ostacoli come quelli cittadini. E’ proprio a causa del numero elevato di antenne che serviranno ad implementare la struttura del 5G, per coprire in maniera efficace una città, che i produttori stanno preparando sistemi che possono essere incorporati ovunque, dai lampioni alle pareti degli edifici, passando per semafori e qualsiasi altro possibile “punto di appoggio”.

Il problema della scarsa penetrazione e capacità di rimbalzo delle onde radio usate dal 5G porterà a costi molto elevati nella creazione dell’infrastruttura che dovrebbe far diventare smart le nostre città.
Gli alti costi potrebbero ulteriormente lievitare anche a causa di dispute geo-politiche come quella tra il governo statunitense e l’azienda cinese Huawei, che al momento è una delle aziende più avanti nella sperimentazione 5G e nella produzione dell’hardware necessario a implementarlo. Senza di loro, o con una forte limitazione della
loro presenza negli Stati alleati degli Stati Uniti, l’adozione del 5G sarà sicuramente rallentata.

Probabilmente si dovrebbe parlare anche dei possibili rischi inerenti alla salute nell’utilizzo delle frequenze necessarie all’uso di questa implementazione tecnologica ma qui il discorso dovra’ attendere parecchio tempo e molti studi futuri, dei quali noi saremo le cavie.

Staremo a vedere !!!

Ansible – automazione IT e Configuration Management (II parte)

Ansible + Vagrant Environment

Ansible + Vagrant Environment

 

 

 

 

 

 

Nel primo articolo “Ansible per l’automazione IT ed il Configuration Management” abbiamo descritto le caratteristiche principali di questo interessante prodotto per il Configuration Management. In questo secondo articolo descriveremo con degli esempi come utilizzare nel concreto Ansible.

Per preparare il nostro ambiente di lavoro sfrutteremo un’altro software, che rappresenta, anch’esso una delle grandi novita’ del Web degli ultimi mesi come Vagrant, di cui abbiamo parlato nell’articolo “Virtualizzazione e provisioning senza sforzo“.

configuriamoci l’ambiente Vagrant:

$ vagrant box add pre http://files.vagrantup.com/precise32.box
$ vagrant init precise32
$ vagrant up

a seguito dell’ultimo comando, vedremo dei messaggi come questi:

Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise32'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
Guest Additions Version: 4.2.0
VirtualBox Version: 4.3
[default] Mounting shared folders...
[default] -- /vagrant

Vagrant ha quindi scaricato e creato per noi una macchina virtuale Ubuntu Precise (32bit). Scorrendo i messaggi ci sono due cose importanti da notare: la prima è che il traffico sulla porta 2222 del nostro pc locale sarà inoltrato alla porta 22 della macchina virtuale; la seconda è che l’utente “vagrant” sulla macchina remota può connettersi con la password “vagrant” ed ha già i privilegi per diventare root con sudo. Aggiorniamo quindi l’inventario delle macchine che decidete di coinvolgere modificando il file /etc/ansible/hosts

Dopo aver preso confidenza con Vagrant iniziamo la configurazione dell’ambiente per Ansible, iniziando ad usarlo per automatizzare i compiti di ogni giorno.

Configuriamo il file /etc/ansible/hosts tramite comando:

# sudo bash -c 'echo [web] >> /etc/ansible/hosts'
# sudo bash -c 'echo 127.0.0.1:2222 ansible_ssh_user=vagrant ansible_ssh_pass=vagrant >> /etc/ansible/hosts'

Verifichiamo che ansible sia in grado di leggere correttamente i parametri inseriti nel file hosts usando il seguente comando:

# ansible -m ping all
127.0.0.1 | success >> {
"changed": false,
"ping": "pong"
}

Ansible facts
come possiamo essere sicuri che la macchina a cui ci stiamo connettendo sia quella giusta ? Diamo un’occhiata ai “facts”, ovvero a tutte le informazioni che Ansible raccoglie…

# ansible web -m setup | less

otteniamo cosi’ una serie di dati in formato JSON tra cui notiamo che il nostro nuovo server ha come hostname ‘localhost’.
A titolo didattico scriveremo un playbook per installare un webserver nginx sul nuovo server.

Ora apriamo un editor per iniziare a scrivere il nostro playbook che si chiamera’ nginx.yml :

--- PLAYBOOK ottimizzato su Centos Linux
- name: installa NGINX e avvia il servizio
   remote_user: root
   sudo: yes
   hosts: web
   tasks:
   - name: installazione Nginx
     apt: pkg=nginx state=installed update_cache=true
     notify:
     - start nginx
   handlers:
     - name: start nginx
     service: name=nginx state=started

Come possiamo notare nel playbook abbiamo editato una lista di task, uno per ogni “step” del nostro compito.
Se stiamo usando virtualbox come hypervisor, dobbiamo aggiungere una riga al file (bastera’ solo decommentarla) di configurazione di vagrant perché attivi il forwarding della porta 80 della guest sulla porta 8080 del nostro pc.

(vedi https://docs.vagrantup.com/v2/networking/forwarded_ports.html)

config.vm.network "forwarded_port", guest: 80, host: 8080

e dare il comando per ricaricare la virtual machine con la nuova configurazione:

vagrant reload
[default] Attempting graceful shutdown of VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 80 => 8080 (adapter 1)
[default] Booting VM...
[default] Machine booted and ready!

Ora possiamo lanciare il playbook

# ansible-playbook nginx.yml

PLAY [installa NGINX e avvia il servizio] *****************************

GATHERING FACTS ***************************************************************
ok: [127.0.0.1]

TASK: [installazione Nginx] ***************************************************
changed: [127.0.0.1]

NOTIFIED: [start nginx] *******************************************************
changed: [127.0.0.1]

PLAY RECAP ********************************************************************
127.0.0.1 : ok=3 changed=2 unreachable=0 failed=0

sulla macchina virtuale potrete visualizzare, dal syslog, quello che sta accadendo:

ansible-apt: Invoked with dpkg_options=force-confdef,force-confold upgrade=None force=False package=[‘nginx’] purge=False state=installed update_cache=True pkg=nginx default_release=None install_recommends=True deb=None cache_valid_time=None
Mar 19 15:59:33 precise32 ansible-service: Invoked with name=nginx pattern=None enabled=None state=started sleep=None arguments= runlevel=default

ora sulla macchina virtuale mi ritrovo con l’nginx attivo e rispondente all’indirizzo 127.0.0.1:8080

Welcome to nginx!

Come gia accennato nel primo articolo la curva di apprendimento di questo ottimo strumento di Management dei server e’ davvero bassa e funzionale, ed in poco tempo si e’ in grado di gestire un ambiente ad alto volume di macchine.

Questa è solo una semplice introduzione al mondo di Ansible, e prima di concludere vi faccio inoltre presente che Ansible non è solo usufruibile da linea di comando ma presso il sito ufficiale è disponibile una web dashboard che permette di controllare i job, avere report, statistiche e così via.

Esiste anche Ansible Galaxy , che è invece un repository comunitario di “ricette”, playbooks, task moduli e tutto quello che si può immaginare … Quindi se doveste installare e configurare software come tomcat, oracle, mongodb, jenkins, drupal, rabbitmq e tanti altri, troverete già tutto pronto.
Di sicuro una base di partenza molto comoda per le vostre personalizzazioni!

Se tutto ciò non bastasse ancora, Ansible ha una API estremamente chiara e flessibile per scrivere moduli custom in Python o qualsiasi altro linguaggio, un esempio concreto

#AnsibleConfigurationManagement

Esistono alternative a Google

Motori di ricerca alternativi a Google

Motori di ricerca alternativi a Google

Ecco alcuni dei migliori motori di ricerca altenativi

Una domanda che prima o poi ci siamo fatti tutti ogni volta che apriamo il nostro browser preferito, e vediamo sempre quel logo… “Esiste un’ alternativa a google?”…Beh! ovviamente si, le alternative ci sono, molte e sono anche ben funzionanti.

Partiamo quindi con la nostra classifica :

  1. Ixquick: motore di ricerca che garantisce la privacy, disponibile anche in italiano. Interessante anche l’idea di fornire un proxy direttamente nella pagina dei risultati infatti appare un link proxy affianco ad ogni link cliccandoci è possibile visitare il sito dietro un proxy web, ottimo anche per agirare le censure dei vari governi idea carina anche se purtroppo non si possono usare i form poichè non registrando l’ip si potrebbe usare il servizio per fare danni in giro per il web, i risultati forniti dal motore di ricerca sono in linea con quelli dei concorrenti.
  2. GoodSearch: non solo i suoi risultati sono ottimi (powered by Yahoo) ma permette anche di fare beneficenza, semplicemente usando il loro motore, infatti parte degli introiti pubblicitari generati dal motore vanno in beneficenza, il sistema è molto semplice, ma prima di fare una ricerca dovrete scegliere una causa a cui donare, ed essendo solo in inglese dovrete cercare in lingua inglese.
  3. Bing: il principale concorrente di google, simbolo dell’inizio della rincorsa di Microsoft verso Google, i risultati sono ottimi e la ricerca video… beh è assolutamente da provare.
  4. DuckDuckGo: un motore di ricerca indipendente che si è creato una sua nicchia di utenti grazie alle garanzie sulla privacy che offre, il motore dice di non tracciare nulla non registrare ip ne ricerche, il tutto per salvaguardare la privacy dei suoi utenti.
  5. Quintura: probabilmente uno dei più famosi e storici concorrenti di google si trattava di un Visual Search, in cui una volta cercato il termine, vi diceva cos’ altro avreste potuto cercare su quell’argomento. Esiste pero’ , ad oggi, la versione per bambini molto utile da impostare come motore di ricerca sicuro per i più giovani.
  6. Wolframalpha: motore intelligente molto famoso in rete, in quanto non cerca sul web ma mette a disposizione le informazioni statistiche del web. Se cerchiamo informazioni su un animale, uno stato oppure dati statistici ecc. Wolframalpha fa al caso nostro.
  7. LyGo: il motore di ricerca secondo Lycos, ben fatto sia dal punto di vista tecnico che per quanto riguarda i risultati.
  8. IceRocket: qusto motore è davvero ben studiato, in quanto scandaglia in continuazione sia i social network che i blog di tutto il mondo.
  9. Mojeek: anche questo è un motore di ricerca in stile google anche se non sempre i suoi risultati sono soddisfacenti ma c’è da dire che a volte cercare delle informazioni con motori diversi aiuta a trovare les cose, come si dice “quattro occhi sono meglio di due”.
  10. Kartoo: intreccio tra una directory e un motore di ricerca, il sito è ben fatto ma i risultati non sono sempre il massimo.

Ovviamente questa lista non e’ completa e, quasi quotidianamente, ne vengono pubblicati di nuovi quindi non esitate a suggerirne qualcuno di vostro gradimento, grazie e buona ricerca.

 

#MotoridiricercaAlternativiaGoogle

Firewall apriamo un passaggio segreto

fwknop_spaPort-knoking – II Episodio

Poco tempo fa abbiamo affrontato il concetto di sicurezza utilizzando la tecnologia del port-knoking . Oggi affronteremo una seconda metodologia legata al port knoking.

Facciamo un passo indietro considerando il firewall il miglior sistema di difesa in nostro possesso. Il port-knoking e’ in pratica una tecnica di autorizzazione che agisce sul firewall e che puo’ essere realizzato con diverse metodologie; la “bussata” dipendera’ dal software di port-knoking utilizzato, ma in tutti i casi si compone di pacchetti TPC/IP appositamente forgiati dall’utente.

Le tipologie piu’ frequenti sono due:

  • sequenza affinche’ l’utente venga riconosciuto , il client deve inviare alcuni pacchetti secondo una sequenza creata al momento della configurazoine su diverse porte TCP o UDP;
  • payload tutto il necessario per il riconoscimento dell’utente e’ contenuto nel payload dei pacchetti

a) la prima tipologia e’ di facile realizzazione e utilizzo, ma e’ relativamente fragile perche’ basta uno sniffer di pacchetti per ascoltare la sequenza la sequenza inviata al server, replicarla e ottenere cosi’ l’accesso;

b) se il nostro desiderio di sicurezza e’ piu’ paranoico, allora soltanto il port-knoking basato sui payload potranno soddisfarci, inqunato questi sono al sicuro dai tentativi di replay-attack.

PARANOIA

Il mondo e’ bello ma e’ pericoloso, se questo e’ assodato anche per voi possiamo passare alla visione piu’ paranoica per provare una nuova configurazione tramite il software fwknop, un sistema di port-knoking che pone la sua forza nel criptare i payload del pacchetto di autorizzazione.

Fwknop va oltre al semplice sistema di port-knoking, esso in realta’ e’ il prototipo di una nuova tecnologia chiamata : Single Packet Authorization o (SPA) che si differenzia proprio per la possibilita’ di autorizzare l’utente utilizzando un’unico pacchetto TCP/IP.

SPA si comporta alla stessa maniera del port-knoking, solo che  invia un singolo pacchetto criptato verso il server di destinazione.
Questo comporta una migliore velocità nell’accedere al servizio che decidiamo di nascondere (esempio SSH), ed un maggiore livello di discrezione sulla rete (al contrario il Port Knocking classico può essere scambiato per un tentativo di port scanning da un IDS) e soprattutto protegge dai tentativi di connessioni replicate ( il singolo pacchetto criptato viene creato tutte le volte con valore casuale e non può essere riutilizzato!).

Fwknop è composto da un client ed un server.
Il demone fwknopd installato sul server sniffa le connesioni che arrivano sull’interfaccia di rete tramite la libreria libpcap, appena riceve dal client il pacchetto criptato e firmato con la chiave giusta abilita la connessione dell’indirizzo IP sorgente verso il servizio prestabilito (iptables).
Una volta inviato il pacchetto tramite il client fwknop si ha un lasso di tempo per stabilire la connessione verso il servizio protetto (di default 30 sec.), sfiorata questa tempistica il server chiude la connessione.

INSTALLAZIONE

sudo apt-get install fwknop-server libpcap-dev

sudo apt-get install fwknop-client

Oltre ai pacchetti vanno inserite due regole iptables fondamentali per il funziomaneto di fwknop:

iptables -I INPUT 1 -i eth0 -p tcp --dport 22 -j DROP
iptables -I INPUT 1 -i eth0 -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

La prima blocca tutte le connessioni in entrata per il servizio SSH, la seconda invece accetta le connessioni già stabilite (questa servirà quando fwknop server ci autorizzerà a collegarsi verso il demone ssh).
ATTENZIONE!!!
Così facendo chiuderete tutte le connessioni verso ssh, accertatevi di poter accedere al server
dalla console locale o abilitate la connessione a un singolo ip.
Esempio:

iptables -I INPUT -i eth0 -s 3.3.3.3 -p tcp --dport 22 -j ACCEPT

In questo caso le configurazioni sul server remoto le eseguirò da una connessione con ip 3.3.3.3 , che avra’ libero accesso.

Configurazione fwknop server/client

Immaginiamo lo scenario:

ServerSPA: 2.2.2.2

ClientSPA: 1.1.1.1

UserClientSPA: pippo

*** Geneare le chiavi sul client e prenderne nota:

pippo@clientspa:~$ fwknop -A tcp/22 -D 2.2.2.2 --key-gen --use-hmac --save-rc-stanza
[*] Creating initial rc file: /home/pippo/.fwknoprc.
[+] Wrote Rijndael and HMAC keys to rc file: /home/pippo/.fwknoprc
pippo@clientspa:~$
pippo@clientspa:~$ grep KEY /home/pippo/.fwknoprc
KEY_BASE64                  NPhe11+ORlK1Yfr4ipzW+ngQxzRt8kjI6UTDXLZYSv0=
HMAC_KEY_BASE64             SypMEUIhiAKTjeHlHoWR5dfu7hrLVvLnoIXINPbGTOowST1vUIs+tOtMc/XlKl6+JcVw7qc2jrpqmKujZxvnqw==
pippo@clientspa:~$

*** Creare sul serverspa (2.2.2.2) il file “/etc/fwknop/access.conf” inserendo le chiavi del client:

SOURCE                     ANY
REQUIRE_SOURCE_ADDRESS     Y
KEY_BASE64                  NPhe11+ORlK1Yfr4ipzW+ngQxzRt8kjI6UTDXLZYSv0=
HMAC_KEY_BASE64             SypMEUIhiAKTjeHlHoWR5dfu7hrLVvLnoIXINPbGTOowST1vUIs+tOtMc/XlKl6+JcVw7qc2jrpqmKujZxvnqw==

*** Controllare che sul file di configurazione del serverspa (2.2.2.2) sia configurata l’interfaccia di rete (WAN) corretta su cui fwknopd starà in ascolto:

[root@serverspa]# grep PCAP_INTF /etc/fwknop/fwknopd.conf
# the PCAP_INTF setting.
PCAP_INTF                   eth0;

***  Far partire il demone fwknop sul serverspa (2.2.2.2):

[pippo@serverspa]$ sudo /etc/init.d/fwknop-server start
Avvio di fwknopd:                                          [  OK  ]
[pippo@serverspa]$

Test di connessione

Controllare che il serverspa (2.2.2.2) blocchi di default le connessioni verso il servizio SSH:

pippo@clientspa:~$ nmap 2.2.2.2 -p22

Starting Nmap 6.40 ( http://nmap.org ) at 2014-04-30 23:21 CEST
Nmap scan report for 2.2.2.2
Host is up (0.0011s latency).
PORT   STATE    SERVICE
22/tcp filtered ssh

Nmap done: 1 IP address (1 host up) scanned in 1.97 seconds

*** Spedire il pacchetto SPA al serverspa ed abilitare l’accesso SSH al clientspa:

pippo@clientspa:~$ fwknop -n 2.2.2.2 -a 1.1.1.1 # in assenza di ip statico 1.1.1.1 dovrà essere sempre sostituito dall’ip pubblico assegnato dal vostro ISP.

 

*** Collegarsi dal clientspa verso il serverspa tramite ssh client entro 30 secondi :

pippo@clientspa:~$ fwknop -n 2.2.2.2 -a 1.1.1.1
pippo@clientspa:~$ ssh root@2.2.2.2
root@2.2.2.2's password:
Last login: Wed Apr 30 23:06:51 2014 from 5.5.5.5
[root@serverspa ~]#

Conclusioni

Fwknop non puo’ garantire una sicurezza assoluta (come nessun altro software) ma integrato nel vostro sistema insieme ad altri tool puo’ aumentarne notevolmente il livello.

Pro:

  • Protegge i servizi da eventuali 0-day
  • Riduce i tempi di risposta del Port Knocking
  • Cripta il playload
  • Disponibilità del client per vari dispositivi

Contro:

  • Non è utilizzabile con tutti i servizi (soprattutto quelli pubblici a cui devono accedere qualsiasi utente)
  • Devi sempre avere un client disponibile

 

*** Leggi anche Portknoking & Honeypot SSH