Consulenze presso Eunet srl, via dell'Artigianato 15, 09122 Cagliari 070 753609 Lun - Ven 08:30-13:00 / 14.30-17.00

Cisco Zone-Based Policy Firewall

Cisco ha introdotto i firewall zone-based policy (ZPF o ZBF) nel 2006 a partire dalla release 12.4(6)T dell’IOS. La tecnologia zone-based prevede che le interfacce vengano assegnate a zone specifiche, con regole di analisi che si applicano al traffico tra zone. Ovviamente rimane il pieno supporto alle funzionalità stateful packet inspection, application inspection, URL filtering e protezione DoS già previste da Cisco IOS Classic Firewall, conosciuto come Context-Based Access Control (CBAC).

Le policies vengono configurate con un linguaggio a struttura gerarchica, Cisco Common Classification Policy Language (C3PL), con cui si definiscono i protocolli da analizzare e si raggruppano più host da sottoporre a singole policies. Le zone stabiliscono dei perimetri di sicurezza nella rete: in pratica definiscono gli ambiti dove il traffico è soggetto a restrizioni, nel momento in cui attraversa zone diverse. Di default il traffico tra zone diverse è proibito. Rispetto a CBAC, l’utilizzo di ZBF non dipende dalle ACL.

 

Come step principali, l’implementazione del firewall zone-based prevede:

  • la definizione delle zone, ad esempio LAN interna, DMZ, WAN;
  • la definizione di classi di traffico (class-maps) a cui vengono applicate determinate policies.

Ad esempio, per ogni coppia di zone “sorgente-destinazione”, come LAN-WAN, si decide cosa possono fare i client della LAN in uscita sulla WAN.

 

Le regole di accesso possono essere configurate per eseguire tre azioni distinte:

  • Inspect – Effettua un’analisi dei pacchetti di tipo stateful, azione equivalente a quella ottenuta con il comando CBAC ip inspect. Questo consente il ritorno del traffico legittimo e il controllo di sessioni multiple generate da protocolli come H.323 o FTP.
  • Drop – Blocca il traffico. E’ lo stesso concetto del “deny” delle ACL.
  • Pass – Consente il traffico. E’ lo stesso concetto del “permit” delle ACL. L’azione di pass comporta che le sessioni non siano tracciate; il permesso è da intendersi in una sola direzione.

 

Inoltre, bisogna tener presenti i seguenti concetti fondamentali:

  • L’assegnazione di un’interfaccia di rete ad una zona prevede che la zona sia stata prima configurata.
  • Un’interfaccia può essere assegnata solo ad una zona.
  • Il traffico è implicitamente consentito tra interfacce appartenenti ad una stessa zona.
  • Il traffico non può passare da un'interfaccia appartenente ad una zona a un'interfaccia non appartenente ad alcuna zona.
  • Se si vuole che un’interfaccia non sia sottoposta alle politiche zone-based, è necessario associare l’interfaccia ad una zona e configurare una regola “pass-all” tra quella zona e le altre zone con le quali si vuole permettere il traffico. La regola “pass-all” è anche  detta dummy policy.
  • Nel momento in cui un’interfaccia fa parte di una zona, tutti i dispositivi collegati a quell’interfaccia apparterranno a quella zona.
  • Si definisce self-zone una zona di sistema corrispondente al router stesso; la self-zone rappresenta l'eccezione per cui tutto il traffico che viene spedito e ricevuto dalla zona self è permesso (se non esplicitamente negato).
  • Non appena il firewall viene configurato, tutte le interfacce IP del router appartengono alla self-zone.

 

 

Configurazione Zone-Based Policy Firewall tramite command line

1) Si crea la zona con il comando zone security.

Router(config)# zone security nome-zona
Router(config-sec-zone)# description descrizione

 

2) Si definiscono le classi di traffico con il comando class-map type inspect.

Router(config)# class-map type inspect [match-any | match-all] class-map-name

Le classi permettono di definire il traffico su cui verranno applicate le policies. La selezione può basarsi su ACL, protocolli TCP. UDP, ICMP, e servizi applicativi come HTTP, SMTP, DNS, etc..

All’interno della class map, i protocolli vengono selezionati con il comando:

Router(config-cmap)# match protocol protocol-name

Se si vuol far riferimento anche ad una access list si usa la sintassi:

Router(config-cmap)# match access-group {access-group | name access-group-name}

