[Articolo] L’indirizzo IP e la Rete

Ho deciso di scrivere un post che cercherà di spiegare cos’è un indirizzo IP e quale visibilità ha un dispositivo collegato a Internet rispettivamente dietro ad un modem, un router, e un firewall.

Difficoltà articolo (0->10): 3

Requisiti: nessuno in particolare.

Ho deciso di scrivere un post che cercherà di spiegare cos’è un indirizzo IP e quale visibilità ha un computer su Internet, dopo che molte volte mi sono state rivolte domande a riguardo. Buona lettura ;-).

Ogni dispositivo collegato ad Internet (computer, palmare, cellulare, …), e più in generale a qualsiasi rete, è dotato di un proprio indirizzo che lo identifica in modo univoco. Possiamo pensare ai cellulari: ogni cellulare ha un proprio numero univoco, e quindi diverso da tutti gli altri (anche se in realtà il numero viene assegnato alla scheda sim, ma questo è un altro argomento), e questo numero ha una struttura fissa composta da 10 numeri. E’ naturale pensare che non possano esistere due cellulari diversi con lo stesso numero X, altrimenti se entrambi fossero accesi e qualcuno volesse chiamare proprio il numero X cosa succederebbe? La rete telefonica non saprebbe a quale dei due cellulari inoltrare la telefonata! Quello che succede per i cellulari può essere paragonato ai computer e a Internet. Ogni computer, al momento che si collega ad una qualunque rete (sia su Internet che all’interno di una rete locale (LAN)), deve possedere un proprio indirizzo IP, assegnato dal suo Internet Service Provider – ISP (Alice, Tele2, Tiscali, …) ed avente la forma X.X.X.X, dove ogni X può essere un qualsiasi numero da 0 a 255 (con alcune eccezioni). Esempi di indirizzi IP sono 192.168.3.45, oppure 155.123.111.13, ma anche 2.3.4.5 è un indirizzo valido.

indirizzo_ip

Per conoscere il proprio indirizzo è possibile utilizzare un comando specifico da terminale. In caso di windows è necessario aprire il prompt dei comandi e digitare:

ipconfig

e tra i dati visualizzati si potrà vedere proprio l’indirizzo IP. Ovviamente facciamo attenzione a controllare la scheda giusta, se abbiamo più schede di rete all’interno del computer, e solitamente la scheda di rete è identificata come “Ethernet Adapter”, “LAN Adapter”, “Ethernet Wireless Adapter” nel caso di una scheda wireless, ecc. Ecco un esempio (l’indirizzo IP è 192.168.1.2, assegnato appunto alla scheda “Ethernet Adapter”):

ipconfig
ipconfig su Windows

Da notare che aggiungendo l’opzione /all al comando verranno visualizzate tutte le informazioni relative alla rete (server DNS, gateway, …).

Nel caso di Linux invece il comando da digitare all’interno della shell è:

# ifconfig

(per maggiori dettagli vedere l’articolo rete in Linux).

A questo punto, possiamo provare a controllare l’IP visibile da Internet attraverso uno dei tanti siti che si trovano in giro sul web, ad esempio www.ip-adress.com. L’indirizzo visibile sul sito non corrisponde a quello della macchina? Potrebbe essere così, perché c’è il trucco :-). Come ho scritto su, è vero che ogni computer collegato ad Internet riceve un indirizzo univoco, ma solo se questo è collegato direttamente alla Rete. Molto spesso invece un computer si trova dietro ad un router, come nei sistemi casalinghi, o addirittura all’interno di una LAN più o meno complessa e comunque sempre dietro ad un router e/o firewall, come nei sistemi aziendali dove i pc sono molti. Dunque, esistono due tipi di indirizzi IP: pubblici e privati. La figura mostra un esempio tipico di connessione, dove i singoli computer (PC1, PC2, PC2) sono collegati ad Internet attraverso un router. E’ possibile osservare che ogni computer ha assegnato un indirizzo IP privato, e poi tutti sono collegati allo stesso router (passando per un hub/switch) che funge da punto di contatto tra i pc e Internet. A questo punto è naturale pensare che al router venga assegnato un indirizzo IP pubblico, essendo l’unico punto visibile sulla Rete “esterna”.

topologia_rete
Topologia di una rete

