Posts Tagged ‘IP’

Configurare un proxy SOCKS over SSH con putty e firefox per aggirare il proxy aziendale

In questa guida vedremo come configurare una connessione ssh in modo da ottenere un proxy SOCKS. Essa può essere utile per by-passare il proxy aziendale e navigare anche su siti normalmente bloccati e, quindi, inaccessibili.

Requisiti di fattibilità sono:

  1. avere un pc linux a casa con un server ssh in ascolto sulla porta 22
  2. avere la porta 22 dalla intranet non bloccata verso internet
  3. conoscere l’ip del server (anche tramite dns dinamico come dyndns) e impostare il ruoter con port forwarding sulla porta 22 verso il pc linux
  4. avere un pc client con installato il client putty e il browser firefox

Iniziamo con il configurare correttamente il client ssh putty, per fare ciò dobbiamo conoscere l’ip pubblico del pc linux su cui è installato il server ssh, lasciamo impostata la porta 22, connection type selezionato su ssh e diamo un nome alla connessione (tipo “TUNNEL”); dopodiché facciamo Save.


Successivamente, dal menu a sinistra, selezioniamo connection. Nel campo “Seconds between keepalives” impostiamo 1 e flagghiamo le 2 opzioni sotto, principalmente “Enable TCP keepalives“.

putty connection

 

Da connection spostiamoci nel sottomenu connection->proxy e inseriamo i dati del proxy a cui siamo collegati per andare su internet specificando il tipo di proxy, l’ip o il nome del proxy, la porta su cui è in ascolto e le credenziali, se ci sono.

putty proxy

 

Nel menu connection->SSH->Tunnels valorizziamo il campo “Source port” con una porta a nostra scelta ma superiore alla 1024 (ad es. la 5000), sulle opzioni sotto scegliamo “Dynamic” e “Auto” e clicchiamo su “Add“: comparirà nel box l’indicazione Dxxxx dove xxxx è la porta scelta.

putty tunnel

Infine, torniamo nel menu session e facciamo salva per memorizzare i parametri. Tutti i parametri per la connessione e il relativo tunnel sono impostati, quindi facciamo click su “Open” per far partire la connessione e inseriamo nome utente e password. Se non ci sono stati intoppi la connessione con il server è instaurata e il tunnel ssh è già in funzione.

Il passo successivo è la configurazione di firefox per utilizzare il tunnel come un proxy SOCKS. Dal browser andiamo sul menu strumenti->opzioni->avanzate->rete, troveremo la voce “Determina come firefox si collega a internet” e clicchiamo su impostazioni. Si aprirà una nuova finestra dove dovremo impostare “Configurazione manuale dei proxy” e valorizziamo solamente la voce Host SOCKS con il valore 127.0.0.1, come porta quella impostata nel tunnel (nell’esempio è la 5000) e selezioniamo SOCKSv5.

impostazione proxy firefox

Facciamo ok. Se la configurazione è terminata correttamente, una volta instaurata la connessione ssh potremo navigare con firefox utilizzando il nostro pc linux di casa finché non verrà chiusa la connessione.
Ovviamente, la configurazione del proxy può essere cambiata non solo su firefox ma su un qualsiasi browser o programma che consentono di inserire a mano le impostazioni proxy, come ad esempio explorer, skype, antivirus e torrent.

Nel caso in cui il firewall aziendale blocchi la porta 22 basterà modificare la porta di ascolto del servizio ssh (e il relativo port forwarding sul router di casa) sulla porta 80 o sulla porta 443 verso il pc linux dato che tali porte saranno sicuramente aperte.

RIP v2 e default routes su router cisco

In questo articolo terminiamo la trattazione sul RIP iniziata nei precedenti articoli, RIP e configurazione sui router cisco e RIP: load balancing e integrazione delle rotte statiche, fornendo una comparazione tra il RIPv1 e il RIPv2.

Entrambe le versioni di RIP sono dei protocolli distance vector, sono facili da configurare e usano l’hop count come metrica (dopo 15 hop la rete viene posta come irraggiungibile), usano l’holddown timers e lo split horizon per evitare i routing loops. I router hanno conoscenza delle sottoreti direttamente connesse e gli aggiornamenti includono informazioni sulla topologia (almeno la metrica); tali aggiornamenti avvengono in maniera periodica.

