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