Archive for Agosto, 2009

Ago 24 2009

VPN Site to Site IPSEC con Cisco ASA 5505

Published by Lorenzo under Cisco, Firewall, VPN

Scenario

Si prenda in esame un’azienda con due sedi distinte e ad una certa distanza tra loro.

In questo caso, potrebbe non essere conveniente fare una connessione dedicata tra le due sedi aziendali, per cui, è possibile sfruttare la rete Internet per interconnettere le due sedi tra di loro; in tale situazione, si pongono ovvi problemi di sicurezza, poiché i dati transitano su una rete pubblica, e sono quindi tranquillamente sniffabili da chiunque sia un po’ troppo “curioso”. Per ovviare a questi problemi, è necessario criptare il traffico di rete fra le due sedi aziendali, anche se questo comporta un leggero calo delle prestazioni: tutte queste caratteristiche sono comprese in un tipo di connessione chiamato VPN (Virtual Private Network), che, come dice il nome, stabilisce un canale privato virtuale (tunnel) sulla rete pubblica (Internet).

Una VPN può essere di diversi tipi, in questa situazione, dovendo interconnettere tra loro due intere reti LAN distinte tra di loro, la VPN prende il nome di “site to site”; inoltre, una VPN può essere realizzata con diversi protocolli, in questo caso, utilizzeremo il protocollo IPSEC con due firewall Cisco ASA 5505 in un ambiente di test.

Ambiente di test

Per simulare la situazione prospettata nello scenario, ho creato un piccolo ambiente di test con due firewall Cisco ASA 5505, in cui, nella parte LAN, è collegato un notebook su entrambi i lati per simulare le due reti LAN (rispettivamente, LAN1 – 192.168.1.0/24 e LAN2 – 192.168.2.0/24), mentre la rete Internet è simulata utilizzando uno switch HP 1700-8, a cui sono collegate le due interfacce WAN (WAN1 – 172.16.3.1/24 e WAN2 – 172.16.3.2) del firewall. I due firewall prendono il nome rispettivamente di ASA-1 e ASA-2. Queste connessioni sono mostrate nello schema di rete in Figura 1.

Ambiente di test per VPN IPSEC con Cisco ASA 5505

Figura 1 - Ambiente di test per VPN IPSEC con Cisco ASA 5505

Cenni teorici su VPN IPSEC su Cisco ASA5505

Una connessione VPN IPSEC viene instaurata tra due apparati che supportano questo tipo di VPN in cinque passaggi. Il primo passaggio, consiste nel transito di “traffico interessante” tra i due firewall Cisco, dove per traffico interessante si intende quel tipo di traffico che deve essere protetto tramite IPSEC. A questo punto, avviene una negoziazione dei due apparati Cisco, i quali, a negoziazione avvenuta, instaurano una security association (SA) tra i due lati della VPN, utilizzando il protocollo IKE (chiamato anche ISAKMP).

La negoziazione di una SA avviene in due fasi (passaggio due e tre), Phase 1 e Phase 2: la Phase 1 stabilisce un primo tunnel che protegge i successivi messaggi di negoziazione ISAKMP, mentre la Phase 2 stabilisce il secondo tunnel che si occupa della cifratura vera e propria dei dati. Durante la Phase 2 bisogna specificare un transform set, cioè il livello di protezione richiesto per la sessione IPSEC, il quale combina un metodo di protezione ed un metodo di autenticazione; è importante che i parametri impostati con un transform set siano gli stessi su entrambi gli apparati responsabili della comunicazione sicura tra le due reti.

Quando si vuole stabilire una negoziazione ISAKMP tra due firewall, bisogna configurare su ogni dispositivo una policy ISAKMP, cioè un insieme di impostazioni che indicano come instaurare una SA; in particolare, una policy ISAKMP è composta da:

  • un metodo di autenticazione, che serve per identificare l’identità dei peer; l’autenticazione può avvenire tramite preshared key (una sorta di password) oppure con l’utilizzo di certificati;
  • un metodo di cifratura dei dati, usato per cifrare i dati in transito nel tunnel VPN;
  • un algoritmo di hash usato per assicurare l’integrità dei dati;
  • un tipo di gruppo Diffie-Hellman, che serve per scambiarsi in sicurezza la chiave segreta condivisa su un canale insicuro;
  • un limite di tempo oltre il quale la SA deve essere ristabilita (un timeout, in parole povere), che prende il nome lifetime.

