Configurare Linux come router per una LAN

Transcript

Configurare Linux come router per una LAN
NETLinK S.a.S.
Progettazione e Realizzazione
Sistemi Informativi
http://www.netlink.it e-mail: [email protected]
Configurare Linux come router per una LAN
Introduzione
Un utilizzo frequente di una linux box è quello di router per lan di piccole e medie dimensioni,
ma come fare a condividere l’unico accesso ad internet a tutti i PC della rete, in modo semplice
e veloce?
Seguite questa breve spiegazione……….
Requirements
Avere una linux box già connessa ad internet tramite PPP, ISDN o ADSL non fa differenza, ed
una scheda di rete configurata per rendere il sistema raggiungibile dalla rete locale.
Le configurazioni presentate implicano l’uso di versioni del kernel 2.4.x e quindi del software
iptables per le operazioni di condivisione della connessione.
Schema
La situazione ipotizzata viene più semplicemente identificata con il seguente schema:
Installazione
Dopo avere verificato la corretta connessione ad internet della linux box (la cui
argomentazione non rientra nel presente articolo) è opportuno configurare la scheda di rete
utilizzando un indirizzo tra quelli disponibili per le classi private ad esempio
192.168.1.1/255.255.255.0 con gli altri host della LAN con indirizzi a seguire
192.168.1.2…192.168.1.x.
Gli indirizzi possono essere scelti tra quelli indicati dall'autorità per l'assegnazione degli indirizzi
IP (IANA) ovvero alcune classi private appositamente dedicate:
10.0.0.0 - 10.255.255.255
192.168.0.0 - 192.168.255.255
172.16.0.0 - 172.31.255.255
Il primo intervallo fa riferimento alla necessità di dover utilizzare un'intera classe A di indirizzi
Via Alpignano, 27
10093 Collegno (TO)
Tel. 011/4157192 - Fax011/4023455
NETLinK S.a.S.
Progettazione e Realizzazione
Sistemi Informativi
http://www.netlink.it e-mail: [email protected]
(ossia 255*255*255 indirizzi), il secondo soddisfa una classe B (255*255), mentre il terzo
soddisfa una classe C (255)
Va segnalato che gli indirizzi del tipo x.x.x.0 e x.x.x.255 non sono disponibili, in quanto
rappresentano rispettivamente l'indirizzo Network e Broadcast.
Per una completa condivisione della connessione sono necessari alcuni moduli da compilare nel
kernel, ma che dovrebbero essere disponibili con i kernel di default è sono:
ipt_state
568 3 (autoclean)
iptable_filter
1672 1 (autoclean)
ipt_MASQUERADE
1688 2 (autoclean)
iptable_nat
18424 1 [ipt_MASQUERADE]
ip_conntrack
19900 2 [ipt_state ipt_MASQUERADE iptable_nat]
ip_tables
12888 6 [ipt_state iptable_filter ipt_MASQUERADE iptable_nat]
Masquerading
Per poter effettuare il mascheramento degli indirizzi privati della LAN con quello pubblico
assegnato da provider al momento della connessione ad internet (ppp0 o ippp0) occorre
predisporre un script che chiameremo rc.masq:
#rc.masq by Paolo PAVAN <[email protected]>
#Variabili
EXT_INT=”ppp0” #Interfaccia Esterna connessa ad Internet
IPTABLES=”/usr/sbin/iptables” # path del programma iptables
INTERNAL_NET=”192.168.1.0/24” # Indirizzo LAN Interna
# Carica il modulo NAT (questo aggiunge automaticamente tutti gli altri).
modprobe iptable_nat
# Attiva l'IP forwarding: consente ai pacchetti di attraversare la linux box
echo 1 > /proc/sys/net/ipv4/ip_forward
# Nella tabella di NAT (-t nat), viene inserita una regola (-A) che subito dopo il routing
# (POSTROUTING) per tutti i pacchetti che escono da ppp0 (-o ppp0) mascheri la connessione
#(-j MASQUERADE).
$ IPTABLES -t nat -A POSTROUTING –s $ -o $EXT_INT -j MASQUERADE
# Per aumentare la sicurezza del nostro sistema i pacchetti di tipo NEW e INVALID (m state -#state NEW,INVALID) in ingresso (INPUT) o in transito (FORWARD) non sono consentiti, ossia
#scartati, in pratica vengono consentiti solo pacchetti non SYN che sono pacchetti generati in
#risposta a connessioni originariamente provenienti dalla nostra rete.
$IPTABLES -A INPUT -i $EXT_INT -m state --state NEW,INVALID -j DROP
$IPTABLES -A FORWARD -i $EXT_INT -m state --state NEW,INVALID -j DROP
Note
Con questo script che va reso eseguibile (chmod 0700 rc.masq) ed eseguito al boot del
sistema automaticamente, vengono mascherate tutte le connessioni generate dall’interno
verso qualsiasi porta all’esterno senza distinzione. In caso di problemi nell’usare l’ftp
dall’interno verso l’esterno è bene caricare i due moduli specifici per la gestione dell’ftp e del
connection-tracking.
Via Alpignano, 27
10093 Collegno (TO)
Tel. 011/4157192 - Fax011/4023455
NETLinK S.a.S.
Progettazione e Realizzazione
Sistemi Informativi
http://www.netlink.it e-mail: [email protected]
#rc.modules_ftp
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
SNAT (Source NAT)
Una comoda funzionalità di iptables e del kernel Linux è quella offerta dal Source NAT che
consente di cambiare il mittente e la porta sorgente
(POSTROUTING).
Questa funzionalità sostituisce il masquerading per le reti in cui gli IP utilizzati per la
connessione ad internet sono fissi come per linee dedicate (CDN,ADSL):
La sintassi da utilizzare
#rc.masq.snat - SNAT = MASQUERADING per IP FISSI
#Variabili
EXT_INT=”ppp0” #Interfaccia Esterna connessa ad Internet
IPTABLES=”/usr/sbin/iptables” # path del programma iptables
INTERNAL_NET=”192.168.1.0/24” #Indirizzo LAN Interna
EXT_IP=”212.101.x.x” #Indirizzo IP fisso sul lato INTERNET (Esterno)
#Converte l’indirizzo sorgente proveniente da un IP di classe chiusa della LAN interna con
#l’indirizzo IP pubblico dell’interfaccia esterna
$IPTABLES -t nat -A POSTROUTING -o $EXT_INT -s $INTERNAL_NET -j SNAT --to-source
$EXT_IP
Ma quando usare MASQUERADING e quando usare SNAT
Il masquerading è indicato per connessioni ad internet con IP dinamico che varia ad ogni
nuova connessione il Source NAT per connessioni ad internet con IP statico.
La differenza tra le due è rappresentata dal fatto che in caso di caduta della connessione il
masquerading provvede ad eliminare le connessioni attive dalla tabella di nat invece nel caso
del Source Nat se la connessione viene riattivata in tempo brevi le connessioni vengono
mantenute con evidente beneficio in termini di prestazioni e continuità del servizio.
Proxy
Un proxy è un dispositivo che consente la condivisione dell’accesso ad internet per quel che
concerne le richieste http ed ftp e può funzionare anche in assenza del masquerading. In
parole povere la richiesta che il client fa al proxy viene inoltrata verso internet da proxy stesso
che poi si occupa di recapitarla al client.
Sicuramente il proxy più diffuso su internet anche perché multipiattaforma è squid
(http://squid.nlanr.net/Squid).
Potente e versatile consente un agevole sfruttamento di un'unica connessione ad internet per
un’intera LAN. Adatto anche a carichi di lavoro gravosi richiede una configurazione di start-up
minima:
Una volta prelevato il sorgente http://www.squid-cache.org/Versions/v2/2.5/ occorre
installarlo
root@box:/usr/src/squid-2.5.STABLE1#./configure;make;make install
L’installazione standard dovrebbe andare bene per la maggior parte dei casi, ma molte
features possono venire attivate al momento della configurazione (./configure --help)
Via Alpignano, 27
10093 Collegno (TO)
Tel. 011/4157192 - Fax011/4023455
NETLinK S.a.S.
Progettazione e Realizzazione
Sistemi Informativi
http://www.netlink.it e-mail: [email protected]
Una volta installato è essenziale creare l’area di cache con il comando squid –z in genere nella
sua location di default:
/usr/local/squid/sbin
root@box:/usr/local/squid/sbin# ./squid -z
2002/12/19 13:37:01| Creating Swap Directories
Prima di attivarlo è necessario configurarlo editando il file squid.conf: non è nell’intento di
questo breve articolo approfondire questo argomento viste le innumerevoli possibilità di
configurazione e personalizzazione del proxy, sono sufficienti solo alcune indicazioni per poter
far funzionare squid:
#
WELCOME TO SQUID 2
#Default: Æ impostare la porta a cui risponderà il servizio proxy
http_port 8080
#Impostare una acl specificando la classe della nostra rete, che in questo modo sarà l’unica
#autorizzata ad utilizzare il proxy
acl rete_interna src 192.168.1.0/24
http_access allow rete_interna
#Se squid non viene eseguito come root è bene creare sul sistema un utente squid a cui
#assegnare l’ownership sulla sua root directory (chown squid.users –R /usr/local/squid) per
#poi specificarlo nel file di configurazione
cache_effective_user squid
Questi pochi parametri rendono il proxy utilizzabile anche se occorre una certa dimestichezza
per poterlo sfruttare a fondo.
Per approfondimenti
http://tesi.elis.org/Progetti/TLC4/progetti/progetto1/Documentazione/squid.htm
Proxy trasparente (senza configurazioni necessarie sui client)
Nel caso in cui si voglia implementare l’uso del proxy senza necessariamente impostarlo dal
lato client è possibile impostarlo in modalità trasparente.
Questa operazione richiede una modifica nella configurazione di iptables e una in quella di
squid:
Aggiunte a iptables
#rc.masq by Paolo PAVAN <[email protected]>
#Variabili
EXT_INT=”ppp0” #Interfaccia Esterna connessa ad Internet
IPTABLES=”/usr/sbin/iptables” # path del programma iptables
INTERNAL=”eth0” # interfaccia interna sulla LAN
INTERNAL_NET=”192.168.1.0/24” # Network di rete per la classe interna
PROXY_PORT=”8080” # porta su cui risponde il proxy
#Direttiva per il transparent proxy: dirotta le chiamate dalla rete interna verso internet su
porta # 80 automaticamente su quella del proxy (8080)
$IPTABLES -t nat -A PREROUTING -i $INTERNAL -p tcp -s $INTERNAL_NET -d 0/0 --dport 80 -j
REDIRECT --to-port $PROXY_PORT
Via Alpignano, 27
10093 Collegno (TO)
Tel. 011/4157192 - Fax011/4023455
NETLinK S.a.S.
Progettazione e Realizzazione
Sistemi Informativi
http://www.netlink.it e-mail: [email protected]
Aggiunte a squid.conf
#/usr/local/squid/etc/squid.conf
### Direttive proxy trasparente
httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_single_host off
### proxy trasp
Configurazione dei client
I client della rete di qualunque sistema operativo siano devono impostare il default gateway
sull’indirizzo IP interno della linux box (192.168.1.1 quello supposto) e impostare il proxy per il
browser (qualunque esso sia) su 192.168.1.1 porta 8080 per tutti protocolli.
Nel caso in cui si sia optato per la configurazione con il proxy trasparente è solo necessario
impostare il gateway e non il proxy per il browser, in quanto le richieste vengono passate
comunque al proxy ma in modo del tutto trasparente per l’utente.
Via Alpignano, 27
10093 Collegno (TO)
Tel. 011/4157192 - Fax011/4023455