next   previous   contents

Protezione di un'applicazione php

 Viene ora illustrata una dimostrazione completa del funzionamento del sistema, nell'ipotetica situazione in cui esso sia utilizzato per integrare la protezione di un'applicazione php, presente su un webserver differente dalla macchina in cui e' in esecuzione servknock.
 La rete utilizzata per i test e' cosi' costituita :

 - stargazer (192.168.0.1), svolge i compiti di firewall, e portknocking server ;
 - winterfell (192.168.0.3), webserver ove risiede l'applicazione php a cui si desidera accedere ;
 - ayreon (192.168.0.4), la macchina del richiedente, dalla quale vengono inviate le sequenze di knock.

 Il webserver che risiede sull'host con indirizzo IP 192.168.0.4, non e' raggiungibile direttamente da tutte le macchine della rete, ma esclusivamente attraverso il firewall. Per accedere all'applicazione php da ayreon, e' quindi necessario connettersi a stargazer, che penserà' poi a ridirigere la connessione verso la porta 80 di winterfell.
 Tale operazione viene svolta da netfilter (il sistema di filtraggio dei pacchetti integrato nel kernel Linux) ricorrendo alla tecnica dNAT (destination Network Address Translation), che consente di modificare l'indirizzo di destinazione di un pacchetto prima della routing decision, ovvero prima che esso venga “instradato”.
 Entrando maggiormente nel dettaglio, perché possano essere forwardate le connessioni provenienti dall'indirizzo IP 192.168.0.4 e' necessario agire sulla tabella nat di netfilter, ed in particolare sulla catena PREROUTING :

iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:80 -s 192.168.0.4

 Perche' servknock possa aggiungere la precedente regola alla politica di filtraggio, in risposta ad una specifica sequenza, devono quindi essere presenti nel relativo file di configurazione le seguenti righe, dove, come si puo' notare, sono presenti anche le opzioni cmd_timeout e stop_command :

<seq>
name=apache
sequence=TCP:90,UDP:44,ICMP
tcp_flags=syn,ack,psh
seq_timeout=40
command=iptables -A PREROUTING -t nat -d 192.168.0.1 -p tcp --dport 80 -s $IP -j DNAT --to-destination 192.168.0.3:80
cmd_timeout=1800
stop_command=iptables -D PREROUTING -t nat -d 192.168.0.1 -p tcp --dport 80 -s $IP -j DNAT --to-destination 192.168.0.3:80
</seq>

 Inizialmente sulla macchina con indirizzo IP 192.168.0.1 (stargazer), vengono impostate le regole di filtraggio iniziali tramite lo shellscript fwall.sh ed avviato servknock:


 A questo punto, se si tenta di accedere da ayreon all'applicazione protetta il risultato e' il seguente :


 Tale risultato e' dovuto al fatto che attualmente nella politica di filtraggio firewall non e' presente alcuna regola per redirigere la connessione verso il webserver sul quale l'applicazione e' installata.
 Per potervi accedere e' quindi necessario che il richiedente si autentichi inviando la sequenza di knock appropriata al portknocking server (stargazer) :


 Se la sequenza di knock ricevuta risulta corretta, servknock provvede ad aggiungere alla politica di filtraggio la regola specificata all'inizio di questo paragrafo in maniera tale da consentire il forward della connessione verso il webserver con l'applicazione php desiderata :


 L'aggiunta dela nuova regola, modifica la catena PREROUTING della tabella nat, come mostrato dallo screenshot successivo in cui sono riportate le regole presenti nella catena stessa, prima e dopo il riconoscimento della sequenza di knock inviata dal richiedente :


 Grazie alla nuova regola, le connessioni provenienti dall'indirizzo IP 192.168.0.4 e dirette alla porta 80 dell'host stargazer, possono essere forwardate verso winterfell. Infatti puntando il browser all'url http://stargazer/naturalmente/admin si viene rediretti alla pagina di autenticazione dell'applicazione :


 L'applicazione php, divenuta accessibile dopo l'invio della sequenza di knock appropriata Trascorsi un numero di secondi pari al timeout specificato nel file di configurazione, servknock rimuove infine la regola di filtraggio aggiunta in precedenza alla catena PREROUTING, come mostrato dalle due successive schermate :



 In questo modo non avviene piu' la redirezione della connessione tra stargazer e winterfell, quanotmeno sino al momento in cui verra' nuovamente ricevuta la corretta sequenza di knock. dal portknocking server.


next   previous   contents