Il RIPv2 apporta dei vantaggi rispetto alla prima versione del protocollo. In particolare il RIPv2:

  • supporta il classless routing;
  • include nei routing updates le subnet mask;
  • ha un meccanismo di autenticazione negli updates (utilizza la criptatura MD5);
  • invia gli aggiornamenti in multicast (indirizzo 224.0.0.9) anziché in broadcast;
  • usa un routing tag con VLSM.

La configurazione del RIPv2 è identica a quella del RIPv1, l’unica differenza sta nell’inserire il comando version 2, come da esempio sotto:

Router(config)#router rip
Router(config-router)#version 2
Router(config-router)#network network-number

Per la verifica della configurazione si possono utilizzare i comandi show ip protocols, show ip route e show ip interface brief oltre, ovviamente, a show running-config. Il troubleshooting del RIPv2 può avvenire con il comando debug ip rip mentre per disattivare il debug basta inserire no debug all oppure undebug all.

Prima di concludere parliamo della rotta di default (default route). In generale, un router apprende il percorso verso una data destinazione in tre modi: attraverso una rotta statica (l’amministratore inserisce manualmente la rotta), con una rotta dinamica (grazie agli aggiornamenti inviati secondo un protocollo di routing) oppure per mezzo di una default route.
L’amministratore di rete può definire manualmente una rotta di default, cioè il percorso da seguire nel caso in cui non conosca alcuna rotta per raggiungere la destinazione. La rotta di default porta come vantaggio l’avere una ridotta tabella di routing e un percorso di default per destinazioni non conosciute.
La default route può essere impostata dal comando ip default-network in reti che utilizzano routing dinamico:

Router(config)#ip default-network rete

ad es.:

Router(config)#ip default-network 192.168.10.0

oppure attraverso una rotta statica, ad es.:

Router(config)#ip route 0.0.0.0 0.0.0.0 s0/0

dove gli zeri sia nel campo ip che nella subnek mask indicano ogni rete di destinazione con qualsiasi maschera. L’s0/0 è interfaccia su cui inviare i pacchetti (nell’esempio la seriale 0, dovete modificarla in base alle vostre esigenze).

VLSM, CIDR e aggregazione delle rotte

La Variable-length subnet mask (VLSM) è una tecnica utilizzata dagli amministratori di rete per usare in maniera più efficiente gli indirizzi IP. Con la VLSM si offre una maschera più lunga a reti con molti host e una maschera più corta per reti con pochi host, ovvero la maschera varia a seconda del numero di indirizzi necessari a quella rete.
Per implementare la VLSM bisogna, ovviamente, utilizzare un protocollo di routing che supporta il classless routing (un protocollo che, invece, non supporta le VLSM viene detto classful). I protocolli di routing classless su cui utilizzare la VLSM nei router cisco sono:

  • OSPF
  • Integrated IS-IS
  • EIGRP
  • RIP v2
  • BGP v4
  • Routing statico

I protocolli di routing classful sono, invece:

  • RIP v1
  • IGRP
  • EGP
  • BGP v3

Il classless routing nasce per il problema della carenza di indirizzi IP dovuto al veloce aumento delle dimensioni delle tabelle di routing di Internet. Le soluzioni a questo problema sono state il subnetting, la VLSM appunto, il Classless Interdomain Routing (CIDR), l’utilizzo di indirizzi IP privati e il Network Address Translation (NAT). La soluzione definitiva sarà l’utilizzo del protocollo IPv6 che avrà un’astensione di 128bit per gli indirizzi di rete (quindi uno spazio di indirizzamento enorme).

In principio era stato deciso di non utilizzare né la prima (subnet zero) né l’ultima subnet (all-one subnet), successivamente è stato consentito l’uso anche di tali subnet, soprattutto in unione alle VLSM. Per non utilizzare la prima subnet sui router cisco basta digitare il comando no ip subnet-zero.