Si possono inoltre annidare (nesting) classi e policies per poter creare una struttura gerarchica:

Router(config-cmap)# match class-map nome_class-map

 

3) Si definiscono regole e policies con il comando policy-map type inspect.

Per creare una policy-map:

Router(config)# policy-map type inspect policy-map-name

All'interno della policy appena creata, per specificare le classi di traffico su cui l'azione deve essere eseguita, si usa la sintassi:

Router(config-pmap)# class type inspect class-name

La default class, corrispondente a tutto il traffico rimanente, si specifica con il comando:

Router(config-pmap)# class class-default

L’azione da intraprendere quando il traffico corrisponde al tipo specificato da una certa classe si indica con la sintassi:

Router(config-pmap-c)# pass | inspect | drop [log] | police

 

4) Si applicano le policies sulla coppia di zone sorgente-destinazione con il comando zone-pair security.

Per creare una coppia di zone, detta zone-pair, si usa il comando:

Router(config)# zone-pair security nome_zone-pair source [zona-sorgente | self] destination [zona-destinazione | self]

Per applicare la policy alla coppia di zone si usa il comando:

Router(config-sec-zone-pair)#service-policy type inspect nome_policy-map

 

5) Si assegnano le interfacce del router alle zone con il comando zone-member security.

Router(config-if)#zone-member security nome-zona

 

Nella configurazione delle ZBF da riga di comando, bisogna considerare gli aspetti seguenti:

  • Solo un policy map può essere definita e associata ad una zone-pair security
  • Solo una class map definita con type inspection può essere usata in una policy map di tipo inspect
  • Non ci devono essere overlap di nomi tra class e policy
  • Prima si definisce una zona con il comando "zone security", poi la zona va applicata all'interfaccia con il comando "zone-member security"
  • Se si assegna un’interfaccia ad una zona senza la creazione di policies tramite il comando "zone-pair", tutto verrà negato.
  • Il router non può filtrare il traffico appartenente ad una stessa zona.
  • Il comando zone-member non protegge il router stesso, se non specificato con la self zone. La zona self, creata automaticamente, farà passare tutto.
  • Quando si crea una policy-map, viene aggiunta in maniera predefinita una class-default di tipo drop alla fine della policy.

 

 

Esempio pratico

 

 

Esercizio Pratico

Configuriamo una rete con queste caratteristiche:

LAN to WAN, servizi consentiti: http, https, rdp, icmp, ssh, dns (151.99.0.100 212.216.112.112).
LAN to DMZ, servizi consentiti: ftp, imap, smtp, icmp.
WAN to DMZ, servizi consentiti: smtp, ftp.
WAN to LAN, nessun servizio accessibile
DMZ to WAN, servizi consentiti: smtp, imap, dns.
DMZ to LAN: nessun servizio accessibile

LAN to WAN

Prima si creano le zone

zone security LAN
description Inside Network
!
zone security WAN
description Outside Network


e si definiscono le ACL

ip access-list extended ANTI-SPOOFING
permit ip 192.168.10.0 0.0.0.255 any
deny ip any any
!
ip access-list extended DNS
permit ip 192.168.10.0 0.0.0.255 host 151.99.0.100
permit ip 192.168.10.0 0.0.0.255 host 151.99.125.3
deny ip any any


Quindi si creano le CLASS MAP

class-map type inspect match-any LAN_TO_WAN_CLASS
description Traffico da Lan a Wan
match protocol icmp
match protocol http
match protocol https
match protocol ssh
match protocol user-Rdp


Match-all:

class-map type inspect match-all LAN_TO_WAN_CLASS_SPOOFING
description Nesting, controlla che il traffico dalla Lan verso la Wan provenga dalla re 192.168.10.x
match access-group name ANTI-SPOOFING
match class LAN_TO_WAN_CLASS


In questo caso posso usare una sola class perchè il protocollo è solo il dns. Notare che nel caso precedente i protocolli erano 5

class-map type inspect match-all LAN_TO_WAN_CLASS_DNS
description Queries DNS dalla LAN
match access-group name DNS
match protocol dns


Si definiscono le POLICY MAP

Map "Speciale" che permette di inserire vari parametri avanzati. In questo caso la utilizziamo per abilitare gli audit delle connessioni.

parameter-map type inspect SPECIAL_MAP
audit-trail on