Più in generale, ogni computer o dispositivo collegato direttamente ad Internet (come utilizzando un modem, e non un router!) avrà un indirizzo pubblico, altrimenti se è posto dietro ad un router/firewall avrà un IP privato, ossia visibile solo nella rete locale. I motivi per cui viene assegnato un IP diverso ai computer che si trovano dietro ad un router sono molteplici:

  • utilizzando un router è possibile collegare ad Internet un elevato numero di computer o in più in generale dispositivi, altrimenti per ognuno servirebbe un modem diverso. Inoltre il numero di dispositivi collegati ad Internet sta aumentando sempre più, e poiché il numero totale dei possibili indirizzi IP è limitato (ricordiamo la struttura X.X.X.X, con numero massimo 255 per ogni X), un po’ come le targhe delle macchine, ai computer dietro ad un router vengono assegnati degli indirizzi privati, ossia non visibili da Internet. Ciò significa che due computer diversi, che si trovano dietro a router diversi, possono avere lo stesso indirizzo IP privato;
  • i computer collegati ad Internet attraverso un router risultano anche più protetti, in quanto solo il router risulterà visibile sul web, ma non i computer dietro ad esso e con gli indirizzi privati.

Un’altra precisazione, per chi non sapesse la differenza tra modem e router… Il modem (contrazione di modulator-demodulator) è un dispositivo che traduce i dati inviati da un solo computer in modo tale da trasmetterli sulla Rete, quindi un dispositivo un po’ stupido che esegue solamente questo compito. Quindi se avessimo 10 computer da collegare ad Internet avremmo bisogno di 10 modem. Un router invece è una sorta di “mini-computer”, che non solamente trasmette i dati a/da Internet, ma che ha in genere molte altre funzionalità, tipo quella di firewall (per la protezione dalle intrusioni esterne), di access point (per la creazione di una rete wireless), e la possibilità di collegare ad esso più computer. Quindi con un router è possibile collegare ad Internet un numero elevatissimo di dispositivi, ovviamente in base al tipo e qualità del router. Ci possono essere router casalinghi, da poche decine di euro (TP-Link, Netgear, …), o router professionali dal costo di migliaia di euro (Cisco, Juniper, …). Per maggiori approfondimenti (oltre alla consueta wikipedia):

roghan

Connettere una macchina virtuale attraverso un proxy

Vediamo oggi come configurare una VM, ospitata all’interno di un sistema operativo host Windows, in modo da poterla collegare ad Internet passando attraverso un proxy. Ad esempio questo è necessario in alcuni ambienti dove la navigazione su Internet è possibile solo attraverso un proxy, per motivi di policy interne di sicurezza (aziendale per esempio…). […]

Difficoltà articolo (0->10): 5

Requisiti: conoscenze minime di software di virtualizzazione lato desktop.

Vediamo oggi come configurare una VM, ospitata all’interno di un sistema operativo host Windows, in modo da poterla collegare ad Internet passando attraverso un proxy. Ad esempio questo è necessario in alcuni ambienti dove la navigazione su Internet è possibile solo attraverso un proxy, per motivi di policy interne di sicurezza (aziendale per esempio…). Ecco un’immagine della nostra semplice infrastruttura:

Test infrastructure
Infrastruttura

Innanzitutto il nostro test è stato eseguito facendo uso di VMware Player, anche se può essere applicato bene anche nel caso di altri software di virtualizzazione lato desktop (Oracle VirtualBox …). Importante è anche bene conoscere come funziona la parte della connettività con un ambiente virtuale, e questo è un requisito fondamentale per poter poi andare a configurare i parametri corretti. E’ un argomento lungo, e necessiterebbe di un articolo a parte, ma in rete si trovano decine di post dettagliati come questo:

http://www.carbonwind.net/Virtualization/VMware-Player-Networking-Options/VMware-Player-Networking-Options.htm

Dunque, dobbiamo identificare qual’è la scheda di rete connessa ad Internet, se già non lo sappiamo, e per far ciò possiamo utilizzare il comando ipconfig come in figura.

Comando ipconfig
Comando ipconfig

In questo caso ci sono 3 schede di rete, e quella connessa ad Internet è quella con label “Local Area Connection”. Da notare che l’installazione di VMware Player\Workstation comporta la creazione di almeno due nuove schede di rete virtuali, come visibile sempre in figura. La creazione di questi 2 adapter virtuali è necessaria per il corretto funzionamento delle connessioni virtuali della VM, come è spiegato in dettaglio al link sopra indicato. In breve, la scheda di rete VMnet1 è usata dalla VM nel caso in cui sia selezionata l’opzione “Bridged” (vedere più sotto), mentre la VMnet8 nel caso venga usata l’opzione “NAT”.

Dunque, andiamo alla sezione di configurazione delle connessioni di rete di Windows, come in figura.

Network connections
Network connections di Windows

Selezioniamo le proprietà della schede di rete connessa ad Internet (“Local Area Connection”).

