Linux/ Un firewall per amico (V)

Come previsto da questa settimana iniziamo a parlare della vera e propria implementazione di una macchina che funga da firewall e che nello stesso momento ci offra altri servizi utili al fine della connessione ad Internet

Questa settimana iniziamo a parlare della vera e propria implementazione di una macchina che funga da firewall e che nello stesso momento ci offra altri servizi utili al fine della connessione ad Internet. Alcuni paragrafi di questo e dei futuri articoli potranno essere di ostica comprensione a chi sia a completo digiuno del protocollo TCP/IP. Chi vuole approfondire l?argomento ?Protocolli di Rete? può mandarmi una mail al mio indirizzo di posta elettronica. 

La configurazione tipica su cui normalmente si lavora prevede più client connessi a una rete locale e un solo accesso ad Internet. In generale, questa tIPologia di rete crea un problema non banale: come devono condividere l?accesso ad Internet i vari client della rete locale? Ogni volta che ci connettiamo ad Internet riceviamo dal nostro Internet Service Provider (ISP) un IP dinamico che a ogni connessione può essere diverso da quello precedente. L?IP è composto da 4 numeri separati da un punto e ogni numero assume un valore compreso tra 0 a 255 (per esempio 131.114.11.52), esso rappresenta il nostro nome a cui fanno riferimento le altre macchine connesse ad Internet quando ci devono inviare dati. 
Le comunicazioni attraverso Internet avvengono mediante l?utilizzo di pacchetti, questi ultimi li possiamo paragonare a dei piccoli plichi postali che all?interno contengono i dati che vogliamo trasmettere e all?esterno presentano l?indirizzo completo del mittente e del destinatario (indirizzo IP) in modo che il sistema adibito allo smistamento e consegna dei ?plichi? possa, facilmente, consegnarlo al suo destinatario.

 

 Diagramma di una rete che utilizza il masquerading
Diagramma di una rete che utilizza il masquerading

A questo punto la domanda nasce spontanea: come faccio con un solo IP a far navigare più computer?  NAT, ovvero condivisione dell?accesso a Internet. Non avere un nome, ovvero un IP fisso, nella grande ragnatela di Internet, significa non poter ricevere dati dalle altre macchine interconnesse alla rete. E? comunque possibile dare l?accesso ad Internet a più computer attraverso un solo IP attraverso il servizio NAT, chiamato, dai linuxiani, Masquerading, cioè mascheramento del proprio IP. Attraverso questa funzione gli elaboratori della rete locale possono dialogare con quelli della rete esterna (Internet), ricevendo e trasmettendo dati, ma i computer esterni alla rete locale operano come se comunicassero, esclusivamente, con il computer adibito a firewall per la rete locale. In altre parole il masquerading permette di rendere invisibili gli indirizzi IP locali alla rete esterna, eliminando il problema di utilizzare indirizzi validi per la rete Internet. Tutte le connessioni generate dalla rete interna verso Internet hanno come mittente, non il proprio IP, ma bensì l?IP dinamico assegnato dall?ISP alla macchina che funge da Firewall. Anche se il pacchetto, contenente dati, viene inviato da un client della rete locale, il firewall prima di rigiralo verso il gateway Internet sostituisce l?IP del mittente con il proprio. E? naturale, che il sistema che gestisce il masquerading, sia in grado, successivamente, di distinguere quali siano stati i veri mittenti dei pacchetti e rigirarli a loro. Tale sistema di filtro ha un difetto. Il masquerading permette di instradare le connessione interne verso l?esterno ma non permette ai computer ?esterni? di instradare le loro connessioni verso gli host della rete locale. In effetti, l?utilizzo di IP privati non permette tali operazioni. L?attivazione del filtro di masquerading avviene attraverso regole dell?IPchains che per la loro complessità spiegheremo nella prossima settimana. Per ora vi presento un semplice script senza commentarvelo: 

#!/bin/sh
# forwarding
echo "1" > /proc/sys/net/IPv4/IP_forward
# firewall
IPchains -P forward DENY
IPchains -A forward -s 192.168.0.0/24 -j MASQ
# masquerading
depmod -a
modprobe IP_masq_ftp
modprobe IP_masq_raudio
modprobe IP_masq_irc
# time out
IPchains -M -S 7200 120 120
# dynamic IP
echo "1" > /proc/sys/net/IPv4/IP_dynaddr

La prossima settimana vedremo di capire meglio il funzionamento di IPchains, lo strumento principale per la messa a punto del nostro firewall Linux.

Giuseppe Augiero