Le VLSM sono utilissime per utilizzare in maniera efficiente subnet con pochi host, in particolare per i collegamenti Point-to-Point con i WAN links in cui si può usare una maschera di 30 bit (/30) con 2 soli host utilizzabili.
Inoltre, l’uso di CIDR e VLSM permette di effettuare l’aggregazione delle rotte o summarization. Tale tecnica consiste nel fornire al router di uscita di una grande organizzazione (ad es. un ISP) un indirizzo che riepiloga le sottoreti raggiungibili da esso riducendo così il carico sul router. Per fare ciò è necessario che gli indirizzi vengano assegnati in maniera gerarchica in modo che gli indirizziriassuntivi” condividano lo stesso ordine superiore bit.

Configurazione delle ACL: standard, extended e named. Posizionamento

Nel precedente articolo abbiamo iniziato a trattare l’argomento delle ACLs con una panoramica teorica e pratica sulle wildcard e sui tipi di ACLs. Abbiamo, inoltre, visto la configurazione di una semplice ACL standard. Prima di passare in questo articolo alle Extended ACLs, terminiamo dicendo che nelle Standard ACL (ma anche nelle altre) è possibile inserire un commento per meglio identificare l’ACL in maniera pratica e veloce tramite il comando remark (comando opzionale).
Per inserire il commento a una ACL esistente bisogna inserire il comando:

Router(config)#access-list numero remark commento

L’ultimo comando utilizzabile è il comando log (comando opzionale) alla fine della dichiarazione di una ACL: esso crea una serie di informazioni di logging sui pacchetti inviati o bloccati dalle ACLs. In tali informazioni si trovano il numero dell’ACL, il numero di pacchetti passati o scartati e  l’IP sorgente. In generale il comando per impostare una ACL standard è:

Router(config)#access-list access-list-number {permit deny} {test-conditions}

più le eventuali opzioni.

Passiamo adesso alle Extended ACLs che sono spesso preferite alle Standard ACLs in quanto sono configurabili con molti più parametri: esse possono fare un controllo sull’IP sorgente, su quello di destinazione, sul protocollo e sul numero di porta.
Le Extended ACLs sono caratterizzate da numeri identificativi che vanno da 100 a 199 e da 2000 a 2699; vanno applicate il più vicino possibile alla sorgente di traffico. Facciamo un esempio pratico per capire come settare questo tipo di ACL.

Supponiamo di voler bloccare il telnet dall’host 192.168.50.15, la regola sarà:

Router(config)#access-list 101 deny tcp host 192.168.50.15 eq telnet

oppure

Router(config)#access-list 101 deny tcp host 192.168.50.15 eq 23

Per prima cosa identifichiamo l’ACL con un identificativo nel range apposito, successivamente va indicato il protocollo (nel nostro caso il tcp) e l’indirizzo con la wildcard mask. Nel nostro esempio si è usato il comando host al posto della wildcard 0.0.0.0; infine va indicato il servizio o la porta da bloccare. Il resto dei comandi resta uguale alle standard ACLs:

Router(config)#interface {interfaccia}
Router(config-if)# ip access-group numero_acl {in|out}

Le ACLs viste finora sono dette numbered poiché la singola ACL è identificata da un identificativo numerico. Oltre ad esse vi sono le ACLs basate sul nome, dette named ACLs. Le ACLs named possono essere sia standard che estese e il tipo va specificato in sede di configurazione nel seguente modo:

Router(config)#ip access-list {standard|extended} ACL-name

Nelle named ACLs il comando access-list è preceduto dal comando ip. I vantaggi di tali ACL sono:

  • possibilità di utilizzare caratteri alfanumerici per identificare l’ACL (anche semanticamente più facili da ricordare);
  • non vi è alcun limite al numero di named ACLs;
  • possono essere modificate senza cancellare completamente l’ACL e riconfigurarla.

Dove vanno posizionate le ACLs?
La regola generale è quella di posizionare le extended ACLs il più vicino possibile alla sorgente di traffico da bloccare per bloccare i pacchetti il prima possibile. Le standard ACL non specificano l’indirizzo di destinazione, pertanto le standard ACLs vanno posizionate il più vicino possibile alla destinazione. Questo impedisce che venga bloccato anche traffico utile che invece non va controllato.