Ogni firewall invia le proprie policy ISAKMP all’altro firewall, e se le policy sono le stesse su entrambi i dispositivi, allora viene stabilita la SA, anche se per avere una connessione VPN funzionante sono necessari altri passaggi, come vedremo tra poco.

Instaurata una SA, su entrambi gli apparati deve essere presente una access list (ACL) che consenta il transito del traffico interessante che dalla rete LAN1 va verso la rete LAN2 e viceversa, sfruttando il canale instaurato tramite la VPN. Definita la ACL, deve essere presente anche una mappa (chiamata crypto map) che assembla i seguenti elementi della SA instaurata con i passaggi precedenti:

  • quale traffico deve essere protetto con IPSEC (traffico interessante), definito dalla ACL di cui sopra;
  • l’indirizzo IP pubblico dell’altro lato della VPN al quale inviare il traffico tramite IPSEC (peer);
  • quale tipo di sicurezza IPSEC è richiesto per questo traffico, definito dal transform set specificato precedentemente;
  • a quale interfaccia dell’ASA va applicata la mappa.

Infine va definito un tunnel group su ognuno dei due apparati, dove per una connessione VPN Site to Site può essere sufficiente specificare il tipo di connessione (Lan to Lan) e il metodo di autenticazione.

Definiti questi parametri, e ammesso che tutto funzioni, le due reti sono connesse tra di loro a livello IP, per cui ogni protocollo che si poggia su IP può transitare tramite il tunnel e quindi viaggiare da una rete all’altra, posto che sia configurato il corretto instradamento sugli host di ogni rete.

Configurazione degli apparati

La configurazione dei parametri TCP/IP di base dei due apparati, secondo lo schema di Figura 1, è stata effettuata secondo le indicazioni fornite in un precedente articolo, per cui la diamo per scontata.

Come descritto in precedenza, per configurare la VPN IPSEC su ognuno dei due ASA bisogna impostare una ACL per consentire il traffico tra le due LAN, una policy ISAKMP, un transform set, una mappa crypto map e un tunnel group; la configurazione va effettuata su entrambi gli apparati perché il peer VPN IPSEC è unidirezionale.

Per prima cosa, impostiamo la ACL per il traffico IPSEC, in modo da abilitare il transito dalla rete LAN1 alla rete LAN2, e viceversa:

ASA-1

access-list lantolan extended permit ip 192.168.1.0 255.255.255.0 192.168.2.0 255.255.255.0

ASA-2

access-list lantolan extended permit ip 192.168.2.0 255.255.255.0 192.168.1.0 255.255.255.0

Ora configuriamo il transform set, in cui andremo ad impostare un transform set che avrà come metodo di protezione la crittografia AES 128 bit, e come metodo di autenticazione esp-sha-hmac:

ASA-1

crypto ipsec transform-set VPNTest esp-aes esp-sha-hmac

ASA-2

crypto ipsec transform-set VPNTest esp-aes esp-sha-hmac

dove VPNTest è il nome dato arbitrariamente al transform set, esp-aes è il metodo di protezione e esp-sha-hmac è il metodo di autenticazione.

Adesso bisogna configurare la crypto map, secondo questa sintassi:

ASA-1

1
2
3
4
crypto map vpnTest 1 match address lantolan
crypto map vpnTest 1 set peer 172.16.3.2
crypto map vpnTest 1 set transform-set VPNTest
crypto map vpnTest interface outside

ASA-2

1
2
3
4
crypto map vpnTest 1 match address lantolan
crypto map vpnTest 1 set peer 172.16.3.1
crypto map vpnTest 1 set transform-set VPNTest
crypto map vpnTest interface outside

