Nat Lan (MASQUERADE) HOWTO


Sintassi

debgate> Comandi da eseguire sul server
pc0> Comandi da eseguire sui client


Primo livello

Attacca eth0 in internet ed eth1 ad uno switch per la lan

Verifica se il kernel abbia installato il modulo per il MASQUERADE

Verifica se entrambe le schede eth vengono trovate

Ricevi una configurazione automaticamente (es: fastweb)

oppure

per completare

Se funziona allora il router vede internet, primo livello superato


Secondo livello

debgate> ifconfig eth1 192.168.0.1

pc0> ping 192.168.0.1

Se funziona allora i pc vedono il router, secondo livello superato


Terzo livello

Tutti i pc della lan devono impostare come gateway predefinito debgate

Attiva il port forwarding (permetti il transito del traffico sul server)


Quarto livello

I flush puliscono le tabelle del firewall

debgate>

Natta la LAN

Pinga un ip xkè potrebbero esserci problemi con i dns (/etc/resolv.conf)


NB: Il file /etc/resolv.conf dei client (pc0) deve essere uguale al file /etc/resolv.conf del server (debgate).


Esempio Fastweb - File: /etc/resolv.conf
-----------------------------------
search residential.fw
nameserver 1.253.128.10
nameserver 1.253.128.11
-----------------------------------

Se non funziona allora...

Segui il traffico sulla lan e controlla se arrivano pacchetti quando i client interrogano internet, se non funziona c'e' un problema di routing sui client. Potrebbe non essere settato il gateway.

debgate> tcpdump -i eth1


FINE (giunti a questo punto la vostra nat funziona, auguri ;)


Configurazione a prova di REBOOT!

NB: I modi che avete a disposizione sono infiniti. Questo è solo uno dei modi piu semplici (probabilmente).
NB2: Quanto segue richiede una minima conoscenza di reti e del sistema linux. Se riuscirete, alla fine vi troverete con un server con funzioni di routing di tipo nat con servizio DHCP + DNS abilitato.
--Disabiltiamo il dhcp momentaneamente
mv /etc/rc2.d/S20dhcp /etc/rc2.d/K20dhcp

--Creiamo il file CONF con il testo compreso fra i trattini ----
vi /etc/init.d/CONF

--------CUT HERE-----------
#! /bin/sh

#Abilito il forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

#Carico la configurazione del firewall
iptables-restore /etc/iptables.conf

#Avvio il servizio dhcpd sull'interfaccia eth1 (rete locale!)
dhcpd eth1
--------END----------------

--Rendiamo il file eseguibile
chmod 777 /etc/init.d/CONF

--Creiamo un link simbolico, all'avvio del pc verra' caricato il file CONF
ln -s /etc/init.d/CONF /etc/rc2.d/S99CONF

--Configuriamo le due interfacce all'avvio
vi /etc/network/interfaces

------CUT HERE-------------
#Interfaccia di internet
auto eth0
  iface eth0 inet dhcp

#Interfaccia locale
auto eth1
  iface eth1 inet static
  address 192.168.0.1
  netmask 255.255.255.0
----------END--------------

--Configuriamo il server DHCP con supporto DNS
vi /etc/dhcpd.conf

---------CUT HERE----------
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.2 192.168.0.254;
  option broadcast-address 192.168.0.255;
  option routers 192.168.0.1;
  option domain-name-servers 1.253.128.10,1.253.128.11;
  option domain-name "residential.fw";
}

host mangiafuoco {
  hardware ethernet AA:01:02:03:0B:04;
  fixed-address 192.168.0.71;
}
-------END-----------------

--Creiamo il file iptables.conf con le impostazioni di firewalling e routing
vi /etc/iptables.conf

---------------------------
# Generated by iptables-save v1.2.11
*nat
:PREROUTING ACCEPT [3:144]
:POSTROUTING ACCEPT [1:40]
:OUTPUT ACCEPT [1:40]
-A POSTROUTING -s 192.168.0.0/255.255.255.0 -j MASQUERADE
COMMIT
# Completed on Mon Jun 27 01:34:17 2005
---------------------------

EXTRA - IPTABLES