All’interno della finestra delle proprietà spostiamoci nel tab “Sharing“, e mettiamo una spunta alla proprietà “Allow other network users to connect through this computer’s Internet connection” controllando che sotto “Home networking connection” sia specificata la scheda di rete VMnet8 (la scheda di rete usata dalla VM). In questo modo i pacchetti inviati dalla VM potranno essere inoltrati verso il proxy e la rete esterna passando dalla scheda di rete specificata (qui appunto la “Local Area Connection”).

Internet Connection Sharing
Internet Connection Sharing

Adesso dobbiamo configurare la scheda di rete della VM. Apriamo VMware Player e la configurazione della nostra VM, e posizioniamoci all’interno delle proprietà alla voce “Network Adapter“. Qui selezioniamo le voci come nella figura sottostante, abilitando “Connect at power on” (praticamente è l’analogo del collegamento del cavo di rete alla scheda di rete, virtuale in questo caso) e scegliendo “NAT“.
VMware networking configuration

L’ultimo step è quello di avviare la VM e di configurare il sistema operativo della VM (Windows, XP, 7, 8, Linux, …) per l’utilizzo del proxy (ovviamente dobbiamo conoscere indirizzo IP e porta del proxy da usare):

oppure possiamo configurare le singole applicazioni all’interno della VM (browser, chat, …) per l’accesso tramite proxy.

roghan

Reti locali e scelta degli indirizzi IP

L’idea di questo articolo nasce da una discussione iniziata su un noto forum del web. In particolare vedremo in che modo devono essere scelti gli indirizzi IP all’interno di una LAN e il perché di questa scelta. Tipicamente all’interno di una rete locale vengono impiegati quegli indirizzi che sono chiamati “privati”, appartenenti ad una delle 3 categorie […]

L’idea di questo articolo nasce da una discussione iniziata su un noto forum del web. In particolare vedremo in che modo devono essere scelti gli indirizzi IP all’interno di una LAN e il perché di questa scelta. Tipicamente all’interno di una rete locale vengono impiegati quegli indirizzi che sono chiamati “privati”, appartenenti ad una delle 3 categorie:

  • 10.0.0.0-10.255.255.255
  • 172.16.0.0-172.31.255.255
  • 192.168.0.0-192.168.255.255

Per una descrizione sul funzionamento degli indirizzi IP e sulla differenza tra indirizzi pubblici e privati leggete quest’altro articolo.

lan

Tutti noi che abbiamo in casa un router ADSL, sia wireless che con connessione via cavo, facciamo inconsapevolmente uso degli indirizzi IP privati. Infatti spesso i router assegnano ai dispositivi connessi gli indirizzi compresi tra 192.168.1.0 e 192.168.1.255 (estremi esclusi), mentre per la connessione di management del router viene utilizzato il canonico 192.169.1.1. Ovviamente non tutti i router utilizzano esattamente questo range, infatti potrebbe essere invece utilizzato 192.168.0.0-192.168.0.255, o altri ancora comunque sempre facenti parte delle 3 categorie di indirizzi privati. Vediamone adesso il motivo.

Quali implicazioni ci sarebbero ad usare un range differente da quello degli  indirizzi privati? Ad esempio cosa succede se in una LAN vengono assegnati ai PC gli indirizzi nel range 17.18.1.0-17.18.1.255? Se la LAN non è connessa ad Internet teoricamente tutto potrebbe funzionare tranquillamente, in quanto il dialogo tra i dispositivi della LAN avverrebbe come con qualunque altro indirizzo IP (privato o non). Il problema nasce al momento che  la LAN viene connessa ad Internet. Riprendendo il nostro esempio, se la LAN con indirizzi nel range 17.18.1.0-17.18.1.255 accedesse ad Internet, non sarebbe in grado di collegarsi ai dispositivi sul web che hanno veramente quegli indirizzi. Supponiamo che un PC della LAN, con indirizzo 17.18.1.10 voglia accedere ad un server su Internet con IP 17.18.1.200: a livello di routing, il PC che effettua la richiesta crederà di essere già all’interno della subnet del server, quindi tutte le richieste rimarranno nella rete locale senza essere inviate su Internet dal router.

Conclusione: dovendo assegnare indirizzi IP ad una rete locale è bene usare solamente gli indirizzi IP privati, in modo da non complicarsi la vita, anche se teoricamente in una LAN scollegata da Internet potrebbero essere usati anche indirizzi appartenenti ad altri range diversi da quelli privati. Più in generale, quest’ultimo caso lo consiglio solo per ambienti di test, e quando si vogliono fare esperimenti con le reti ;-), ma non per un uso prolungato.

roghan

Salvare le impostazioni del firewall iptables in Linux

Netfilter è un modulo del kernel Linux che permette di gestire i pacchetti in transito attraverso il sistema, e può essere dunque utilizzato sia per funzioni di NAT che come firewall attraverso il comando iptables. In questo piccolo howto si vedrà in che modo è possibile salvare una configurazione di iptables, dopo che sono state definite nuove regole.