La configurazione, ovviamente, è praticamente identica in tutti e due i firewall. In questo caso, vpnTest è il nome assegnato alla mappa, identico per tutte e quattro le righe di configurazione della mappa; nella riga 1, indico qual è il traffico interessante per il mio peer IPSEC, identificato dalla ACL chiamata lantolan configurata in precedenza, nella riga 2 indico l’indirizzo del dispositivo col quale voglio instaurare il peer (nel mondo reale, l’IP pubblico del firewall posto sull’altro lato da collegare tramite VPN), nella riga 3 specifico il nome del transform set indicato in precedenza, in modo da specificare le impostazioni di protezione e autenticazione, ed infine nella riga 4 indico a quale interfaccia applicare la mappa.

Nelle righe da 1 a 3, la mappa vpnTest viene identificata col numero 1, che è un numero chiamato sequence number, utilizzato in caso si debbano applicare più mappe alla stessa interfaccia in presenza di più VPN sullo stesso apparato.

Configurata la mappa, bisogna impostare le policy ISAKMP in questo modo:

ASA-1

1
2
3
4
5
6
7
crypto isakmp enable outside
crypto isakmp policy 1
authentication pre-share
encryption aes
hash sha
group 2
lifetime 43200

ASA-2

1
2
3
4
5
6
7
crypto isakmp enable outside
crypto isakmp policy 1
authentication pre-share
encryption aes
hash sha
group 2
lifetime 43200

Com’è evidente, la configurazione è assolutamente identica su tutti e due i firewall, ed a parte l’impostazione del parametro lifetime, che può essere diverso su ognuno dei firewall, tutto deve essere identico su entrambi gli apparati, pena il mancato funzionamento della VPN.

La riga 1 indica l’abilitazione di isakmp sull’interfaccia outside, la riga 2 indica la configurazione dei parametri che compongono una policy isakmp identificata dal numero 1; indicando questo comando, si aprirà una nuova modalità di configurazione che riguarda l’impostazione della policy isakmp indicata, modalità che comporta anche il cambiamento del prompt, che assume una forma del tipo:

ASA-1(config-isakmp-policy)

La riga 3 indica il tipo di autenticazione (in questo caso preshared key, il tipo più semplice di autenticazione), la riga 4 rappresenta il metodo di protezione (crittografia AES), la riga 5 indica l’algoritmo di hash, la riga 6 indica il tipo di gruppo Diffie-Hellman, mentre la riga 7 indica il timeout della connessione IPSEC, trascorso il quale la SA deve essere rinegoziata.

Infine, rimane da configurare il tunnel group in questo modo:

ASA-1

1
2
3
tunnel-group 172.16.3.2 type ipsec-l2l
tunnel-group 172.16.3.2 ipsec-attributes
pre-shared-key ChiaveCondivisa

ASA-2

1
2
3
tunnel-group 172.16.3.1 type ipsec-l2l
tunnel-group 172.16.3.1 ipsec-attributes
pre-shared-key ChiaveCondivisa

La riga 1 indica a quale indirizzo connettersi per instaurare la connessione VPN e il tipo di connessione IPSEC (nel nostro caso l2l che sta per LAN to LAN), la riga 2 indica il comando per specificare gli attributi della connessione IPSEC, che sono indicati dai comandi successivi (anche in questo caso, cambia il prompt), nel nostro caso, l’unico parametro da digitare riguarda la riga 3 che rappresenta la preshared key che consente di autenticarci sull’altro dispositivo. Penso sia ovvio a questo punto che le preshared key indicate nei due firewall debbano essere identiche.

Aggiornamento 25/08/2009

Ho dimenticato di specificare una cosa. Perché i pacchetti transitino tra una rete e l’altra, se è applicato il natting sul firewall (come accade molto spesso, visto che in genere questi firewall non si occupano solo di fare da endpoint per la VPN), è necessario che il traffico interessante non venga nattato. Per evitare questa cosa, è necessario specificare questo comando su entrambi gli ASA:

nat (inside) 0 access-list lantolan

Se tutto è andato bene, è possibile provare a testare la connettività tra i due portatili con il comando ping. Se la VPN funziona, è possibile che il primo pacchetto vada perso a causa del tempo necessario ad instaurare la SA, ma i pacchetti successivi dovrebbero arrivare correttamente; inoltre, in caso di VPN correttamente funzionante, dovrebbe accendersi il led VPN posto in posizione frontale sull’ASA 5505.