Terminiamo questo articolo dicendo che le ACLs possono essere utilizzate anche per limitare gli accessi sulle virtual ports, dette anche vty lines, attraverso il comando access-class al posto di access-group. Tale procedura serve ad aumentare la sicurezza della rete; ad esempio, serve a limitare l’accesso al router tramite telnet (connessione vty). Il procedimento per la creazione di una vty access list è la stessa di quella descritta per le interfacce a parte il comando access-class. Facciamo un esempio: supponiamo che gli utenti della rete 192.168.10.0/24 possano utilizzare le virtual ports mentre bisogna bloccare i rimanenti accessi utilizzando una standard ACL con identificativo 5; i comandi saranno:

Router(config)#access-list 5 permit 192.168.10.0 0.0.0.255
Router(config)#access-list 5 deny any

Applichiamo adesso l’ACL:

Router(config)#line vty 0 4
Router(config-line)#login
Router(config-line)#password secret
Router(config-line)#access-class 5 in

Nota: per la ACL su vty line possono essere applicate solo ACLs numbered e non named.

Introduzione alle Access Control Lists su router Cisco e alle wildcard mask

Le Access Control Lists (nel seguito ACLs) sono una lista di condizioni utilizzate per “controllare” il traffico e si applicano alle porte del router che decide se far passare un determinato pacchetto oppure bloccarlo. I criteri decisionali si basano sull’indirizzo IP sorgente, quello di destinazione, sulle porte e sui protocolli. Le ACLs possono essere usate con qualsiasi protocollo routed di livello rete come IP e IPX. Elenchiamo alcuni aspetti positivi apportati dalle ACLs:

  • limitano il traffico della rete aumentando così le performance;
  • effettuano un controllo di flusso sul traffico;
  • offrono un livello base di sicurezza per l’accesso alla rete;
  • decidono quale tipo di traffico inoltrare e quale bloccare.

Se non vi è alcuna ACLs configurata sul router tutti i pacchetti vengono inoltrati senza distinzione.

Vediamo ora il funzionamento di un’ACLs. L’ordine in cui vengono immesse le ACLs è fondamentale in quanto l’IOS effettua un controllo sulle condizioni dall’alto verso il basso, ovvero dalla prima condizione immessa fino all’ultima. Se ad esempio la prima condizione permette l’inoltro di tutto il traffico tutte le altre verranno ignorate! Bisogna fare quindi molta attenzione.
Quando una condizione è verificata il pacchetto viene inoltrato o bloccato in base alla regola impostata nella ACLs; se nessuna delle condizioni nell’ACLs combacia,  implicitamente vi è un deny any in fondo alla lista, di default e, quindi, il pacchetto verrà scartato.

Le ACLs utilizzano le wildcard mask per impostare le condizioni. Una wildcard mask è formata da 32 bit suddivisa in 4 ottetti (esattamente come gli indirizzi IP) dove lo zero indica il bit nell’indirizzo da esaminare mentre l’1 il bit corrispondente nell’indirizzo da ignorare.  Vi sono 2 wildcard particolari che sono la 0.0.0.0 e la 255.255.255.255: la prima è sostituita dalla parola chiave host (verifica tutto l’IP) mentre la seconda dalla parola chiave any. Più avanti faremo un esempio pratico, prima però passiamo alla definizione delle ACLs sui ruoter Cisco.

Ci sono diversi tipi di ACLs: standard, extended e named. Quando una ACLs viene configurata gli viene assegnato un identificativo univoco che identifica anche il tipo di ACLs in base a un range di identificativi. I range disponibili sono:

  • standard IP: 1-99, 1300-1999
  • extended IP: 100-199, 2000-2699
  • AppleTalk: 600-699
  • IPX: 800-899
  • extended IPX: 900-999
  • IPX Service Advertising Protocol: 1000-1099