Innanzitutto è importante ricordare che tutte le modifiche apportate con iptables sono immediate, ossia dopo che è stato inserito un certo comando, quella regola risulta subito attiva. Dunque, bisogna prestare la massima attenzione durante la configurazione del firewall, soprattutto quando si agisce su un sistema da remoto, poiché una regola errata al momento sbagliato chiude subito fuori da tutto! Buona norma prima di inserire le regole con la shell è quella di scrivere tutte le regole iptables in un file testuale, con un qualsiasi editor di testo, in modo da poter osservare e controllare il tutto prima di digitare i comandi sulla shell. E’ importante ricordare anche che lo stato del firewall rimane tale solo fino al riavvio, momento in cui le regole inserite a sistema avviato sono “azzerate” e vengono invece caricate le impostazioni salvate. Nel caso peggiore in cui si viene chiusi fuori dal firewall mentre si stanno creando le regole (e prima di averle salvate!), è necessario “solamente” riavviarlo, operazione semplice se agiamo in locale ma più complessa se siamo da remoto :-(. […]

Netfilter è un modulo del kernel Linux che permette di gestire i pacchetti in transito attraverso il sistema, e può essere dunque utilizzato sia per funzioni di NAT che come firewall attraverso il comando iptables. In questo piccolo howto si vedrà in che modo è possibile salvare una configurazione di iptables, dopo che sono state definite nuove regole.

Innanzitutto è importante ricordare che tutte le modifiche apportate con iptables sono immediate, ossia dopo che è stato inserito un certo comando, quella regola risulta subito attiva. Dunque, bisogna prestare la massima attenzione durante la configurazione del firewall, soprattutto quando si agisce su un sistema da remoto, poiché una regola errata al momento sbagliato chiude subito fuori da tutto! Buona norma prima di inserire le regole con la shell è quella di scrivere tutte le regole iptables in un file testuale, con un qualsiasi editor di testo, in modo da poter osservare e controllare il tutto prima di digitare i comandi sulla shell. E’ importante ricordare anche che lo stato del firewall rimane tale solo fino al riavvio, momento in cui le regole inserite a sistema avviato sono “azzerate” e vengono invece caricate le impostazioni salvate. Nel caso peggiore in cui si viene chiusi fuori dal firewall mentre si stanno creando le regole (e prima di averle salvate!), è necessario “solamente” riavviarlo, operazione semplice se agiamo in locale ma più complessa se siamo da remoto :-(.

I comandi che permettono di osservare e salvare la configurazione di iptables sono:

  • iptables-save, che stampa sullo standard output la configurazione corrente del firewall;
  • iptables-restore, con cui si può ripristinare una configurazione precedentemente salvata tramite iptables-save.

In particolare, come ho già accennato, al riavvio vengono caricate le impostazioni salvate in memoria, e, pertanto, è necessario specificare quale configurazione caricare all’avvio del sistema. I metodi utilizzabili sono due:

  • uno script shell che esegue in successione tutti i comandi iptables necessari (del tipo iptables -I INPUT DROP x…, iptables -I INPUT DROP y…). In questo caso le regole vengono aggiunte a caldo e il firewall viene configurato dinamicamente ad ogni avvio. Questa tecnica ha il vantaggio di permettere commenti fra le regole e poter usare variabili, cicli e impostare regole sulla base di parametri variabili. Spesso questo script lo si richiama dal file /etc/rc.d/rc.local, anche se sarebbe preferibile applicarlo appena attivate le interfacce di rete;
  • uno script inserito tra i servizi all’interno di init.d, oppure all’interno di /etc/rc.d/rc.local, come nel caso precedente. Questo script richiamerà iptables-restore in modo da ripristinare una configurazione precedentemente salvata. Nello specifico il comando da inserire è cat /etc/firewall | iptables-restore, supponendo che firewall sia un file contenente la configurazione salvata in precedenza. Questa è la soluzione usata da molte distribuzioni, dove il file di configurazione del firewall, riprendendo l’esempio, non è altro che l’output di un comando come: iptables-save > /etc/file_config. Ha il vantaggio di applicare lunghi elenchi di regole in modo molto più rapido. Ecco un esempio di file /etc/rc.d/rc.local
    #!/bin/sh
    #
    # This script will be executed *after* all the other init scripts.
    # You can put your own initialization stuff in here if you don't
    # want to do the full Sys V style init stuff.
    touch /var/lock/subsys/local
    cat /etc/firewall | iptables-restore

Alcune risorse utili:

Linux firewalling: Introduzione a Iptables

iptables-restore

roghan