Troubleshooting di base sulle connessioni VPN IPSEC

In caso di mancato funzionamento, è possibile effettuare un po’ di troubleshooting cercando di capire per quale motivo la VPN non funziona; in questi casi, può essere utile digitare i due comandi indicati di seguito:

debug crypto ipsec
debug crypto isakmp

Con questi due comandi, in caso di problemi compaiono un sacco di messaggi sullo schermo, sta a noi isolare quei messaggi che possono realmente aiutarci a capire che sta avvenendo. Quando i messaggi diventano troppi (ed in genere succede presto), è possibile interrompere il logging a video coi comandi

no debug crypto ipsec
no debug crypto isakmp

oppure, più semplicemente, col comando

no debug all

Tenere presente che, se ci sono dei problemi, spesso accade che le policy isakmp non sono identiche su entrambi i firewall.

Può anche accadere che la configurazione dei due ASA sia corretta ma che il traffico non arrivi a destinazione, in questi casi bisogna verificare che l’instradamento dei pacchetti verso l’altra rete avvenga correttamente, impostando il corretto router negli host della rete locale oppure utilizzando le opportune route statiche.

Link di riferimento

https://www.cisco.com/web/learning/le31/le46/cln/qlm/CCNP/iscw/Site-to-Site-IPsec-VPN-Operation_3/player.html

http://www.openskill.info/infobox.php?ID=806

http://www.assint.org/content/view/71/44/

12 responses so far

Ago 23 2009

L’importanza di essere prudenti

Published by Lorenzo under Off Topic

Ho appena terminato di (ri)leggere Contact di Carl Sagan, un grandioso (secondo me) libro di fantascienza, in cui sintentizzando brutalmente, si narra del “contatto”, sotto forma di un “Messaggio” proveniente da Vega, della civiltà terrestre con una civiltà extraterrestre, che si rivelerà estremamente più progedita delle nostra; durante questo contatto, i Cinque che hanno il privilegio di “colloquiare” con la cività extraterrestre, vengono a conoscenza di un ulteriore Messaggio contenuto all’interno dei decimali del pi greco e di altri numeri trascendenti (e ciò mi fa rimpiangere di aver dimenticato in modo pressoché completo tutta la matematica studiata alle superiori), cosa che fa pensare ad un intervento “divino” nella creazione celato in una cosa fondamentale come la matematica. La protagonista principale, Eleanor Arroway, riesce infine a scoprire dove si cela il messaggio, scoprendo una prova tangibile, a differenza di qualsiasi testo sacro di una qualsiasi religione, dell’esistenza del Creatore dell’Universo.

Tra le varie cose che mi hanno colpito in questo libro, vi è il personaggio di Sol Hadden, il quale è un geniale “inventore”, che si pone e cerca di risolvere il problema dell’immortalità, prima creando una sorta di “hotel spaziale”, poiché si presuppone che a gravità zero si possa vivere più a lungo, quindi, decide di fare un viaggio interplanetario facendo “catapultare” la propria astronave da Giove fino ad attraversare, con gli anni, vari sistemi solari, proseguendo il proprio viaggio ibernato (anche grazie al fatto che nelle profondità dello spazio la temperatura è di poco superiore allo zero assoluto) e aspettando di essere “scongelato” da una civiltà extraterrestre sufficientemente evoluta. Inizialmente Hadden aveva pensato di farsi catapultare dall’orbita di Saturno, ma mentre Giove poteva essere raggiunto in due anni, Saturno avrebbe richiesto quattro anni di viaggio, perché, “se si sta inseguendo l’immortalità, bisogna stare molto attenti”.