Per inserire le regole in una ACLs si utilizza il comando access-list seguito dai vari parametri mentre per associarla a un’interfaccia si utilizza il comando access-group. La regola generale è:

Router(config)#access-list access-list-number {permit deny} {test-conditions}

mentre sull’interfaccia:

Router(config-if)#{protocol} access-group access-list-number

Vediamo un esempio pratico mostrando il funzionamento della wildcard. Supponiamo di voler bloccare in ingresso all’interfaccia ethernet1 il traffico proveniente dalla rete 172.16.0.0/16 con una stardard ACLs con identificativo 2 mentre bisogna lasciar passare tutto il resto del traffico dalla rete 172.0.0.0/8, i comandi saranno:

Router(config)#access-list 2 deny 172.16.0.0 0.0.255.255
Router(config)#access-list 2 permit 172.0.0.0 0.255.255.255
Router(config)#interface e0
Router(config-if)# ip access-group 2 in

La prima condizione forma un valore di confronto (applicando la wildcard) che, se rispecchiato dall’indirizzo del pacchetto in ingresso, tale pacchetto sarà scartato.

IP addess 172.16.0.0 10101100 00010000 00000000 00000000
wildcard mask 00000000 00000000 xxxxxxxx xxxxxxxx
Valore di confronto 10101100 00010000 xxxxxxxx xxxxxxxx

Se in arrivo ho un pacchetto da un host con IP 172.16.4.64 avrò una situazione di questo tipo:

IP addess 172.16.4.64 10101100 00010000 00000100 01000000
wildcard mask 00000000 00000000 xxxxxxxx xxxxxxxx
Valore di confronto 10101100 00010000 xxxxxxxx xxxxxxxx

il valore di confronto combacia e quindi, per la regola impostata, il pacchetto verrà scartato. Viceversa, la seconda regola mi forma un valore di confronto del tipo:

IP addess 172.0.0.0 10101100 00000000 00000000 00000000
wildcard mask 00000000 xxxxxxxx xxxxxxxx xxxxxxxx
Valore di confronto 10101100 xxxxxxxx xxxxxxxx xxxxxxxx

Se ho un pacchetto in ingresso all’interfaccia da un host con IP 172.8.10.1:

IP addess 172.8.10.1 10101100 00001000 00001010 00000001
wildcard mask 00000000 xxxxxxxx xxxxxxxx xxxxxxxx
Valore di confronto 10101100 xxxxxxxx xxxxxxxx xxxxxxxx

tale pacchetto verrà inoltrato in quanto il valore di confronto coincide con la regola impostata nell’ACLs.

La verifica della configurazione delle ACLs si effettua attraverso i comandi show. Il comando show ip interface mostra le informazioni sulle ACLs impostate sulle interfacce. Il comando show access-list mostra, invece, il contenuto di tutte la ACLs programmate sul router.

Nel prossimo articolo vedremo la configurazione dei vari tipi di ACLs.

RIP: load balancing e integrazione delle rotte statiche

Il load balancing (bilanciamento del carico) è il concetto che i router seguono per bilanciare il carico (traffico) in molteplici best path. Questi percorsi sono calcolati dinamicamente dal RIP e tale protocollo permette di indirizzare il traffico fino a un massimo di 6 best path utilizzati attraverso un meccanismo detto round robin. Tale meccanismo è ciclico, ovvero il router invierà il maniera ciclica il traffico sulle diverse interfacce su cui vi è un best path senza però tener conto della banda che vi si trova su ognuna di tali interfacce (il RIP non fa distinzioni sull’invio di pacchetti su un percorso PSTN a 56kbps o su una ATM a 155Mbps, calcola il best path tenendo in considerazione solamente il numero di hop da superare prima di arrivare a destinazione).
Le rotte con metrica uguale possono essere individuate usando il comando show ip route seguito dall’indirizzo della rete. Es.:

Router#show ip route 192.168.10.0

Per modificare il numero massimo di path bisogna digitare, in router configuration mode, il comando:

Router(config-router)#maximum-paths {number}

Parliamo adesso delle rotte statiche e al possibile utilizzo a fianco del RIP. La rotte statiche forzano l’instradamento dei pacchetti da una sorgente a una destinazione. Sono spesso utilizzate per definire una default route e, quindi, instradare un pacchetto anche quando la rete non è presente nella routing table.
Un router che usa RIP può ricevere una default route tramite update da un altro router che usa anch’esso RIP; un’altra opzione è che il router auto generi la sua default route.

Le rotte statiche hanno, ovviamente, prelazione su quelle dinamiche in virtù di una distanza amministrativa decisamente minore (per eliminare le default route basta digitare il comando no ip route in global configuration mode). Per ovviare a ciò basta impostare alla rotta statica una distanza amministrativa maggiore di quella del routing dinamico utilizzato. Così facendo si possono impostare rotte di backup nel caso in cui il processo di RIP non vada a buon fine.

Le rotte statiche saranno annunciate con gli update del RIP e propagate per tutta la rete: questo perché le rotte statiche sono contenute nella routing table ed il router non distingue tra rotte statiche e dinamiche. Quando un’interfaccia diviene indisponibile tutte le rotte statiche che la utilizzavano vengono rimosse dalla routing table. Quando il software non riesce più trovare un next-hop valido per l’indirizzo specificato nella static route, allora la rotte statica viene eliminata.

Routing e rotte statiche

Il Routing è il processo usato da un router per inviare i pacchetti fino a destinazione e utilizza come metodo decisionale l’indirizzo IP di destinazione. La decisione per l’invio di pacchetti a una rete remota può avvenire in maniera statica o in maniera dinamica. In questo articolo vedremo come configurare sui router cisco le rotte in maniera statica (static routing) ovvero configurando manualmente le informazioni sulle reti remote. Ovviamente, essendo configurate manualmente, l’amministratore di rete deve aggiungere o rimuovere rotte statiche ogni volta ci sia una variazione della topologia della rete.

Sui router cisco il comando da utilizzare per inserire una rotta statica è il comando ip route seguito da 3 parametri obbligatori che sono: rete remota, maschera della rete e ip d’uscita (o l’interfaccia d’uscita). Facciamo un esempio. Si voglia inserire la rotta statica alla rete 192.168.10.0 con maschera 255.255.255.0 da un router che ha come interfaccia d’uscita una seriale (ipotizziamo la seriale1) che ha IP 192.168.4.1; possiamo definirla tramite 2 comandi equivalenti:

- Router(config)#ip route 192.168.10.0 255.255.255.0 s1

oppure

- Router(config)#ip route 192.168.10.0 255.255.255.0 192.168.4.1

poiché basta indicare o l’interfaccia d’uscita o il suo IP.

Un parametro opzionale è la distanza amministrativa (o administrative distance) che indica l’affidabilità di una rotta: una distanza amministrativa minore indica un’affidabilità maggiore. Essa può assumere un valore compreso tra 0 e 255; nelle rotte statiche, se non esplicitamente indicato, il valore della distanza amministrativa è 1.
Spesso la distanza amministrativa viene modificata per creare delle rotte statiche di backup nel caso in cui le rotte dinamiche (o dynamic routing) falliscano l’apprendimento. In questo caso bisogna indicare la rotta statica con un valore della distanza amministrativa più alta di quella del dynamic routing utilizzato. Ad esempio:

- Router(config)#ip route 192.168.10.0 255.255.255.0 s1 150

La default route è la rotta utilizzata per instradare i pacchetti che hanno una destinazione che non coincide con nessuna delle rotte che si trovano nella routing table. La default route è un tipo speciale di rotta statica che si scrive nel seguente modo:

- Router(config)#ip route 0.0.0.0 0.0.0.0 s1
oppure
- Router(config)#ip route 0.0.0.0 0.0.0.0 192.168.4.1

ovvero inserendo come ip e maschera di destinazione a 0 e inserendo alla fine l’interfaccia d’uscita.

La verifica della configurazione avviene tramite i comandi show running-config e show ip route in modalità privilegiata. Ovviamente, per ritrovarsi la configurazione dopo il riavvio del router bisogna salvare la configurazione sulla configurazione d’avvio con il comando show running-config startup-config.