Questa regola cambia la FORWARD's policy di default in DROP, se non appendiamo nessuna regola che permetta una "via di fuga" per i pacchetti, nessun pacchetto verrà forwardato dal nostro pc. Eccovi esposta un piccolo firewall con policy "paranoica" e con l'aggiunta delle sopraccitate "vie di fuga" per permettere al pc alcune transizioni indispensabili:

iptables -A INPUT -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A INPUT -s 194.168.0.0/255.255.255.0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -P INPUT -J DROP

La precedente è un firewall con policy DROP in INPUT, non accetta nessun genere di pacchetto dall'esterno se non quelli espressamente specificati nelle regole della catena.

Una firewall semplice
Costruiamo un firewall minimalista per soddisfare le nostre esigenze casalinghe:

iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD

dopo aver ripulito le nostre catene andiamo ad appendere le regole. Ammettiamo di avere un X server, samba e ssh come servizi attivi:

iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s 194.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 6000 -j DROP
iptables -A INPUT -p all --dport 137:139 -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -p icmp ! --icmp-type echo-reply -j DROP
iptables -A INPUT -p udp --dport 33435:33525 -j DROP
iptables -A FORWARD -p tcp --syn -m limit –limit 3/s -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT

In INPUT le prime due regole le abbiamo già analizzate in precedenza, la tre e la quattro specificano di non far passare nessun pacchetto diretto al nostro X server o a samba, la cinque rifiuta gli echo-request mentre la sei risponde solo ai echo-reply inviati dal nostro host. In FORWARD la prima regola ci protegge dai Syn-Floods, la seconda da scans remoti sospetti. Come avete notato soltanto la nostra rete LAN raggiunge tutti i servizi del nostro pc, su internet soltanto ssh è stato reso raggiungibile con delle semplici precauzioni, e il nostro pc non ha nessun problema nel compiere azioni quotidiane su internet, come chattare o prelevare le e-mails.

Salvare le regole
Una volta settato il firewall è bene salvare le regole correnti (o attive) in modo tale da non dover riscrivere il tutto al prossimo boot della macchina. Gli utenti di Red hat o Mandrake possono ricorrere al seguente metodo:

/sbin/iptables-save –c > /etc/syconfig/iptables

Chi utilizza distribuzioni differenti dovrebbe dare un’occhiata agli script di init.d inerenti iptables. Per Debian basta indicare a /etc/init.d/*iptables di salvare le regole attive:

/etc/init.d/*iptables save active

Per ogni necessità consultare in /usr/share/doc/*iptables* per avere specifiche sulle metodologie di salvataggio delle regole.

Security Issue
Anche netfilter ha avuto le sue pecche per quanto concerne l’ambito della sicurezza, ricordiamo il piccolo bug inerente al Masquerade della rete. Un utente poteva rilevare i computer nattati (mascherati dietro il firewall) inviando pacchetti TCP con delle specifiche TTL. Il bug è stato risolto, chi desidera risolvere quest’inconveniente dovrebbe patchare il proprio netfilter (trovate l’indispensabile in www.netfilter.org) oppure ricorrere ai ripari con la seguente regola in OUTPUT:

iptables -A OUTPUT -m state -p icmp --state INVALID -j DROP

Questa regola evita il rilascio di informazioni “pericolse” tramite il firewall. Anche se è stato un articolo adatto ad ogni tipo di utenza, spero che ogni esigenza sia stata soddisfatta, e vi ricordo che per qualsiasi approfondimento il sito di netfilter (www.netfilter.org) mette a disposizione How-to e FAQ in lingua italiana e vari link ad altri siti dedicati ad iptables. Per chi ha avuto difficoltà con alcuni termini chiave quali, protocollo, flags, MAC ed altre terminologie presenti in questo articolo consiglio vivamente una "letturina" agli Appunti di informatica Libera (http://a2.swlibero.org/), che tenuti costantemente aggiornati dall'autore, stanno diventando una vera e propria bibbia italiana dell'informatica. Per il resto vi ricordo le man ("man iptables"), e la morale del giorno : "chi fa da se fa per tre".


NAT LAN (MASQUERADE) HOWTO

Versione 0.2 - 27 06 2005
Licenza Gnu/GPL
NeCoSi necosi@autistici.org