Questo accenno alla prudenza come strategia primaria per vivere a lungo, mi ha fatto tornare in mente Lazarus Long, l’affascinante personaggio descritto da Robert Heinlein (del quale ho ancora letto poco, in verità), grande autore della golden age della fantascienza americana. Anche Lazarus Long era una persona prudente, anche se sapeva correre dei rischi quando ne valeva la pena, e ciò gli ha consentito, oltre alle proprie peculiarità genetiche, di vivere per millenni. L’analogia della necessità della prudenza, che è una cosa allo stesso tempo frutto di un intelligente ragionamento e di un ancestrale senso pratico, mi ha fatto venire voglia di mettermi a leggere qualcosa di nuovo di Heinlein.

One response so far

Ago 21 2009

Abilitare upload di file con FCKEditor su Drupal

Published by Lorenzo under CMS

Nell’articolo precedente, avevo scritto relativamente all’installazione del modulo Wysiwyg per poter integrare degli editor visuali per inserire contenuti sul CMS Drupal. In particolare, la mia attenzione si è focalizzata sull’editor FCKEditor, che avevo già usato in precedenza e col quale mi ero trovato bene.

Abilitando il modulo e quindi l’editor, si ha una buona integrazione dell’editor con il CMS, si ha però un problema, che consiste nell’impossibilità di effettuare l’upload di file e immagini con FCKEditor, poiché nell’inserimento di link e immagini non compaiono proprio pulsanti e schede per caricare i file.

Il problema è dovuto ad un misto di parametri da sistemare sia su FCKEditor, sia Wysiwyg. Per prima cosa, sistemiamo le impostazioni di FCKEditor, andando ad editare il file /root-del-sito/sites/all/libraries/fckeditor/editor/filemanager/connectors/php/config.php, dove le seguenti tre righe dovranno avere questo contenuto:

$Config['Enabled'] = true ;
$Config['UserFilesPath'] = '/sites/default/files/' ;
$Config['UserFilesAbsolutePath'] = '/percorso/assoluto/del/sito/sites/default/files/' ;

In particolare è importante la terza riga, in cui il contenuto non va lasciato vuoto, salvo ottenere un messaggio di errore quando si tenta di effettuare l’upload come indicato qui; in questa riga, va inserito il percorso assoluto della directory scelta per ospitare i file caricati dagli utenti, stessa cosa per la seconda riga dove però va inserito il percorso relativo e non quello assoluto. Dopo aver salvato il file config.php, mi ero aspettato che l’upload di file funzionasse… ma non è così. :-)

Per abilitare il caricamento di file sul nostro sito gestito con Drupal, bisogna abilitare l’upload anche nelle impostazioni di FCKEditor memorizzate nel file di configurazione specifico per il modulo Wysiwyg; editare quindi il file /root-del-sito/modules/wysiwyg/editors/fckeditor.inc e impostare in questo modo le seguenti righe (che dovrebbero comparire poco dopo la riga 100):

'LinkBrowser' => TRUE,
'LinkUpload' => TRUE,
'ImageBrowser' => TRUE,
'ImageUpload' => TRUE,
'FlashBrowser' => TRUE,
'FlashUpload' => TRUE,

Io, a dire il vero, ho lasciato le impostazioni relative a Flash a FALSE, poiché non c’è pericolo che utilizzi animazioni Flash… :-D

Dopo aver salvato il file (e magari svuotato la cache del browser per sicurezza), è possibile testare la corretta configurazione del modulo provando ad inserire un contenuto al cui interno caricare un file, e verificare se l’upload di file e immagini funziona.

Link di riferimento

Wysiwyg and fckeditor - problems with image upload and browse server

One response so far

Ago 20 2009

Installare il modulo Wysiwyg su Drupal

Published by Lorenzo under CMS

Sto continuando a giocare con Drupal, in particolare, per creare contenuti, esiste solo un editor di testi assolutamente spartano, che si riduce ad una semplice casella di testo (textarea) in cui inserire il testo del nostro contenuto. Se vogliamo utilizzare con Drupal un editor visuale più o meno evoluto, è possibile installare un modulo ad hoc, Wysiwyg, che consente di poter scaricare ed installare diversi editor visuali da integrare in Drupal.

L’installazione è molto semplice, basta installare il pacchetto dalla pagina dedicata a Wysiwyg, quindi va scompattato nella directory modules, assicurandoci che il contenuto vada a finire nella cartella wysiwyg. Se si ha a disposizione sul server web una shell Linux, basta posizionarci nella directory modules dell’installazione di Drupal e digitare i seguenti comandi:

wget http://ftp.drupal.org/files/projects/wysiwyg-6.x-2.0.tar.gz
tar -xzf wysiwyg-6.x-2.0.tar.gz

dove al posto di wysiwyg-6.x-2.0.tar.gz va indicata la versione corrente del pacchetto (che è quella indicata sopra al momento della stesura dell’articolo).

Scompattato il file, andare sul pannello di amministrazione di Drupal alla voce Amministra, Configurazione del sito, Wysiwyg, dopodiché scorrere l’elenco e scegliere l’editor visuale preferito tra quelli elencati, che sono, ovviamente, tutti supportati, quindi cliccare sul link Download a fianco del nome dell’editor e scaricare il relativo pacchetto compresso, nel mio caso FCKEditor, e scompattarlo all’interno della directory sites/all/libraries (se non esiste, va creata), avendo cura di controllare che la directory creata che contiene i file scompattati, abbia il nome corretto dell’editor senza numeri di versione (nel mio caso, fckeditor), come indicato chiaramente nelle istruzioni di installazione di Wysiwyg; avendo a disposizione la shell, posizionarsi all’interno della directory sites/all/libraries e digitare:

wget http://downloads.sourceforge.net/project/fckeditor/FCKeditor/2.6.4.1/FCKeditor_2.6.4.1.tar.gz
tar -xzf FCKeditor_2.6.4.1.tar.gz

Fatto ciò, tornare su Drupal, sempre nella pagina del modulo Wysiwyg, quindi selezionare l’editor appena installato sia per il formato input Full HTML che Filtered HTML, salvare le modifiche e verificare che l’editor funzioni correttamente. Eventualmente, tornare nella pagina di Wysiwyg e, tramite i link Modifica a fianco di Full HTML e Filtered HTML, modificare le impostazioni dell’editor predefinito.

2 responses so far

Ago 19 2009

Installare la traduzione italiana su Drupal

Published by Lorenzo under CMS

Ieri ho cominciato a giocare un po’ con Drupal, un noto CMS open source, quindi, dopo averlo installato seguendo le indicazioni dell’esaustiva documentazione a riguardo, mi sono trovato di fronte al problema della lingua, poiché avevo installato Drupal in inglese, mentre avrei gradito avere l’area amministrativa ed il sito in lingua italiana.

Per raggiungere lo scopo, dopo aver installato Drupal (tenere presente che è possibile installare la traduzione italiana durante l’installazione di Drupal, io ho preferito farlo dopo l’installazione), bisogna abilitare il modulo Locale, andando, nell’interfaccia di amministrazione, sul menu di sinistra alla voce Administer, Site Building, Modules, quindi, spuntare la voce Locale e cliccare su Save configuration per salvare le modifiche.

A questo punto, è possibile scaricare due tipi di traduzioni, io ho scelto di scaricare il file monolitico con la traduzione in italiano chiamato drupal-all-it.po dal sito di Drupalitalia.org invece della traduzione “completa”, suddivisa in più directory e file; scaricato il file, andare, tramite il menu sulla sinistra, alla voce Administer, Site building, Translate interface, poi, su questa pagina, cliccare sul menu in alto la voce Import, si aprirà una pagina in cui si trova il campo Language file, dove vado a selezionare il file drupal-all-it.po scaricato precedentemente, ed il campo Import into, dove selezionare la lingua corrispondente al pacchetto di traduzione (nel mio caso, Italian), e poi cliccare sul pulsante Import, che importerà il file drupal-all-it.po ed aggiungerà la lingua italiana a Drupal.

Giunti qui, andare, tramite il menu di navigazione del pannello di amministrazione, sulla voce Administer, Site configuration, Languages, dove si trovano le due lingue installate, cioè English e Italian, selezionare la casella Default in corrispondenza della riga Italian e quindi cliccare su Save configuration; il nostro sito comparirà tradotto in italiano sia nel pannello di amministrazione, sia nel sito vero e proprio.

One response so far