Creiamo una policy che gestisca il traffico dalla Lan verso la Wan

policy-map type inspect LAN_TO_WAN_POLICY
class type inspect LAN_TO_WAN_CLASS_SPOOFING
inspect SPECIAL_MAP
class type inspect LAN_TO_WAN_CLASS_DNS
inspect SPECIAL_MAP


Nella class default specifichiamo drop log per avere i messaggi di LOG nel SYSLOG

class class-default
drop log



5) APPLICO LE ZONE ALLE INTERFACCE

!
int fa 0/1.10
zone-member security LAN
!
int fa 0/0
zone-member security WAN
!

6) APPLICO LE POLICY (nella direzione di traffico desiderata)

!
zone-pair security LAN-to-WAN source LAN destination WAN
description Accesso servizi dalla LAN verso la WAN
service-policy type inspect POLICY_LAN_TO_WAN
!


Nota: Fare attenzione, quando si modifica la policy la zone-pair va reinserita!!!!


7) TROUBLESHOOTING


show policy-map type inspect zone-pair session

show policy-map type inspect zone-pair LAN-to-WAN







######### LAN to DMZ #########

1) DEFINISCO LE ZONE

zone security DMZ
description Services Network



2) DEFINISCO LE ACL

!
ip access-list extended MAIL
!
permit ip  192.168.10.0  0.0.0.255 host 192.168.20.32
deny   ip any any
!

ip access-list extended FTP
!
permit ip  192.168.10.0  0.0.0.255 host 192.168.20.31
deny   ip any any
!




3) DEFINISCO LE CLASS MAP


no class-map type inspect match-any CLASS_LAN_TO_DMZ_MAIL
!
class-map type inspect match-any CLASS_LAN_TO_DMZ_MAIL
description Definisco il traffico Mail dalla Lan verso la Dmz

match protocol smtp
match protocol imap
match protocol icmp
!


no class-map type inspect match-any CLASS_LAN_TO_DMZ_FTP
!
class-map type inspect match-any CLASS_LAN_TO_DMZ_FTP
description Definisco il traffico Ftp dalla Lan verso la Dmz

match protocol ftp
match protocol icmp
!


no  class-map type inspect match-all CLASS_LAN_TO_DMZ_MAIL_SPOOFING
!
!
class-map type inspect match-all CLASS_LAN_TO_DMZ_MAIL_SPOOFING
description Nesting, controlla che il traffico Mail dalla Lan verso la Dmz provenga dalla re 192.168.10.x e vada sul server 192.168.20.32
match access-group name MAIL
match class CLASS_LAN_TO_DMZ_MAIL



no  class-map type inspect match-all CLASS_LAN_TO_DMZ_FTP_SPOOFING
!
!
class-map type inspect match-all CLASS_LAN_TO_DMZ_FTP_SPOOFING
description Nesting, controlla che il traffico Ftp dalla Lan verso la Dmz provenga dalla re 192.168.10.x e vada sul server 192.168.20.31
!
match access-group name FTP
match class CLASS_LAN_TO_DMZ_FTP
!





4) DEFINOSCO LE POLCY MAP


! Creiamo una policy che gestista il traffico dalla Lan verso la Dmz

no policy-map type inspect POLICY_LAN_TO_DMZ
!
policy-map type inspect POLICY_LAN_TO_DMZ

class type inspect CLASS_LAN_TO_DMZ_MAIL_SPOOFING
inspect SPECIAL_MAP

class type inspect CLASS_LAN_TO_DMZ_FTP_SPOOFING
inspect SPECIAL_MAP
!
!!!! Nella class default specifichiamo drop log per avere i messaggi di LOG nel SYSLOG
!
class class-default
drop log
!
exit

exit
!


5) APPLICO LE ZONE ALLE INTERFACCE

!
int fa 0/1.20
zone-member security DMZ
!


6) APPLICO LE POLICY (nella direzione di traffico desiderata)

!
zone-pair security LAN-to-DMZ source LAN destination DMZ
description Accesso servizi dalla LAN verso la DMZ
service-policy type inspect POLICY_LAN_TO_DMZ
!

Nota: Fare attenzione, quando si modifica la policy la zone-pair va reinserita!!!!


7) TROUBLESHOOTING


show policy-map type inspect zone-pair session

show policy-map type inspect zone-pair LAN-to-DMZ







######### DMZ to WAN #########


1) DEFINISCO LE ZONE

--- Già definite



2) DEFINISCO LE ACL

!
ip access-list extended DMZ-MAIL
!
deny   ip  192.168.20.0  0.0.0.255 192.168.10.0 0.0.0.255
permit ip  host 192.168.20.32  any
deny   ip any any
!


ip access-list extended DMZ-FTP
!
deny   ip  192.168.20.0  0.0.0.255 192.168.10.0 0.0.0.255
permit  ip host 192.168.20.31  any
deny   ip any any
!


3) DEFINISCO LE CLASS MAP



no class-map type inspect match-any CLASS_DMZ_TO_WAN_MAIL
!
class-map type inspect match-any CLASS_DMZ_TO_WAN_MAIL
description Definisco il traffico dal server Mail verso la Wan
!
match protocol imap
match protocol smtp
match protocol dns

!

no  class-map type inspect match-all CLASS_DMZ_TO_WAN_MAIL_SPOOFING
!
!
class-map type inspect match-all CLASS_DMZ_TO_WAN_MAIL_SPOOFING
description Nesting, controlla che il traffico Mail dalla Dmz verso la Wan provenga da 192.168.20.32
!
match access-group name DMZ-MAIL
match class CLASS_DMZ_TO_WAN_MAIL
!  


no  class-map type inspect match-all CLASS_DMZ_TO_WAN_FTP
!
!
class-map type inspect match-all CLASS_DMZ_TO_WAN_FTP
description Definisco il traffico dal server Ftp verso la Wan
!
match access-group name DMZ-FTP
match protocol icmp
!


4) DEFINOSCO LE POLCY MAP


! Creiamo una policy che gestista il traffico dalla Dmz verso la Wan

no policy-map type inspect POLICY_DMZ_TO_WAN
!
policy-map type inspect POLICY_DMZ_TO_WAN

!
class type inspect CLASS_DMZ_TO_WAN_MAIL_SPOOFING
inspect SPECIAL_MAP

class type inspect CLASS_DMZ_TO_WAN_FTP
inspect SPECIAL_MAP
!
!!!! Nella class default specifichiamo drop log per avere i messaggi di LOG nel SYSLOG
!
class class-default
drop log
!
exit

exit
!


5) APPLICO LE ZONE ALLE INTERFACCE

--- Già applicate


6) APPLICO LE POLICY (nella direzione di traffico desiderata)

!
zone-pair security DMZ-to-WAN source DMZ destination WAN
description Accesso servizi dalla DMZ verso la WAN
service-policy type inspect POLICY_DMZ_TO_WAN
!

Nota: Fare attenzione, quando si modifica la policy la zone-pair va reinserita!!!!


7) TROUBLESHOOTING


show policy-map type inspect zone-pair session

show policy-map type inspect zone-pair  DMZ-to-WAN






######### WAN to DMZ #########



2) DEFINISCO LE ACL

no ip access-list extended WAN-DMZ
!
!
ip access-list extended WAN-DMZ
!
ip access-list extended WAN-DMZ
!
!
deny   ip  host 192.168.10.0 any
deny   ip  host 192.168.10.255 any
deny   ip  host 192.168.20.0 any
deny   ip  host 192.168.20.255 any
deny   ip  host 192.168.100.0 any
deny   ip  host 192.168.100.255 any
!
deny   ip 192.168.10.0 0.0.0.255 any
deny   ip 192.168.20.0 0.0.0.255 any
deny   ip 192.168.100.0 0.0.0.255 any
!
remark **** Filter incoming traffic for spoofed or illegal address ****
remark **** (RFC 1918, RFC 3330, RFC 3068, Loopback, Unallocated e IANA Reserved) ****
deny   ip host 0.0.0.0 any
deny   ip host 255.255.255.255 any
deny   ip 0.0.0.0 1.255.255.255 any
deny   ip 2.0.0.0 0.255.255.255 any
deny   ip 5.0.0.0 0.255.255.255 any
deny   ip 10.0.0.0 0.255.255.255 any
deny   ip 14.0.0.0 0.255.255.255 any
deny   ip 23.0.0.0 0.255.255.255 any
deny   ip 27.0.0.0 4.255.255.255 any
deny   ip 36.0.0.0 0.255.255.255 any
deny   ip 37.0.0.0 2.255.255.255 any
deny   ip 42.0.0.0 4.255.255.255 any
deny   ip 49.0.0.0 0.255.255.255 any
deny   ip 50.0.0.0 0.255.255.255 any
deny   ip 96.0.0.0 4.255.255.255 any
deny   ip 127.0.0.0 0.255.255.255 any
deny   ip 169.254.0.0 0.0.255.255 any
! deny   ip 172.16.0.0 0.15.255.255 any  ---> per i lab la togliamo
deny   ip 175.0.0.0 0.255.255.255 any
deny   ip 176.0.0.0 0.255.255.255 any
deny   ip 177.0.0.0 0.255.255.255 any
deny   ip 179.0.0.0 0.255.255.255 any
deny   ip 180.0.0.0 0.255.255.255 any
deny   ip 181.0.0.0 0.255.255.255 any
deny   ip 182.0.0.0 0.255.255.255 any
deny   ip 183.0.0.0 0.255.255.255 any
deny   ip 185.0.0.0 0.255.255.255 any
deny   ip 192.0.2.0 0.0.0.255 any
deny   ip 192.88.99.0 0.0.0.255 any
! deny   ip 192.168.0.0 0.0.255.255 any  ---> per i lab la togliamo
deny   ip 198.18.0.0 0.1.255.255 any
deny   ip 223.0.0.0 0.255.255.255 any
deny   ip 224.0.0.0 31.255.255.255 any
deny   ip host 88.88.88.1 any
deny   ip 88.61.52.48 0.0.0.15 any
!
!
!
deny   tcp any any eq 1524
deny   tcp any any eq 27665
deny   udp any any eq 31335
deny   udp any any eq 27444
deny   tcp any any eq 16660
deny   tcp any any eq 65000
deny   tcp any any eq 33270
deny   tcp any any eq 39168
deny   tcp any any eq 1243
deny   tcp any any eq 2222
deny   tcp any any eq 2773
!
!
deny   tcp any any range 6711 6713
deny   tcp any any eq 6776
deny   tcp any any eq 6669
deny   tcp any any eq 7000
deny   tcp any any eq 7215
deny   tcp any any eq 16959
deny   tcp any any eq 27374
deny   tcp any any eq 27573
deny   tcp any any eq 54283
!
!
remark Permit accesso ftp
permit tcp any host 192.168.20.31 eq ftp
permit tcp any host 192.168.20.31 eq ftp-data
!
remark Permit accesso smtp
permit tcp any host 192.168.20.32 eq smtp
!
!
deny   ip any any
!
!



3) DEFINISCO LE CLASS MAP


no  class-map type inspect match-all CLASS_WAN_TO_DMZ_MAIL
!
!
class-map type inspect match-all CLASS_WAN_TO_DMZ_MAIL
description Definisco il traffico dalla Wan verso il server Mail
!
match access-group name WAN-DMZ
match protocol smtp
!


no  class-map type inspect match-all CLASS_WAN_TO_DMZ_FTP
!
!
class-map type inspect match-all CLASS_WAN_TO_DMZ_FTP
description Definisco il traffico dalla Wan verso il server Ftp
!
match access-group name WAN-DMZ
match protocol ftp
!


4) DEFINOSCO LE POLCY MAP


! Creiamo una policy che gestista il traffico dalla Dmz verso la Wan

no policy-map type inspect POLICY_WAN_TO_DMZ
!
policy-map type inspect POLICY_WAN_TO_DMZ

!
class type inspect CLASS_WAN_TO_DMZ_FTP
inspect SPECIAL_MAP

class type inspect CLASS_WAN_TO_DMZ_MAIL
inspect SPECIAL_MAP
!
!!!! Nella class default specifichiamo drop log per avere i messaggi di LOG nel SYSLOG
!
class class-default
drop log
!
exit

exit
!


5) APPLICO LE ZONE ALLE INTERFACCE

--- Già applicate


6) APPLICO LE POLICY (nella direzione di traffico desiderata)

!
zone-pair security WAN-to-DMZ source WAN destination DMZ
description Accesso servizi dalla WAN verso la DMZ
service-policy type inspect POLICY_WAN_TO_DMZ
!

Nota: Fare attenzione, quando si modifica la policy la zone-pair va reinserita!!!!


7) TROUBLESHOOTING


show policy-map type inspect zone-pair session

show policy-map type inspect zone-pair  WAN-to-DMZ
(0 Votes)