Este artigo tem como objetivo apresentar alguns conceitos teóricos básicos sobre o ZBF - Zone Based Firewall-. É apresentada uma configuração básica de uma ZBF num cenário muito simples (router com uma ligação à Internet), mas contudo suficiente para perceber os conceitos básicos. Refira-se que a Cisco aconselha vivamente a utilização desta tecnologia tendo mesmo deixado de desenvolver a antiga ferramenta para implementação mecanismos de firewall stateful num router - CBAC-. Dito isto, a aprendizagem e acompanhamento da evolução das ZBFs é totalmente aconselhável por parte de administradores Cisco. As ZBFs podem suportar (conforme a versão do IOS)
- Firewall de estado ou Stateful inspection
- Application inspection
- Filtragem de pacotes
- Filtragem de URLs
- Firewall transparente
- Suporte para VRF – Virtual routing and forwarding
Com as ZBFs as interfaces são colocadas em zonas. As zonas podem ter qualquer nome atribuído, sendo que nomes como inside, outside ou DMZ são os escolhidos normalmente. As políticas são especificadas contemplando qual o tráfego que pode ser originado e qual a ação que a firewall deve ter sobre o mesmo. Cada uma das situações requer uma política diferente.
Uma zona precisa de ser inicialmente criada e só depois se podem atribuir interfaces a essa zona. Uma interface apenas pode pertencer a uma zona, sendo que uma zona pode ter mais do que uma interface. Existe uma zona por defeito, a self zone, sendo esta uma zona lógica. Para cada pacote dirigido ao router este automaticamente o interpreta como direcionado para a self zone e inversamente o tráfego que sai do router é interpretado como saindo da self zone. Por defeito, todo o tráfego que sai da self zone é permitido, sendo que tal comportamento pode ser alterado. Para todas as restantes zonas criadas administrativamente, não é permitido tráfego entre interfaces de zonas diferentes, sendo apenas permitido se pertenceram à mesma zona.
Se pretendermos que o tráfego entre interfaces colocadas em zonas diferentes seja permitido, temos que criar uma política específica para tal, entrando em equação o conceito de zone pair. Um zone pair, é uma configuração onde é identificado tráfego com origem numa zona para um destino noutra zona. O administrador associa uma série de regras (policy) para esse zone pair, onde especifica o tipo de inspeção a realizar sobre o tráfego e aplica essa policy ao zone pair.
No nosso exemplo, vamos criar duas zonas (inside, outside) e atribuir a interface interna à inside zone e a interface externa à outside zone. Depois criaremos uma policy para inspecionar o tráfego gerado pelos utilizadores com destino à Internet (Cada ligação vai gerar uma entrada na stateful database da firewall do IOS e apenas o tráfego de retorno legitimado pela informação constante nessa base de dados será permitido. Todo o restante é bloqueado. Os conceitos de ZBF aproximam a tecnologia usada aos conceitos aplicados nas firewalls de 2ª e nalguns aspetos de 3 geração)
Num exemplo mais complexo, uma empresa que tenha três interfaces (interna, externa e DMZ), criará 3 zonas onde colocará cada uma das interfaces, inside, outsider e DMZ. Em comparação com o cenário anterior, será criado um zone pair adicional (outside para DMZ) e aplicada uma política que permita que utilizadores na Internet possam enviar tráfego para os servidores colocados na DMZ. Noutro artigo exploraremos uma configuração possível para o efeito.
A Cisco tem uma linguagem para criar as políticas C3PL – Cisco Common Classification Policy Language. O processo para criar uma policy tem 3 componentes:
- Class maps: Identificam tráfego a ser inspecionado. Tal pode ser feito desde o Layer 3 ao Layer 7, incluindo tráfego originado por aplicações específicas. Podem referir acls para identificar tráfego assim como referir outros class maps. Um class map pode especificar que todos os match statemets têm que combinar (match-all) ou que basta uma condição de um match se verificar (match-any). Um class-map por default que albergue todo o tráfego que não é alvo de condições de verificação pode ser usado.
- Policy maps: Acções a serem tomadas após inspeção do tráfego. As acções que podem ser tomadas são inspect (ordena stateful inspection dos tráfego), permit ( permite sem inspecionar), drop, ou log.
- Service policies: Especifica onde é aplicada a policy, identificada por um policy map, num zone pair.
Se um policy map contém múltiplas ações baseadas em diferentes class maps, o policy map é processado do seu inicio até ao fim, aplicando as acões conforme o match do tráfego com as condições definidas nas class maps. Se nenhuma das condições se verificar, entra em vigor a ação por defeito. A default policy para o tráfego que pretende inicar-se numa zona com destino a outra é uma negação implícita, implicit deny . A exceção é o tráfego originado de e para a self zone, que é permitido por defeito. Reveja-se no quadro seguinte as ações que podem ser especificadas num policy map:
- Inspect: Ativa mecanimos de firewall stateful sobre o tráfego, deve ser aplicado no tráfego gerado para a Internet.
- Pass: Permite o tráfego sem criar mecanismos de inspeção. Poderá ser necessário para permitir determinados tipos de tráfego inbound e outbound.
- Drop: Bloqueia o tráfego de circular entre os zone pairs
- Log: Gera mensagens de log. Aplica-se geralmente no tráfego que foi bloqueado
Quando um router recebe um pacote, toma uma decisão sobre o roteamento, encaminhando o pacote para uma interface ou fazendo um drop caso não conheça nenhum destino. Com uma ZBF configurada, o router atentará às políticas definidas e à informação da stateful database. A tabela seguinte mostra o fluxo de tráfego entre várias interfaces de várias zonas, dependendo da configuração. Convém memorizar a informação constante na tabela para efeitos de troubleshooting de ZBFs. Refira-se que Ingress refere-se a tráfego a entrar uma interface e Egress refere-se a tráfego que sai de uma interface.
Interface Ingress (membro de uma zona) | Interface Egress (membro de uma zona) | Existe um Zone pair com uma policy aplicada | Resultado |
---|---|---|---|
Não | Não | Não é relevante | O trágefo é encaminhado |
Não | Sim (qualquer zona) | Não é relevante | O tráfego não é encaminahdo |
Sim (zona A) | Sim (zona B) | Não | O tráfego não é encaminhado |
Sim (zona A) | Sim (zona B) | Sim | A policy é aplicada |
Se existe um zone pair que identifica tráfego entre duas zonas e a policy não está aplicada nesse zone pair, o comportamento por defeito é não encaminhar o tráfego como se nenhum zone pair existisse.
Uma configuração com recurso a ZBFs inclui os seguintes componentes:
- Zonas
- Interfaces que são membros dessas zonas
- Class maps que identificam o tráfego
- Policy maps que usam class maps para identificar o tráfego e que especificam as ações a tomar
- Zone pairs que identificam um fluxo de tráfego unidirecional, a iniciar-se em dispositivos pertencentes a uma zona e roteados para outra interface pertencente a outra zona
- Service policy, que associa um policy map a um zone pair.
Com isto em mente, vamos criar uma configuração que implemente uma ZBF num router com um acesso à Internet:
Zonas
Vamos criar uma zona para a rede interna (LAN) e outra zona para a conter a interface pública ou seja a internet. Podemos atríbuir qualquer nome à zona mas no presente exemplo optamos por inside para a LAN e outisde para a zona que se liga à Internet. Optou-se por colocar essa informação na descrição das zonas (comandos facultativos)
RTHOME(config)#zone security inside
RTHOME(config-sec-zone)#description LAN_PRIVADA
RTHOME(config-sec-zone)#exit
RTHOME(config)#zone security outside
RTHOME(config-sec-zone)#description INTERNET
RTHOME(config-sec-zone)#exit
Colocar as interfaces nas respetivas zonas
RTHOME(config)#interface vlan1
RTHOME(config-if)#zone-member security inside
exit
RTHOME(config)#interface vlan2
RTHOME(config-if)#zone-member security outside
exit
Vamos criar as Class maps que identificam o tráfego. Escolhemos aleatoriamente alguns protocolos para figurarem no exemplo. Obviamente, este passo exige um planeamento prévio sobre o que é pretendido ao nível das políticas e da segurança.
RTHOME(config)#class-map type inspect match-any OUT_TRAFFIC_INTERNET
RTHOME(config-cmap)#match protocol dns
RTHOME(config-cmap)#match protocol ftp
RTHOME(config-cmap)#match protocol tcp
RTHOME(config-cmap)#match protocol udp
RTHOME(config-cmap)#match protocol ssh
RTHOME(config-cmap)#match protocol smtp
RTHOME(config-cmap)#match protocol icmp
RTHOME(config-cmap)#match protocol http
RTHOME(config-cmap)#match protocol https
Vamos criar uma policy map que vai referenciar a class map previamente criada para identificar o tráfego. Após essa referência é configurada a ação a tomar.
RTHOME(config-pmap)#class type inspect OUT_TRAFFIC_INTERNET
RTHOME(config-pmap-c)#inspect
Criamos agora o zone pair que identifica o sentido (unidirecional do tráfego) e o sercice policy que referencia o Policy map previamente configurado.
RTHOME(config)#zone-pair security PRIVATE_LAN_TO_INTERNET source inside destination outside
RTHOME(config-sec-zone-pair)#service-policy type inspect INTERNET_TRAFFIC
RTHOME(config-sec-zone-pair)#exit
RTHOME(config)#
Obviamente que terá de ser configurado PAT no Router para permitir que os disporitivos da LAN acedema à Internet.
ip access-list standard ACL_NAT
RTHOME(config-std-nacl)#permit 192.168.1.0 0.0.0.255
RTHOME(config-std-nacl)#exit
RTHOME(config)#
RTHOME(config)#interface vlan1
RTHOME(config-if)#ip nat inside
RTHOME(config-std-nacl)#exit
RTHOME(config)#interface vlan2
RTHOME(config-if)#ip nat outside
RTHOME(config-if)#exit
RTHOME(config)#ip nat inside source list ACL_NAT interface Vlan2 overload
Este exemplo deve servir como base para entender os conceitos das ZBFs. Contudo a configuração mostrada funciona perfeitamente num equipamento doméstico ou um router de uma pequena empresa.
Para saber mais
- Stateful firewall: http://en.wikipedia.org/wiki/Stateful_firewall
- Diferenças entre CBAC e ZBF: http://www.cisco.com/en/US/prod/collateral/vpndevc/ps5708/ps5710/ps1018/prod_white_paper0900aecd806f31f9.html
Fonte: Cisco CCNA Security Official Cert Guide