NAT per esporre un server WEB – Cisco ASA

Una delle applicazioni principali di un firewall è quella di esporre un servizio all’esterno in (maggiore) sicurezza, limitando comunque l’accesso da internet al server che il servizio sta fornendo.

In parole povere, se desidero pubblicare un server web, voglio che soltanto la porta 80 sia accessibile, mentre tutto il resto delle porte debbono essere filtrate. A questo scopo si usano due delle colonne portanti delle configurazioni (di base) dei firewall: il NAT statico ed il filtraggio mediante Access List.

Il NAT (Network Access Translation) statico mi consente di rendere visibile “all’esterno” su un determinato indirizzo IP, un server che si trova su una subnet protetta dal firewall, con un indirizzo diverso. Il firewall si frappone tra “rete esterna” e subnet interna di residenza del server, mascherandone il reale indirizzo IP.

Il filtraggio mediante access list è la più  semplice e basilare forma di filtraggio del traffico di rete che un firewall può eseguire: in sostanza filtriamo in base ad indirizzo di provenienza, ed indirizzo e porta di destinazione il traffico. Una access list prende la forma di una lista ordinata di regole che vengono applicate ad una determinata interfaccia ed un determinato verso del traffico di rete (spesso indicato come ingress, in ingresso al firewall,  ed egress, in uscita dal firewall).

Supponiamo di avere applicato all’interfaccia outside del firewall, in ingresso, l’insieme di regole che segue:

Azione Origine Destinazione  Protocollo Porta
permit 10.10.10.100/32 192.168.100.100/32 tcp 80
deny 10.10.20.0/24 192.168.100.100/32 tcp 80
permit 10.10.0.0./16 192.168.100.100 tcp 80
deny any any ip

Ogni pacchetto in ingresso viene valutato, e se origine e destinazione soddisfano le condizioni poste da una riga, viene applicata l’azione corrispondente, altrimenti si passa alla valutazione della riga successiva. La tabella in esempio consente a tutti i pacchetti tcp inviati dall’indirizzo ip 10.10.10.100 a 192.168.100.100 verso la porta 80 di raggiungere il server, ma non a quelli diretti, ad esempio, alla porta 53.

Tutto il traffico dalla rete 10.10.20.0 verso il server viene bloccato, ma il traffico da qualunque altra rete 10.10.0.0/16 verso la porta 80 del server è consentito. L’ultima regola è di norma sottintesa, e dà istruzione di bloccare qualunque altro tipo di traffico. Conviene scriverla, per avere un’indicazione degli hit count (vale a dire di quante volte viene utilizzata).

Un esempio pratico.

Supponiamo di avere una configurazione come quella in figura. Il nostro obiettivo è quello di rendere visibile sulla rete esterna, all’indirizzo 192.168.100.100 i servizi di un server web.

Configurazione usata nell’esempio

Come anticipato, non vogliano che tutti servizi (per meglio dire tutte le porte) del server siano accessibili, per cui il server viene posto alle spalle di un firewall (in questo caso il 5505 che viene fornito dall’emulatore Cisco Packet Tracer).

Nella configurazione del firewall, assegnamo innanzi tutto gli indirizzi al’interfaccia outside(192.168.100.1) e inside(192.168.1.1).

interface Ethernet0/0
   switchport access vlan 2
interface Ethernet0/1
...
interface Vlan1
   nameif inside
   security-level 100
   ip address 192.168.1.1 255.255.255.0

interface Vlan2
   nameif outside
   security-level 0
   ip address 192.168.100.1 255.255.255.0

Il  server è connesso all’interfaccia interna, all’indirizzo 192.168.1.100.

Come detto, desideriamo che questo server sia visibile dall’esterno, non con il suo indirizzo reale, ma piuttosto con un indirizzo che viene virtualmente assegnato all’interfaccia esterna del firewall; useremo l’indirizzo IP 192.168.100.100. Per ottenere questo risultato usiamo un NAT statico, vale a dire configuriamo il firewall in modo tale che, quando arriva sull’interfaccia esterna un pacchetto destinato all’indirizzo IP 192.168.100.100, il firewall lo accetti  e lo inoltri all’interfaccia interna con l’indirizzo 192.168.1.100 (quello del server).
A questo scopo eefiniamo un NETWORK OBJECT (vale a dire un contenitore che può contenere un indirizzo, un servizio, etc.) di nome WebServer, cui associamo un indirizzo ed un nat statico.

La configurazione è semplicissima:

ciscoasa(config)#object network WebServer
ciscoasa(config-network-object)#host 192.168.1.100
ciscoasa(config-network-object)#nat (inside,outside) static 192.168.100.100

 

Il risultato di questa operazione si può vedere, ad esempio, con il comando show xlate, che ci mostra tutti i NAT presenti nel firewall; di seguito il risultato, che è piuttosto espressivo:

ciscoasa#sh xlate

1 in use, 1 most used Flags: D – DNS, e – extended, I – identity, i – dynamic, r – portmap, s – static, T – twice, N – net-to-net NAT from inside:192.168.1.100/32 to outside:192.168.100.100/32 flags s idle 00:55:54, timeout 0:00:00

In questo modo abbiamo dato istruzione al firewall di associare un indirizzo IP virtuale all’interfaccia esterna.

Per verificare che le cose stiano proprio così possiamo dare dal PC esterno il comando arp-a. Vediamo che ai due indirizzi IP (del firewall e quello nattato del server) corrisponde lo stesso mac address.

PC>arp -a
Internet Address Physical Address Type
192.168.100.1 00d0.bc34.4630 dynamic
192.168.100.100 00d0.bc34.4630 dynamic

Se cerchiamo di raggiungere dall’esterno il server web, scopriamo che non è ancora accessibile. Infatti il firewall di default scarta tutte le connessioni che iniziano da una rete meno sicura e cercano di raggiungere una rete più sicura (quella interna). Dobbiamo dare istruzioni al firewall affinché accetti connesioni sulla porta 80 per l’indirizzo su cui abbiamo esposto il server.

A questo scopo creiamo una access-list che applichiamo all’interfaccia outside. La access list è semplicissima e dà semplicemente l’indicazione: consenti la connessione da qualunque indirizo IP all’host 192.168.100.100 sulla porta 80 (www).

access-list outside_access_in extended permit tcp any host 192.168.100.100 eq www

Il comando successivo applica l’access-list all’interfaccia esterna in ingresso (in):

access-group outside_access_in in interface outside

Il risultato finale è quello che vediamo dal browser di PC0:

Il browser accede al server in Nat statico

Buon divertimento.

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. Usiamo i cookies per ragioni tecniche. Teniamo in alta considerazione la tua privacy.

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi