Archivi tag: firewall

PIX 501: Dropped UDP DNS reply from outside to inside

Recentemente, spulciando i log del mio PIX ho notato una sfilza di entry del tipo:

%PIX-4-410001: Dropped UDP DNS reply from outside:151.99.125.2/53 to inside:****/24077; packet length 636 bytes exceeds configured limit of 512 bytes

Ora, non so perchè i DNS che sono solito utilizzare inviino delle reply da 636 bytes, fatto sta che dando un’occhiata alla configurazione del mio PIX ho trovato la seguente direttiva:

fixup protocol dns maximum-length 512

Ecco l’inghippo. Entro in modalità di configurazione e digito:

fixup protocol dns maximum-length 680

Lancio un write mem per salvare la configurazione ed il problema è stato risolto… in men che non si dica.

See ya.

PIX 501 e logging su una linux box

Un’operazione fondamentale nell’ambito dell’amministrazione di rete o di sistema consiste nella raccolta dei log e nella successiva analisi degli stessi.

Ora, tale raccolta può avvenire localmente (ovvero direttamente sui dispositivi di rete interessati) e/o nell’ambito di server dedicati, detti logserver. E’ buona pratica, prima di mettere in produzione uno o più di questi server specializzati nella raccolta dei log, effettuare un hardening del sistema, oltre ad adottare politiche di accesso ristretto. Ciò si rende necessario poichè i log devono rimanere intatti e devono essere protetti da eventuali operazioni di tampering (manomissione, alterazione) messe in atto da un possibile attaccante.

Dopo questa breve premessa, vediamo come abilitare il logging remoto su una linux box e come reindirizzare le informazioni registrate dal nostro firewall (nella fattispecie un PIX 501) verso il logserver stesso.

Linux Box

Per prima cosa occorre accedere in scrittura al file syslogd presente nella directory /etc/default:

nightfly@nightbox:~$ sudo nano /etc/default/syslogd

A questo punto dovremmo visualizzare la seguente stringa:

SYSLOGD=””

alla quale dovremo aggiungere le opzioni -r e -m 0:

SYSLOGD=”-r -m 0″

Nella fattispecie, -r abilita il logging remoto mentre -m 0 evita di visualizzare ogni tot minuti (20 per default) entry del tipo — MARK — (una sorta di keepalive) all’interno del file di log.

Ora accediamo al file /etc/syslog.conf:

nightfly@nightbox:~$ sudo nano /etc/syslog.conf

ed aggiungiamo la seguente stringa:

local4.4 /var/log/pix.log

dove local4 è il nome usato da syslogd (ovvero il demone che effettua le operazioni di logging) per identificare il firewall, mentre il 4 dopo il . indica il livello di logging che deve essere applicato per il dispositivo di rete in questione. In particolare, i livelli di logging utilizzabili sono i senguenti:

0 – Emergency (emerg)
1 – Alerts (alert)
2 – Critical (crit)
3 – Errors (err)
4 – Warnings (warn)
5 – Notification (notice)
6 – Information (info)

7 – Debug (debug)

Maggiore è il livello di logging, più precise saranno le informazioni salvate. Da notare che ad una maggiore precisione corrisponde un maggior numero di dati registrati, con conseguente saturazione dei file di log in tempi piuttosto brevi (ecco perchè nell’esempio ho scelto il livello 4 e non il livello 7).

Per ciò che concerne la stringa:

/var/log/pix.log

essa specifica il file in cui dovranno essere raccolte le informazioni provenienti dal PIX.

Poichè stiamo utilizzando un file dedicato, è inutile salvare tali informazioni anche su /var/log/syslog. Per fare quindi in modo che ciò non avvenga devo aggiungire la stringa:

local4.none

nelle varie sezioni del file syslog.conf. Ad esempio:

*.*;auth,authpriv.none,local4.none -/var/log/syslog

per la sezione dedicata ai tentativi di autenticazione, oppure:

*.=debug; auth,authpriv.none; news.none;mail.none -/var/log/debug local4.none

per la sezione dedicata alle informazioni di livello 7 (debug), e così via.

Per evitare che il file di log dedicato al PIX raggiunga dimensioni eccessive è buona norma attivare il logrotate. Occorre dapprima creare il file pix nella directory /etc/logrotate.d/

nightfly@nightbox:~$ sudo nano /etc/logrotate.d/pix

ed all’interno di tale file aggiungere le seguenti direttive:

/var/log/pix.log {

rotate 7

daily

compress

missingok

notifempty

}

Nella fattispecie, ogni giorno (daily) verrà generato un nuovo file pix.log, archiviando automaticamente il logfile del giorno precedente. Inoltre, la durata degli archivi è pari ad una settimana (rotate 7), dopodichè essi verranno cancellati.

Riavviamo syslogd per rendere effettive le nuove impostazioni:

nightfly@nightbox:~$ sudo /etc/init.d/sysklogd restart

Verifichiamo che il nostro logserver sia effettivamente in ascolto, digitando:

nightfly@nightbox:~$ sudo nmap -sU localhost

Se visualizzeremo il seguente output:

514/udp  open|filtered syslog

significa che la linux box è pronta a ricevere i log provenienti dal PIX.

PIX 501

Non ci resta che abilitare il logging sul PIX, specificando l’indirizzo del logserver:

firewall(config)# logging on
firewall(config)# logging timestamp
firewall(config)# logging trap informational
firewall(config)# logging facility 20
firewall(config)# logging host inside <ip del logserver>

Salviamo le nuove impostazioni mediante il comando

firewall(config)# write mem

ed abbiamo finito. See ya.

Aggiornamento

Se state utilizzando rsyslog anzichè il classico syslog non dovete apportare alcuna modifica al file /etc/default/syslogd, in quanto tale procedura risulta obsoleta. Piuttosto, dovete mettere mano al file /etc/rsyslog.conf:

nightfly@nightbox:~$ sudo nano /etc/rsyslog.conf

ed in seguito decommentare le stringhe:

$ModLoad imudp
$UDPServerRun 514

Riavviate dunque rsyslog digitando:

nightfly@nightbox:~$ sudo service rsyslog restart

ed avete finito.

Aggiornare IOS e PDM su Cisco PIX 501

Data la scarsa documentazione presente in rete, ho pensato di pubblicare una piccola guida su come aggiornare la IOS (che in realtà si chiama Finesse) ed il PDM (PIX Device Manager) del Cisco PIX 501.

Tale modifica si rende necessaria in quanto non è possibile utilizzare il PDM con sistemi operativi abbastanza recenti, quali Windows XP e Windows Vista. Inoltre, il file associato alla IOS e quello relativo al PDM devono sempre essere allineati, dunque è fortemente sconsigliato effettuare l’upgrade del PDM lasciando invariata la versione di IOS.

Fatte queste premesse, veniamo a noi. Per prima cosa occorre utilizzare un programmino che permetta di lanciare un servizio di server TFTP sulla nostra macchina. Personalmente vi consiglio di usare tftp32, programmino semplice, veloce ed affidabile. Potete scaricarlo da qui, è gratuito.

Ora scarichiamo l’ultima versione di IOS disponibile per il nostro firewall, ovvero la 6.3(5), e la relativa versione di PDM (la 3.0(4)). Entrambi i file li potete scaricare direttamente da qui (è necessario un account CCO).

Avviamo il server TFTP sulla nostra macchina, facendo attenzione che sia la IOS che il PDM si trovino nella stessa directory dell’eseguibile. Colleghiamo il nostro PC al firewall con il classico cavo di rete (straight), allacciato ad una delle interfacce “inside”. Fatto ciò, utilizziamo un cavo rollover per connettere la porta COM del nostro PC con la porta console del firewall, apriamo Hyperterminal (oppure Putty) e settiamo i seguenti parametri di configurazione:

1) Bit per secondo: 9600

2) Bit di dati: 8

3) Parità: nessuno

4) Bit di stop: 1

5) Controllo del flusso: Hardware

Premiamo invio e dovremmo visualizzare il prompt del nostro firewall.

Digitiamo adesso i seguenti comandi:

pixfirewall# copy tftp flash:image

Address or name of remote host [0.0.0.0]? 192.168.2.2

Source file name [cdisk]? pix635.bin

copying tftp://192.168.2.2/pix635.bin to flash:image

[yes|no|again]? yes

Dove 192.168.2.2 è l’indirizzo IP del nostro PC, sul quale è in esecuzione il server TFTP.

Se tutto è andato a buon fine dovremmo vedere in output il seguente risultato:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!
Received 2101248 bytes
Erasing current image
Writing 1978424 bytes of image
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Image installed

Passiamo adesso al PDM. Digitiamo i comandi:

pixfirewall# copy tftp flash:pdm

Address or name of remote host [0.0.0.0]? 192.168.2.2

Source file name [cdisk]? pdm-304.bin

copying tftp://172.16.3.2/pdm-304.bin to flash:pdm

[yes|no|again]? yes

e successivamente verrà stampato a video il seguente risultato:

Erasing current PDM file
Writing new PDM file
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
PDM file installed.

Bene, il gioco è fatto. Non ci resta che installare sul PC che useremo per gestire il nostro PIX una versione di JVM (Java Virtual Machine) <= 1.4.3, poichè con le versioni successive il corretto funzionamento del PDM non è garantito. Potete scaricare la JVM versione 1.4.2 da qui.

Personalmente, prima di installare tale versione di JVM ho disinstallato tutte le altre versioni (più recenti) che si trovavano sul mio sistema, in modo da prevenire eventuali problemi di funzionamento futuri associati al PDM.

Una volta completata l’installazione della JVM apriamo il nostro browser e digitiamo:

https://192.168.2.1

dove 192.168.2.1 è l’indirizzo IP dell’interfaccia “inside” a cui è connessa la nostra LAN.

Appena vi comprarirà la finestra per l’inserimento di username e password, lasciate vuoto il campo username mentre nel campo password inserite la stessa parola chiave scelta per accedere alla modalità enable dal prompt del firewall.

Sicuramente il browser segnalerà che il certificato di autenticità è scaduto. Non preoccupatevi e accettatelo in modo permanente.

Dopo un ulteriore inserimento delle opportune credenziali di accesso e dopo che il PDM avrà caricato in locale tutte le impostazioni relative al nostro firewall, sarà finalmente possibile utilizzare questa GUI per customizzare completamente il nostro piccolo, ma utilissimo, dispositivo.

La guida termina qui, a presto.

Configurare un firewall Cisco PIX 501

Abbiamo già visto come configurare il router Cisco SOHO 77 (alias Cisco 827). Adesso vedremo come proteggere la nostra LAN configurando un firewall di casa Cisco, ovvero il PIX 501 (vedi immagine sottostante).

product-601333.jpg

Per prima cosa settiamo il nome ed il livello di sicurezza associato all’interfaccia esterna ed all’interfaccia interna che stiamo utilizzando (dopo essere entrati nella modalità di configurazione digitando i comandi ena e successivamente conf t):

pixfirewall(config)# nameif ethernet0 outside security0

pixfirewall(config)# nameif ethernet1 inside security100

Come potete facilmente notare, l’interfaccia ethernet0 l’abbiamo chiamata “outside” e ad essa abbiamo associato il livello di sicurezza “security0”. Discorso simile riguarda l’interfaccia ethernet1.

Impostiamo ora la velocità delle interfacce precedentemente menzionate:

pixfirewall(config)# interface ethernet0 auto

pixfirewall(config)# interface ethernet1 100full

Nella fattispecie, l’interfaccia esterna negozia automaticamente la velocità in base al dispositivo ad essa collegato, mentre l’interfaccia interna lavora alla velocità di 100 Mbit/sec in full duplex.

Impostiamo la password per la modalità enable:

pixfirewall(config)# enable password <vostrapass>

Tale password verrà salvata all’interno del file di configurazione in forma cifrata.

Definiamo l’hostname per il nostro firewall:

pixfirewall(config)# hostname <hostname_del_firewall>

Associamo all’interfaccia esterna ed a quella interna i rispettivi indirizzi IP e subnet mask:

pixfirewall(config)# ip address outside 192.168.100.2 255.255.255.252

pixfirewall(config)# ip address inside 172.30.4.1 255.255.255.0

Ovviamente la scelta della classe privata di indirizzi IP e della relativa maschera di sottorete è a vostra discrezione.

Definiamo adesso l’ARP timeout, ovvero ogni quanti secondi la tabella dei MAC address appartenente al nostro firewall deve essere svuotata:

pixfirewall(config)# arp timeout 14400

Definiamo, inoltre, la cosiddetta MTU, ovvero la massima dimensione dei pacchetti che possono transitare attraverso l’interfaccia:

pixfirewall(config)# mtu outside 1500

pixfirewall(config)# mtu inside 1500

Ora è necessario andare a mettere mano su una delle parti più delicate della nostra configurazione, ovvero il NAT. Tramite il NAT, infatti, sarà possibile tradurre un indirizzo privato appartenente alla nostra rete in un indirizzo pubblico, permettendoci di navigare ed accedere alle risorse dislocate su Internet. Per fare ciò occorre digitare:

pixfirewall(config)# global (outside) 1 interface

pixfirewall(config)# nat (inside) 1 172.30.4.0 255.255.255.0

In questo modo stiamo imponendo al firewall di tradurre gli indirizzi privati appartenenti alla LAN interna (172.30.4.0/24) nell’indirizzo associato all’interfaccia esterna, ovvero 192.168.100.2. Sarà il router, successivamente, ad effettuare un nuovo NAT sull’indirizzo privato dell’interfaccia outside, traducendolo nell’indirizzo pubblico assegnatoci dall’ISP.

Per poter uscire su Internet è inoltre necessario definire nell’ambito del firewall una rotta statica mediante il seguente comando:

pixfirewall(config)# route otuside 0.0.0.0 0.0.0.0 192.168.100.1

In questo modo stiamo dicendo al firewall di instradare tutto il traffico destinato ad un indirizzo non presente all’interno della sua tabella di routing verso l’indirizzo 192.168.100.1, ovvero il router. Sarà quindi compito del router, tramite una nuova default route, far si che il traffico venga indirizzato verso l’esterno.

Ora, supponiamo che all’interno della nostra LAN sia presente una risorsa (ad esempio un WEB server) che debba essere necessariamente contattabile dall’esterno. Ovviamente, la cosa migliore da fare in questo caso sarebbe quella di posizionare il server nella DMZ ma per semplicità tale server verrà dislocato nell’ambito della LAN stessa.

L’indirizzo IP del server è 172.30.4.2, quindi occorrerà digitare:

pixfirewall(config)# static (inside, outside) 192.168.100.2 172.30.4.2 netmask 255.255.255.0 0 0

dove l’indirizzo IP dell’interfaccia outside deve essere inserito sempre PRIMA dell’indirizzo privato associato al server.

Definiamo adesso il tipo di traffico che deve essere accettato in ingresso all’interfaccia esterna. E’ possibile fare ciò mediante un’ACL nominale:

pixfirewall(config)# access-list inbound permit tcp any host 192.168.100.2 eq 80

pixfirewall(config)# access-list inbound permit icmp any host 192.168.100.2

In tal modo il nostro Web server potrà essere contattato attraverso la porta 80 e risponderà ai ping eseguiti dall’esterno. Non ci resta che associare l’ACL appena creata all’interfaccia di interesse:

pixfirewall(config)# access-group inbound in interface outside

Sarebbe utile, inoltre, consentire la gestione da remoto del firewall, senza doversi collegare necessariamente a tale dispositivo mediante cavo console (altrimenti conosciuto come rollover). Per fare ciò è necessario abilitare Telnet:

pixfirewall(config)# telnet 172.30.4.0 255.255.255.0 inside

ovvero stiamo imponendo al firewall di accettare esclusivamente le connessioni telnet provenienti dall’interfaccia interna, nella fattispecie dagli host della LAN.

pixfirewall(config)# telnet timeout 5

con questo comando il firewall chiuderà qualunque sessione Telnet dopo 5 minuti di inattività.

Occorre notare che il nostro firewall (per default) non permette il transito di echo-reply provenienti dall’interfaccia “outside” e dirette verso l’interfaccia “inside”. Ciò significa che qualunque ping originato dalla LAN e diretto verso l’esterno non potrà ricevere risposta. Per evitare ciò, basta insirire le seguenti regole all’ACL “inbound” precedentemente creata:

 access-list inbound permit icmp any any echo-reply
 access-list inbound permit icmp any any time-exceeded
 access-list inbound permit icmp any any unreachable
 access-list inbound permit icmp any any source-quench

Bene, salviamo la nostra configurazione ed il gioco è fatto:

write memory

La guida termina qui. Nei prossimi post vedremo come gestire il nostro firewall mediante PDM (PIX Device Manager). A presto.