Firewall Hierárquico em SDN
Firewall Hierárquico em SDN
REFERÊNCIA BIBLIOGRÁFICA
TAKATA, Ruy Minoru Ito. Modelo de Firewall para Redes Definidas por
Software com Verificação de Conflitos de Regras Hierárquicas. 2017. 80f.
Dissertação de Mestrado – Instituto Tecnológico de Aeronáutica, São José dos Campos.
CESSÃO DE DIREITOS
NOME DO AUTOR: Ruy Minoru Ito Takata
TITULO DO TRABALHO: Modelo de Firewall para Redes Definidas por Software com
Verificação de Conflitos de Regras Hierárquicas.
TIPO DO TRABALHO/ANO: Dissertação / 2017
ITA
Dedico aos meus pais, Minoru e Tereza
(in memoriam), e a minha irmã, Erika.
Agradecimentos
Agradeço à minha orientadora Profa . Dra . Cecı́lia de Azevedo Castro César por todo
apoio, conhecimento e paciência nesses meses todos.
Agradeço ao meu chefe e amigo, Wagner Antônio Maimoni, e também aos amigos de
equipe, Antônio Alvim de Oliveira Filho, Eduardo Yoshida Salomão, Renato Ribeiro da
Silva e Ronaldo Hideki Yamada, pelo apoio e por entender minha ausências para as aulas.
Agradeço ao amigo Rogério Marinke, pelas dicas sem as quais meu ingresso no mes-
trado não teria acontecido.
Agradeço a todos os professores da Fatec Ourinhos e do ITA que me deram aula e
contribuı́ram em todo meu percurso acadêmico.
Agradeço a todos os funcionários e alunos do ITA com os quais tive contato. Todos
ajudaram direta ou indiretamente para a conclusão desse trabalho.
“Viva como se fosse morrer amanhã. Aprenda como se fosse viver eternamente.”
— Mahatma Gandhi
Resumo
Organizations which are distributed in more than a site find some difficulties to keep
the coherence between the security policy between the sites. When a new rule of security
policy is established in a firewall of every one of the organization’s sites, is expected that
the same rule does not contradict the general organization security policy, situation that
could cause the whole system’s vulnerability. To conserve this global coherence giving the
permission of a kind of flexibility about the non-conflicted local security policy definitions
is a very hard-working process, usually done manually. At the big organizations, with
lots of established defined rules, these actions are not giving the results like they were
expected. The Software Defined Networking (SDN) paradigm facilitates the hierarchical
architectures definitions which allow the strengthen in this environment of distributed ad-
ministration. This work developed a hierarchical firewall application in SDN environment
that verifies the local sites security policy coherence from the definition of the superior
hierarchical level rules. The developed system keeps the coherence between the rules auto-
matically. The verification is performed at the time of rule insertion, not interfering with
the normal performance of the firewall. The performance evaluation indicated a reduced
insertion time.
Lista de Figuras
FIGURA 2.1 – Arquitetura de uma rede SDN usando protocolo OpenFlow. Imagem
retirada de (OPEN NETWORKING FOUNDATION, 2016) . . . . . . . . 22
FIGURA 2.2 – Fluxo do pacote dentro de um switch OpenFlow. Imagem retirada
de (OPEN NETWORKING FOUNDATION, 2015) . . . . . . . . . . . . . . 24
FIGURA 2.3 – Exemplo de comando para adicionar regra ao firewall do Ryu. . . . 28
TABELA 2.1 – Exemplo de como a ordem das regras de firewall podem fazer diferença 27
TABELA 2.2 – Campos disponı́veis para o firewall do Ryu. Informações retiradas
do código fonte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
TABELA 2.3 – Relação de URIs e métodos disponı́veis no firewall do Ryu. Infor-
mações retiradas de (RYU PROJECT TEAM, 2014) . . . . . . . . . . . 30
1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1 Problema de Pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3 Método de Pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4 Organização do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2 Fundamentação Teórica . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1 Redes Definidas por Software . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1.1 Funções Virtuais de Rede . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.2 Protocolo OpenFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.3 Controlador SDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1 Firewall em SDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3 Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1 Firewall Hierárquico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 Verificação de Conflitos de Regras . . . . . . . . . . . . . . . . . . . . . 38
3.3 Discussão dos Trabalhos Relacionados . . . . . . . . . . . . . . . . . . 47
5 Verificação de Resultados . . . . . . . . . . . . . . . . . . . . . . . 61
5.1 Ambiente de Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.2 Teste de Funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3 Teste de Desempenho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.4 Comparação com Trabalhos Relacionados . . . . . . . . . . . . . . . . 70
6 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.1 Limitação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.2 Sugestões para Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . 73
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Nesse tipo de ambiente com controladores fisicamente distribuı́dos, grande parte das
soluções disponı́veis atualmente aplicam o conceito de “controladores logicamente centra-
lizados”, onde todos eles executam as mesmas aplicações e compartilham a mesma visão
global da rede. Ou seja, se um administrador de rede de uma filial quiser implantar uma
polı́tica de firewall especı́fica para sua localidade, será necessário fazer uma análise para
garantir que essas regras não entrem em conflito com outras definidas pela administração
central da rede.
Outros estudos utilizam o termo hierárquico relacionado a organização das regras em
árvores criadas para melhorar o desempenho do firewall em redes de alto tráfego. A
organização em hierarquia portanto parece promissora do ponto de vista de desempenho
e segurança.
1.2 Objetivo
O objetivo desse trabalho é criar um ambiente virtual de rede SDN com mais de uma
localidade, cada um com seu controlador executando uma aplicação de firewall com regras
próprias. Essas regras devem estar em harmonia com as regras definidas em uma aplicação
de firewall executando em um controlador em um nı́vel superior, gerido pela administra-
ção central da organização. Nesse nı́vel hierárquico superior serão colocadas regras que
expressem as polı́ticas definidas pela alta gestão da organização, e que não podem ser des-
respeitadas pelas localidades, como por exemplo, regras que proı́bam compartilhamento
de arquivos entre as estações de trabalho da rede.
Isso deve ser conseguido através da camada de aplicação de forma independente da
camada de controle, pois dessa maneira, a aplicação de firewall desenvolvida pode ser
portada para outros ambientes SDN que utilizem controladores diferentes. Essa inde-
pendência é uma caracterı́stica desejável devido ao fato de atualmente existirem diversas
plataformas de controle diferentes.
A hipótese de pesquisa é que a utilização de aplicações de firewall em hierarquia
rodando em ambiente SDN fortalece a segurança de uma corporação com ambiente distri-
buı́do. Essa integração deve garantir a coerência das regras, evitando de forma automática
os conflitos que podem haver em diferentes localidades da mesma corporação.
• Definição de regras de segurança: definição de algumas regras globais que não podem
ser sobrepostas, e de algumas regras locais que devem permanecer válidas;
• Criação de uma massa de teste com diversos fluxos de rede que conflitem com as
regras de segurança definidas, e de outros que não conflitem.
Este capı́tulo aborda diversos conceitos utilizados para a elaboração desta dissertação.
A sessão 2.1 apresenta a definição de SDN e de seu principal protocolo, o OpenFlow,
citando também alguns de seus controladores. A sessão 2.2 apresenta alguns conceitos de
firewall, e como o firewall pode ser implementado utilizando SDN.
A ONF (Open Network Foundation) é uma organização voltada para o usuário dedi-
cada a promoção e adoção de SDN através do desenvolvimento de padrões abertos. Essa
nova abordadem separa o controle da rede dos encaminhadores de pacote, e é direta-
mente programável (OPEN NETWORKING FOUNDATION, 2017a). Isso torna a rede mais
dinâmica, gerenciável, economicamente viável e adaptável. Essas caracterı́sitcas permi-
tem aos administradores maior programabilidade, automação e controle. Usar um padrão
aberto para implementar SDN permite maior agilidade e reduz o trabalho de desenvolvi-
mento e o custo operacional, e permite ao administrador utilizar as melhores tecnologias
a medida que elas são desenvolvidas.
Segundo (OPEN NETWORKING FOUNDATION, 2017b), as caracterı́sticas dessa arqui-
tetura emergente a torna ideal para a alta largura de banda e a natureza dinâmica das
aplicações atuais, e o protocolo OpenFlow é um elemento fundamental para a construção
de soluções SDN. Entre as caracterı́sticas de uma rede SDN tem-se:
A estrutura lógica de uma rede SDN pode ser vista na figura 2.1. O OpenFlow foi
o primeiro padrão de comunicação entre a camada de controle e a de infraestrutura, e
ele permite acesso direto ao plano de dados, bem como manipulação de seus dispositivos
como switches e roteadores, tanto fı́sicos como virtuais.
Segundo (ETSI, 2012), as Funções Virtuais de Rede (NFV - Network Functions Virtua-
lisation) tem como objetivo retirar de equipamentos de rede algumas funções e consolidá-
las em servidores executando sobre tecnologia padrão de virtualização de servidores, que
podem ser alocados em Centro de Dados, Nós de Redes, ou no usuário final, sendo possı́vel
mover essas funções de rede instantaneamente conforme a necessidade, sem precisar, para
isso, instalar um novo equipamento.
NFV e SDN são dois conceitos que caminham muito próximos. Apesar de não se-
rem dependentes eles podem ser complementares. Segundo (KAPADIA; CHASE, 2017), a
flexibilidade de uma rede SDN pode ser beneficiada com a agilidade de se mover servi-
ços complexos e especializados que estão implementados na forma de funções de rede. É
possı́vel substituir serviços tais como VPN, firewall, NAT, IPS/IDS por funções virtuais
de rede. Embora a virtualização dos serviços de rede seja uma tendência, não houve a
preocupação neste trabalho de criar tal função. Após a prova de funcionalidade dos fi-
rewalls hierarquizados, seria possı́vel desenvolver as etapas da virtualização destas mesmas
funções.
• Symmetric: mensagens iniciadas por qualquer uma das partes, sem nenhuma solici-
tação.
Internamente, um switch OpenFlow tem uma ou mais tabelas de fluxos (Flow Tables),
e cada tabela contém múltiplas entradas de fluxo (Flow Entries). Ao ingressar no switch,
CAPÍTULO 2. FUNDAMENTAÇÃO TEÓRICA 24
o pacote é verificado com as entradas de fluxo. Se o o pacote casar com alguma entrada de
fluxo, as instruções contidas nessa entrada serão executadas. Essas instruções podem fazer
com que o pacote seja encaminhado para uma ou mais portas do switch, seja descartado,
ou seja encaminhado para outra tabela de fluxos, onde ele é verificado novamente.
Se, em determinada tabela de fluxos, o pacote não casar com nenhuma entrada de
fluxo, ocorre o chamado “table miss”. Esse fluxo contém instruções a serem executadas,
que usualmente incluem, descartar o pacote, encaminhar para outra tabela de fluxos, ou
enviar o pacote para o controlador.
O diagrama do funcionamento das tabelas de fluxos de um switch OpenFlow pode ser
vista na figura 2.2.
Como dito na sessão anterior, em redes SDN, toda a inteligência é retirada dos equi-
pamentos de rede, e esse papel é repassado para controladores externos. Mesmo quando
utilizando mais de um controlador, eles são logicamente centralizados, fator que possibi-
lita a gerência centralizada da rede. A existência de um protocolo SDN aberto como o
OpenFlow facilita o desenvolvimento de controladores e equipamentos de rede.
Atualmente existem diversos controladores OpenFlow. Segundo (RAO, 2014), o pri-
meiro controlador OpenFlow foi o NOX. Ele foi desenvolvido pela Nicira Networks e foi
CAPÍTULO 2. FUNDAMENTAÇÃO TEÓRICA 25
2.2 Firewall
• Firewall de próxima geração: para conseguir prevenir novas ameaças que surgem
a cada dia os fabricantes começaram a oferecer o firewall e o IDS em uma única
plataforma de segurança de rede, chamada de Next Generation Firewall. Reunir
caracterı́sticas de todas as gerações de firewall e do IDS em um único produto pode
trazer algumas vantagens, como gerência simplificada, melhor controle, maior vazão,
entre outras.
Em SDN é possı́vel verificar vários campos do cabeçalho dos pacotes, e com isso, criar
regras de fluxo bem especı́ficas. Essas regras, poderiam fazer referência a endereço IP de
origem e destino, porta de origem e destino, e protocolo de transporte, que são os campos
utilizados por um firewall tradicional de primeira e segunda geração. Ou seja, em uma
rede SDN, é possı́vel substituir o firewall tradicional por regras de fluxo mais especı́ficas.
Os controladores Ryu (RYU PROJECT TEAM, 2014) e Floodlight (IZARD, 2015) dispo-
nibilizam algumas aplicações prontas, e o firewall está entre elas. O controlador Ryu foi
o escolhido como base para esta dissertação devido, principalmente, a sua facilidade de
programação. As interfaces são simples, flexı́veis e há diversos casos de uso fornecidos
pelo time de desenvolvimento do Ryu que não precisaram ser refeitos mas puderam ser
aproveitados integralmente.
O Firewall disponibilizado pelo Ryu é um firewall de pacotes stateless. O Ryu tem
uma função Web Server usando WSGI2 , e a aplicação de firewall a utiliza para que as
regras possam ser manipuladas, utilizando interface RESTful.
Quando o controlador Ryu é iniciado e a aplicação de firewall é ativada, o switch
OpenFlow fica com duas regras de fluxo definidas para: tratar qualquer pacote do tipo
ARP como se fosse um switch não SDN; enviar todos os outros pacotes para o controlador.
2
Segundo (EBY, 2010), WSGI (Web Server Gateway Interface) é a especificação de como o web server
deve se comunicar com aplicações web, e como aplicaçoes web pode ser encadeadas para processar uma
requisição.
CAPÍTULO 2. FUNDAMENTAÇÃO TEÓRICA 28
Ao adicionar uma regra à aplicação de firewall, uma regra de fluxo referente a ela é
adicionada ao switch.
Por exemplo, o comando na figura 2.3 executado no mesmo servidor onde o controlador
Ryu está irá cria uma entrada de fluxo que permite o tráfego de pacotes com o protocolo
ICMP vindo do endereço IP [Link] com destino ao IP [Link].
curl -X POST -d ' { " nw_src " : " [Link]/32 " , " nw_dst " :
" [Link]/32 " , " nw_proto " : " ICMP " } '
http :// localhost :8080/ firewall / rules /0000000000000001
Além dos campos presentes no comando da figura 2.3, o firewall do Ryu aceita alguns
outros, e todos eles, bem como uma breve descrição, podem ser vistos na tabela 2.2.
A maneira como os dados devem ser passados para o Ryu também pode ser vista no
comando.
Além de adicionar regras, existem outros comandos possı́veis no firewall. Para executá-
los, basta acessar a URI correta e enviar os métodos HTTP. A lista com as URIs e métodos
podem ser vistos na tabela 2.3.
Como dito anteriormente, o firewall do Ryu é stateless, ou seja, não leva em conside-
ração que determinado pacote possa fazer parte de alguma sessão de rede já iniciada. Por
esse motivo é possı́vel ver em (RYU PROJECT TEAM, 2014) que, para permitir um tráfego,
sempre são adicionadas duas regras, uma em cada sentido (de A para B e depois de B para
A). Por exemplo, se em B existe um servidor Web (porta 80), deve-se criar uma regra de
A para B com porta de destino 80, e depois uma de B para A com porta de origem 80.
CAPÍTULO 2. FUNDAMENTAÇÃO TEÓRICA 29
Este capı́tulo aborda vários trabalhos referentes a firewall, firewall em SDN e verifica-
ção de conflitos entre regras de firewall, e eles foram utilizados como base de conhecimento
para a elaboração desta dissertação.
Eles resolvem os problemas a que foram propostos, mas apresentam uma abordagem
diferente da esperada para esta dissertação.
Os trabalhos foram agrupados em dois grupos: o primeiro grupo, apresentado na sub-
seção 3.1, apresenta soluções que lidam com hierarquia de firewalls, mostrando algumas
técnicas que podem melhorar o desempenho do firewall, tanto tradicional como em SDN;
o segundo grupo de trabalhos, apresentado na subseção 3.2, se preocupam com a resolu-
ção de conflitos de regras em firewall, e mostra vários fatores que devem ser levados em
consideração para que, ao final do processo, as polı́ticas de segurança estejam represen-
tadas corretamente na forma de regras de firewall. Uma discussão sobre os tópicos mais
relevantes dos trabalhos apresentados neste capı́tulo é feita na subseção 3.3.
zonas separadas (A, B, C e D), e o filtro acontece apenas entre as redes. Todos os
firewalls representados também podem fazer roteamento.
A migração da topologia inicial para SDN com preservação das polı́ticas de segurança
seguem alguns passos.
CAPÍTULO 3. TRABALHOS RELACIONADOS 33
1. Otimização de regras. Após esse passo o número de regras deve ser igual ou menor
ao número de regras de entrada;
4. Tradução das regras de firewall para regras de fluxo para cada switch OpenFlow.
Resultado: é a geração de uma polı́tica de controle de acesso para cada switch OpenFlow
da topologia contendo em cada um as regras que são capazes de reproduzir a mesma
situação da rede original.
As regras de firewall costumam ser numeradas e o número sequencial é muito impor-
tante na análise do pacote, pois as regras são analisadas seguindo essa ordem. Se esse
número não for especificado corretamente, alguma regra pode se sobrepor a outra dife-
rentemente do esperado pela polı́tica de segurança definida. Essa ordem é irrelevante em
alguns casos; se um fluxo de rede casar com uma regra “A”, mas não houver possibilida-
des dele corresponder também com a regra “B”, então não faz diferença qual dessas duas
regras será analisada primeiro, por consequência, o número sequencial de “A” tanto pode
ser maior como pode ser menor que o número sequencial de “B”.
No terceiro passo é definido a quantidade de switches e a topologia que será utilizada.
Existem diversas topologias (grafo totalmente conectado, anel, estrela, etc.), e nesse caso,
a escolhida foi a de grafo totalmente conectado. Para essa topologia, ao usar n switches,
n-1 portas em cada um deles são necessárias para a interligação de todos. A escolha final
pode ser vista na figura 3.2.
A tradução de ACL Cisco para regras SDN é o último passo, e há algumas diferenças
entre os duas abordagens. Em ACL Cisco é possı́vel especificar uma faixa de portas de
origem e de destino, e o protocolo OpenFlow não suporta isso. Outra diferença é que
ACL Cisco permitem definir faixas de tempo, como por exemplo, durante a semana das
10:00 as 19:00. Isso pode ser implementado no controlador SDN instalando e removendo
as regras das tabelas de fluxo. Já em SDN é possı́vel filtrar pacotes usando campos de
cabeçalho L2-L4 (endereço IP e endereço MAC, por exemplo) na mesma regra. Também
é possı́vel filtrar pacotes de uma VLAN ou que tenha um rótulo MPLS especı́fico. Outros
tipos de regras podem ser implementadas mais facilmente pois são mais diretas.
Esse artigo mostra que é possı́vel substituir dispositivos de firewall por regras de fluxo
SDN. Para o estudo, o autor utiliza como entrada ACLs da Cisco, que, devido a sua
CAPÍTULO 3. TRABALHOS RELACIONADOS 34
FIGURA 3.2 – Exemplo de topologia resultante. Todos os 5 switches são SDN e estão
conectados ao controlador, que não foi ilustrado na figura.
Imagem retirada de (GAMAYUNOV et al., 2013).
sintaxe simples, pode ser traduzida facilmente para outros tipos de firewalls tradicionais.
Além de substituir o firewall, é possı́vel também alterar a arquitetura da rede mantendo
as mesmas polı́ticas. Apesar de provar conceitos importante na migração de firewalls para
SDN, este trabalho não cuida da consistência na arquitetura gerada.
Um modelo de Tabelas de Fluxo Hierárquicas (HFT - Hierarchical Flow Tables) para
SDN foi apresentado por (FERGUSON et al., 2012). As polı́ticas são organizadas em árvores,
onde cada componente da árvore pode determinar independentemente a ação a ser tomada
em cada pacote. Se essas partes diferentes da árvore chegarem a um conflito, ele é resolvido
por um operador de resolução definido pelo usuário e é colocado em cada nó da árvore.
Essas polı́ticas hierárquicas são compiladas em Tabelas de Fluxo de Rede (Network
Flow Tables), que são instruções simples e lineares. A Tabela de Fluxo de Rede por sua
vez é traduzida para instruções de baixo nı́vel para que possam ser distribuı́das para os
switches. Para fazer esse processo é usada uma Base de Informações de Rede (NIB -
Network Information Base), que foi inspirada na NIB utilizada pelo controlador ONIX.
CAPÍTULO 3. TRABALHOS RELACIONADOS 35
Este controlador é uma referência na área por oferecer APIs que permitem que cada
plataforma faça sua implementação especı́fica a partir de suas primitivas (KOPONEN et
al., 2010). A NIB é um banco de dados que contém todos os elementos de rede (switches,
hosts, portas, links).
O funcionamento da HFT é ilustrado na figura 3.3, que representa uma tabela de
fluxos hierárquica que foi gerada segundo algumas polı́ticas definidas. Esta figura ilustra
um pacote sendo analisado que tem como origem o endereço IP [Link], seu destino é o IP
[Link] e a porta de destino é a 80, e é verificado por cada nó da hierarquia. Alguns nós
foram coloridos de verde para mostrar quando a polı́tica presente nele casam com algum
campo do cabeçalho do pacote analisado. Os passos da análise são descritos abaixo:
• A polı́tica do nó 5 diz que pacotes cujo endereço de origem seja [Link] podem
prosseguir;
• Os nós 4 e 5 são filhos do nó 3, que verifica que há um conflito. Conflitos são
resolvidos através de operadores de conflito presentes ao longo da árvore. Nesse
caso, o operador de conflito é representado por GMB(10) + S Allow = GMB(10),
ou seja, o nó 4 pede uma garantia mı́nima de banda igual a 10 (dstPort = 80, GMB
= 10), e o nó 5 permite a passagem do pacote (srcIP = [Link], Allow), com isso
o resultado é a garantia mı́nima de banda igual a 10. O nó 3 não tem nenhuma
polı́tica e não interfere no resultado final;
CAPÍTULO 3. TRABALHOS RELACIONADOS 36
• O nó 2 tem como polı́tica GMB(30) caso o pacote tenha como destino o IP [Link];
• O nó 1 tem como filhos os nós 2 e 3, e outro conflito é detectado. O nó 2 pede uma
garantia mı́nima de banda de 30, ao passo que o nó 3 pede uma garantia mı́nima de
banda de 10. A polı́tica de resolução de conflito aplicada é GMB(30) + S GMB(10)
= GMB(max(30, 10)), tendo como resultado GMB(30). A polı́tica presente no nó
1 que nega pacotes destinados a porta 22 não se aplica ao pacote analisado, por isso
não influencia o resultado final. Com isso, o pacote pode prosseguir com garantia
mı́nima de banda igual a 30.
porta 22 podem passar, teremos que segunda regra terá um rule size maior que a primeira,
pois mais bits precisaram ser analisados.
A segunda métrica é o custo de operação de uma regra, e ele depende de:
• Quantidade de vezes que essa regra é chamada: algumas regras são analisadas mais
vezes que outras. Por exemplo, em uma rede com um servidor NTP e um servidor
Web, provavelmente muitos mais pacotes serão destinados ao servidor Web, portanto
regras referentes a ele deveriam ficar mais no topo da lista.
• Pré processamento (Pre-processing): Pega a lista original e produz uma lista otimi-
zada, com regras disjuntas e concisas. Todas as redundâncias e dependências são
eliminadas. Isso permite ao OPTWALL reordenar e dividir as regras em sub-grupos
sem violar a semântica original.
O VeriFlow tem por objetivo verificar conflito de regras em tempo real. Ele é uma
camada entre o controlador SDN e os switches, e verifica violações no momento em que as
regras são inseridas, alteradas ou removidas. Demorar segundos ou horas pode prejudicar
a consistência do estado da rede. A versão abordada em (KHURSHID et al., 2012) foi
feita para a versão 1.1.0 do protocolo OpenFlow e para regras de redirecionamento de IP,
mas não funciona com ações de alteração de cabeçalhos de pacotes como NAT (Network
Address Translation - Tradução de endereço de rede), por exemplo.
O autor destaca que a análise em uma camada entre o controlador e o switch é in-
teressante pois as aplicações que executam sobre um controlador além de poderem ser
complexas, podem ter sido desenvolvidas por diversas pessoas que estão além do controle
do administrador da rede.
Para fazer essa verificação, o VeriFlow realiza três passos:
Pode acontecer de determinada regra precisar ser verificada em muitas ECs, fato que
impossibilita a verificação em tempo real. Nesse caso o VeriFlow instala a regra e continua
a verificação em paralelo. Mas os testes realizados mostraram que aproximadamente 99%
das vezes o número de ECs afetadas é menor que dez.
A implementação foi feita de duas maneiras: uma como um proxy entre o controlador
e o switch e outra integrada ao controlador NOX 0.9.1. A alteração feita consiste em
fazer o NOX interceptar todas as mensagens flow table modification e redirecioná-la ao
VeriFlow. Caso algum problema seja encontrado a regra de fluxo é bloqueada.
Além de não trabalhar com alterações de cabeçalhos de pacotes como tradução de en-
dereço de rede (NAT - Network Address Translation), outro grande problema no VeriFlow
é que ele precisa ter a visão global da rede, por isso ele não foi feito para trabalhar em
ambientes com múltiplos controladores, pois segundo o autor, obter tal visão nesse tipo
de ambiente seria difı́cil.
O FortNOX (PORRAS et al., 2012) é uma extensão para aplicar polı́ticas de segurança
ao controlador NOX (GUDE et al., 2008). Ele faz resolução de conflito de regras em tempo
real e autorização baseada em papéis.
Toda operação que define ou altera um fluxo passa por uma Análise de Conflito Base-
ada em Papéis (RCA - Rule-based Conflict Analysis), que garante que cada regra subme-
tida não conflite com uma regra existente cujo autor esteja associado com uma autoridade
maior do que o autor da regra candidata.
Para fazer a verificação de conflito de regras o FortNOX implementa um esquema de
autorização hierárquico com três papéis conforme abaixo:
Em outro trabalho que é a continuação do FortNOX (PORRAS et al., 2015) afirma que
um conflito de regras surge quando uma regra candidata ativa ou desativa um fluxo de
CAPÍTULO 3. TRABALHOS RELACIONADOS 40
rede que de outra forma é inversamente proibida, ou permitida, por uma regra existente.
O conflito pode ser direto ou indireto:
• Conflito direto é quando uma regra candidata contraria uma regra existente (uma
regra existente redireciona pacotes entre A e B enquanto uma regra candidata os
descarta);
• Conflito indireto ocorre quando uma regra candidata em conjunto com outra regra
pré-existente contraria alguma regra. Por exemplo, existe uma regra que permite
pacotes de A para B, e uma que nega pacotes de A para C, e a regra candidata
permite pacotes de B para C.
Apesar de ter sido desenvolvido para o controlador NOX, o autor menciona que a
metodologia poderia ser extendida para outras arquiteturas, como Beacon, Maestro e
DevoFlow.
O FortNOX faz verificação de conflito de regras baseada em papéis, e as advindas
de aplicações com papel de ADMIN têm maior prioridade e não podem ser ignoradas
por aplicações com papel SEC ou APP. Nesta dissertação espera-se fazer uma verificação
de regras mas não baseadas em papéis, mas sim em uma hierarquia de controladores.
Outra diferença é que essa verificação será feita em uma aplicação executando sobre o
controlador, e não em um módulo dentro dele. Utilizar aplicações ao invés de módulos é
interessante pois existem muitos controladores disponı́veis atualmente, e nem todos têm
seu código fonte disponı́vel para que tais módulos possam ser adicionados.
O FlowGuard (HU et al., 2014) é um framework para detectar e resolver violações nas
polı́ticas de firewall em redes baseadas em OpenFlow. Ele verifica o espaço de fluxo de
rede para detectar violações no momento que o estado da rede é atualizado.
A detecção de violação é algo complexo pois tanto as regras de fluxo como as de
firewall podem fazer referência a um endereço IP exato, mas também a uma faixa de
endereços. Por exemplo, é possı́vel fazer uma regra que tenha como origem o endereço IP
[Link]/24, e qualquer pacote no intervalo de [Link] até [Link] irão casar
com ela.
Além disso, os campos dos cabeçalhos dos pacotes do fluxo podem ser alterados di-
namicamente enquanto atravessam a rede. Isso é feito usando-se uma ação Set-Field do
OpenFlow. As ações Set-Field alteram valores de campos dos cabeçalhos nos pacotes,
sendo possı́vel, por exemplo, alterar o endereço IP de destino de um pacote. A tabela 3.1
ilustra como isso pode afetar a integridade do firewall.
Mesmo que as regras da tabela 3.1 sejam analisadas na ordem, um pacote que tenha
A como IP de origem e D como endereço de destino terá seu cabeçalho alterado e chegará
CAPÍTULO 3. TRABALHOS RELACIONADOS 41
# Ação Descrição
1 A to B, DROP Pacotes que tenham A como IP de origem, e
B como IP de destino devem ser descartados
2 * to D, set D → B, Output to table Qualquer pacote com IP de destino igual a
D, altere o IP de destino de D para B. Con-
tinue checando o pacote
3 A to *, set A → C, Output to table Pacotes que tenham A como IP de origem,
altere o IP de origem para C. Continue che-
cando o pacote
4 C to B, forward Pacotes cujo IP de origem seja C, e IP de
destino seja B, encaminhar
TABELA 3.1 – Exemplo de como alteração do cabeçalho do pacote pode influenciar no
firewall
até B, o que contraria a primeira regra que define que fluxos de A para B devem ser
descartados. Por esses motivos é necessário seguir todo o caminho da rede e determinar
a origem inicial e o destino final de cada fluxo da rede. Isso é feito em três passos:
• Análise do espaço de fluxo de rede: É feita uma análise do fluxo de rede, desde a
origem do pacote até seu destino, mesmo que haja alterações nesse pacote. Define-se
três espaços de fluxo:
A resolução da violação é uma tarefa que precisa de atenção. Caso haja uma violação
parcial, remover a regra pode afetar o funcionamento da rede. Se a regra tiver alguma
dependência com outras regras, sua remoção pode causar impacto em outras regras, e
causar novas violações. Para evitar isso, o FlowGuard utiliza quatro técnicas:
• Quebra da dependência: Ao adicionar numa nova polı́tica de fluxo, ela pode não
violar a polı́tica de firewall, mas pode violar a polı́tica de fluxo existente. Isso pode
gerar dependências entre regras, que por sua vez podem causas violação da polı́tica
de firewall. Para evitar isso, dois mecanismos são utilizados:
– Re-roteamento de fluxo: caso um novo fluxo gere um caminho que cause uma
dependência de regras, a aplicação de firewall pede ao controlador um novo
caminho sem dependências. Esse processo pode ser executado recursivamente
até que o controlador encontre um caminho que não gere uma violação;
– Marcar o fluxo: os pacotes do fluxo são marcados, e tratados de maneira dife-
rente por outras polı́ticas.
na rede SDN e permite que cada uma delas seja gerenciada por um controlador diferente.
A virtualização em OpenFlow permite que vários controladores instalem entradas de fluxo
em um mesmo switch. Segundo (NATARAJAN et al., 2012), isso pode gerar conflitos e erros
de configuração pelo fato de os switches OpenFlow atuais não oferecerem mecanismos de
isolamento por hardware nas tabelas de fluxo. Caso haja conflitos, o OpenFlow atribui
prioridades a cada entrada de fluxo. Mas em ambientes SDN virtualizados onde vários
controladores alteram as tabelas de fluxo, utilizar prioridades pode fazer com que o rote-
amento final não reflita a visão de cada controlador.
Para resolver esse tipo de problema em redes OpenFlow virtualizadas, (NATARAJAN et
al., 2012) apresentam duas técnicas de detecção de conflitos. O primeiro método usa uma
estrutura hı́brida hash-trie para representar a tabela de fluxos. O segundo método usa
um sistema de ontologia baseado em lógica de inferência. Em testes executados usando
uma tabela de fluxo com milhares de fluxos de entrada ambas as técnicas resolveram
os conflitos em aproximadamente 100 milissegundos. Os dois métodos de detecção de
conflitos serão detalhados a seguir.
A detecção de conflito baseado em hash-trie associa um FlowID a cada entrada de
fluxo e utiliza um método dividir e conquistar. O “dividir” divide cada entrada de fluxo
em conjuntos de campos de cabeçalhos para detectar o conflito em cada campo individu-
almente, e retorna um conjunto de FlowIDs que representa os conflitos em cada campo.
No “conquistar” o conjunto de FlowIDs retornados de cada campo são colocados uma
tabela Matriz de Intersecção (Intersection Matrix Table) para determinar quais entradas
de fluxo são conflitantes com a nova entrada de fluxo. A figura 3.4 ilustra esse algoritmo.
Input: new flow entry
DIVIDE
Baseados em Prefixo” e são representados usando uma estrutura radix trie, e os outros
são chamados de “Campos de Valores Exatos” e são armazenados em uma estrutura que
usa uma combinação de trie e hash.
A estrutura trie é uma estrutura de dados que cria uma árvore de prefixos. Segundo
(SEDGEWICK; WAYNE, 2011), cada nó da árvore contém links que podem ser nulos ou
ser referência para outros nós. Cada nó tem N links, onde N é o tamanho do alfabeto
utilizado. Cada link corresponde a um caractere. Cada nó tem um valor correspondente,
que pode ser nulo, ou conter o valor associado à palavra representada na árvore. Quando
o valor do nó não é nulo, significa que ele é o último caractere da palavra. A figura 3.5
mostra o exemplo de uma trie. Apesar dessa representação, na prática cada nó da árvore
tem N links, mas os nós nulos não são representados.
root
a 2 l e 0 e 5
Palavra Valor
l l
by 4
sea 2
sells 1
she 0
shells 3
s 1 l
the 5
s 3
Rotular cada nó com
o caractere associado
ao link de entrada
Para efetuar uma busca em uma trie, a partir do nó raı́z, segue-se o link correspondente
ao primeiro caractere da palavra; a partir desse nó, segue-se o nó correspondente ao
segundo caractere da palavra, e assim sucessivamente, até encontrar o último caractere
da palavra, ou um link nulo. Nesse ponto, existem três condições:
CAPÍTULO 3. TRABALHOS RELACIONADOS 45
• O valor do nó correspondente ao último caractere da palavra não é nulo. Isso quer
dizer que a busca encontrou a palavra procurada. O valor associado com a palavra
é o valor no nó correspondente ao último caractere;
• a busca terminou com um link nulo. A palavra também não foi encontrada.
TABELA 3.2 – Exemplo de uma tabela de fluxos. Cada linha representa uma entrada de
fluxo, e cada coluna representa um campo do cabeçalho OpenFlow
CAPÍTULO 3. TRABALHOS RELACIONADOS 46
* {e3, e4}
5 1
{e1} {e2}
FIGURA 3.6 – Estrutura hash-trie para o campo “Ingress Port” da tabela de fluxos 3.2.
Retirado de (NATARAJAN et al., 2012)
Na matriz de intersecção, cada linha representa uma entrada de fluxo, e cada coluna
representa um campo do cabeçalho do pacote. Inicialmente, todas as entradas da matriz
de intersecção são preenchidas com zero (0). Se no passo anterior for detectado um conflito
no campo “IP de origem” da entrada de fluxo “e1”, essa célula da matriz será alterada para
um (1). Após preenchida, se alguma linha da matriz tiver somente valores 1’s, significa
que essa entrada conflita com a nova entrada de fluxo.
A tabela 3.2 é um exemplo de uma tabela de fluxos OpenFlow, onde cada linha é
uma entrada de fluxo, e cada coluna é um campo do cabeçalho OpenFlow. Dado um
ambiente que esteja configurado com essa tabela, se nele for inserido a nova entrada de
fluxo [5,*,*,*,*,*,10*,01*,TCP,*,*,*], o algoritmo hash-trie preenche a matriz intersecção
conforme pode-se ver na tabela 3.3. As linhas referentes aos fluxos e1, e3 e e4 estão
preenchidas totalmente com 1’s, o que indica que o novo fluxo conflita com esses três
fluxos.
Flows f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
e1 1 1 1 1 1 1 1 1 1 1 1 1
e2 0 1 1 1 1 1 0 0 0 1 1 1
e3 1 1 1 1 1 1 1 1 1 1 1 1
e4 1 1 1 1 1 1 1 1 1 1 1 1
TABELA 3.3 – Exemplo de uma Matriz de Intersecção preenchida
As duas técnicas apresentadas por (NATARAJAN et al., 2012) conseguem detectar con-
flitos entre regras de fluxo em um ambiente OpenFlow virtualizado. A primeira técnica
utiliza uma estrutura hı́brida de hash-trie para detectar conflitos, e pode ser adaptada
para detecção de conflitos em um ambiente SDN hierárquico. A segunda técnica utiliza
uma Lógica de Descrição para representar a tabela de fluxos, e nela efetuar pesquisas para
detectar os conflitos. Ambas as técnicas parecem complexas, e o artigo não deixa claro
como aplicar a segunda técnica. Conforme será mostrado no capı́tulo 4, subseção 4.3,
nesta dissertação será utilizada uma adaptação da técnica hash-trie para a verificação de
conflitos.
Durante essa dissertação serão utilizados alguns termos que serão explicados abaixo
para facilitar a leitura:
Regras Locais : Regras de firewall que são definidas pelos administradores locais, e que
CAPÍTULO 4. FIREWALL PARA SDN COM VERIFICAÇÃO DE CONFLITO DE
REGRAS HIERÁRQUICAS 50
dizem respeito somente àquela localidade. Essas Regras Locais não podem entrar
em conflito com as Regras Root;
Controlador Local : Nas localidades, a aplicação Firewall Local executa sobre um con-
trolador SDN que será chamado Controlador Local.
Outro termo importante que será utilizado é o “Conflito”. Nesta dissertação, duas
regras são consideradas em conflito quando, levando-se em consideração os campos a que
elas fizerem referência coincidirem, mas elas definirem ações divergentes. Por exemplo, na
tabela 4.1, caso a primeira regra seja analisada contra a segunda regra, elas estarão em
conflito pois, um pacote que corresponda com a primeira regra irá também corresponder
com a segunda regra (o endereço IP de origem da segunda regra representa uma faixa de
IPs que vai desde [Link] até [Link], ou seja, o IP de origem da primeira regra está
contido nesta faixa, mas a ação das duas regras são divergentes). Já a terceira regra está
em conflito com a primeira pois a porta de destino da primeira regra é a 80, e a terceira
regra não faz referência a nenhuma porta de destino, significando, portanto, qualquer
porta, ou seja, um pacote que corresponda com primeira regra irá também corresponder
com a terceira regra. A segunda e a terceira regras não estão em conflito pois, apesar de
haver pacotes que possam corresponder às duas ao mesmo tempo, elas definem a mesma
ação.
A verificação de conflitos nesta dissertação não leva em consideração a ordem das regras
pois a verificação não é feita com regras do mesmo nı́vel, ou seja, quando uma regra é
inserida no Firewall Root, ela é verificada somente contra Regras Locais, e vice-versa.
Isso é feito porque, em um mesmo nı́vel pode haver conflitos, que serão resolvidos pela
ordem em que as regras estão dispostas. Esse comportamento é necessário em situações
em que regras mais especı́ficas convivam com regras menos especı́ficas mas que tenham
ações diferentes. Por exemplo, para expressar uma polı́tica que diga que o DNS da rede
local só pode ser utilizado por hosts da própria rede, seriam necessárias duas regras: (1)
permitir pacotes do tipo UDP cujo IP de origem seja [Link]/8 com destino ao IP [Link]
na porta 53; (2) negar pacotes do tipo UDP com qualquer IP de origem ([Link]/0) com
destino ao IP [Link] na porta 53. Caso houvesse verificação de conflitos no mesmo
CAPÍTULO 4. FIREWALL PARA SDN COM VERIFICAÇÃO DE CONFLITO DE
REGRAS HIERÁRQUICAS 51
nı́vel, essas duas regras seriam detectadas como conflitantes pois elas tem ações opostas,
e pacotes que correspondam à primeira regras correspondem também à segunda regra (IP
de origem [Link]/8 está contido em [Link]/0).
Para fazer a verificação de conflito de regras hierárquicas foi definida uma arquitetura
de dois nı́veis, e foram desenvolvidas duas aplicações. No nı́vel superior, a aplicação será
chamada de “Firewall Root”. No nı́vel abaixo a aplicação será chamada de “Firewall
Local”, e uma instância dela executa em cada localidade. A arquitetura pode ser vista na
figura 4.1.
Operador
Firewall
Root
Interface
com Operador
Banco Verificação
de Dados de Conflito
de Regras
Interface
com o
Firewall Local
Para a definição dessa arquitetura foram considerados dois cenários: (1) Empresas
com perfil Matriz - Filial; (2) Estruturação de diversas Organizações Militares (OMs) em
relação ao Comando Central em Brası́lia. Nestes cenários considerados não se identificou,
CAPÍTULO 4. FIREWALL PARA SDN COM VERIFICAÇÃO DE CONFLITO DE
REGRAS HIERÁRQUICAS 52
num primeiro momento, a necessidade dos nı́veis inferiores terem a visão geral da rede, mas
apenas seguir estratégias definidas pela matriz ou Comando Central. Portanto, conforme
pode-se ver na figura 4.1, não há comunicação entre os Firewalls Locais, mas somente entre
Firewall Local ↔ Firewall Root. Caso exista a necessidade de haver comunicação entre
os Controladores Locais, eles mesmos são responsáveis pelo compartilhamento da visão
global da rede, bem como das regras de firewall, como em um ambiente com controladores
logicamente centralizados, mas fisicamente distribuı́dos. Ou seja, o Controlador Root não
é responsável por orquestrar essa comunicação entre Controladores Locais.
As regras são inseridas em ambos os firewalls por operadores através de uma interface
disponibilizada, sendo que, no Firewall Local, essa mesma interface é utilizada para co-
municação com o Firewall Root. Na figura 4.1 também é possı́vel notar que o Firewall
Root não se comunica com os Controladores Locais e nem com os switches; quando uma
regra é inserida com sucesso no Firewall Root, ele a envia para os Firewalls Locais, e eles
são responsáveis pelo envia dessa regra para seus respectivos Controladores Locais.
Como é o Firewall Local que envia todas as regras para o controlador, depois que as
regras estiverem instaladas não há como diferenciar uma Regra Root de uma Regra Local.
É necessário distinguir as regras pois, como dito anteriormente, quando uma Regra Root
é inserida, ela é verificada somente contra Regras Locais, e vice-versa. Para fazer essa
distinção, optou-se por armazená-las em um banco de dados, em tabelas diferentes, para
evitar que o controlador precisasse lidar com esta informação. Desta maneira, a aplicação
fica totalmente independente do controlador.
A aplicação de Firewall Root gerencia este banco de dados, uma vez que é esta apli-
cação que executa o algoritmo de verificação de conflitos. Além disso as aplicações locais,
em maior número, terão o código simplificado.
O processo executado quando uma regra é inserida no Firewall Root é um pouco
diferente de quando é inserida em um Firewall Local. Esses processos serão detalhados a
seguir.
A figura 4.2 mostra um fluxograma de uma regra sendo inserida no Firewall Local. Os
passos seguidos são:
• Verifica-se se a regra está vindo do Firewall Root. Essa verificação é necessária pois,
quando uma regra é inserida no Firewall Root, ele a encaminha para o Firewall
Local para que ele a envie para o Controlador Local;
• Caso a regra não venha do Firewall Root, ela é enviada para ele através da interface
externa;
CAPÍTULO 4. FIREWALL PARA SDN COM VERIFICAÇÃO DE CONFLITO DE
REGRAS HIERÁRQUICAS 53
Regra de firewall Local
Retorna
Retorna
erro para
erro.
Envia para o o operador
Controlador Local. Armazena em banco.
Retorna mensagem Retorna mensagem de
de sucesso para sucesso.
o operador.
Mensagem de erro informando que um conflito foi detectado. A regra não foi inserida
• No Firewall Root há um banco de dados com todas as regras já inseridas (regras
Root e não Root). O Firewall Root verifica se a nova regra conflita com alguma
regra Root existente;
– o Firewall Root retorna um erro para o Firewall Local informando que o conflito
foi detectado;
– a mensagem de erro é retornada para o usuário.
O processo para inserir regras no Firewall Root é um pouco diferente, conforme pode
ser visto na figura 4.3. Seus passos são:
• Como o Firewall Root também armazena em banco as regras não Root, ele verifica
se a nova regra conflita com alguma regra não Root já existente;
CAPÍTULO 4. FIREWALL PARA SDN COM VERIFICAÇÃO DE CONFLITO DE
REGRAS HIERÁRQUICAS 54
Firewall Root
Firewall Local
Armazena em banco.
Envia para o Envia para Firewall
Controlador Root. Local
Retorna mensagem
de sucesso.
Retorna mensagem de
sucesso para o operador
Mensagem de erro informando que um conflito foi detectado. A regra não foi inserida
Quando uma nova regra Root é inserida significa que houve uma alteração na polı́tica
de segurança corporativa, e por isso as regras Locais existentes precisam ser verificadas
novamente. Caso seja detectado algum conflito, significa que alguma regra Local precisa
ser revista, pois a partir de agora, ela contradiz a nova polı́tica de segurança. Essa
regra Local conflitante não é sobreposta incondicionalmente porque essa ação poderia
CAPÍTULO 4. FIREWALL PARA SDN COM VERIFICAÇÃO DE CONFLITO DE
REGRAS HIERÁRQUICAS 55
indisponibilizar algum serviço importante que esteja hospedado em alguma localidade, ou
até mesmo parar a rede desta localidade.
4.2 Implementação
O controlador utilizado nesta dissertação foi o Ryu. Ele já disponibiliza uma aplicação
de firewall, que foi utilizada como base. O controlador Ryu é feito na linguagem Python,
e por isso as aplicações desenvolvidas também foram feitas nessa linguagem. Para o
Firewall Root, foi necessário utilizar duas bibliotecas que não são utilizadas pelo firewall
nativo do Ryu: pymongo para manipulação do banco de dados; IPNetwork para manipular
endereços IP. Para facilitar a codificação foi utilizada a IDE Eclipse1 com o plugin PyDev2 .
O ambiente utilizado para os testes será detalhado no capı́tulo 5
O Firewall Local recebe as regras de firewall através da interface externa, e a envia
para o controlador na forma de regras de fluxo, que por sua vez, a envia para os switches.
O controlador Ryu tem uma função WSGI que disponibiliza uma interface RESTful, e é
por ela que o firewall nativo do Ryu recebe as regras de firewall. Foi feita uma alteração
para que, antes de enviar a regra de firewall para o controlador, o Firewall Local verifique
se a regra não está vindo do Firewall Root, e então a envie para ele, onde será feita a
verificação de conflitos. Se não houver nenhum conflito, o processo continua, e a regra de
fluxo é enviada para o controlador. Essa alteração exigiu a adição de poucas linhas ao
firewall do Ryu, e o pseudo-código pode ser visto na figura 4.4.
if ( N~
a o veio do Firewall Root )
envia para o Firewall Root
if ( Há conflito )
retorna erro para o operador
Continua o processo
FIGURA 4.4 – Linhas adicionadas ao firewall do Ryu para usá-lo como Firewall Local
O Firewall Root também utiliza a interface REST para receber as regras de firewall.
Existe uma interface para regras inseridas pelo operador, e uma para regras vindas do
Firewall Local. As URIs e os métodos disponibilizados podem ser vistos na tabela 4.2.
Por exemplo, para adicionar uma regra ao firewall Root que permita pacotes TCP vindos
do host [Link] para o host [Link] na porta 80, basta executar o comando da figura 4.5.
O Firewall Root também é responsável por armazenar as regras em banco de dados.
O banco de dados utilizado atualmente é o MongoDB. Segundo (MONGODB, INC,
1
[Link]
2
[Link]
CAPÍTULO 4. FIREWALL PARA SDN COM VERIFICAÇÃO DE CONFLITO DE
REGRAS HIERÁRQUICAS 56
Método URI Descrição
POST /rootFw/rules/ Adiciona uma regra ao firewall Root.
POST /rootFw/verify Recebe a regra do Firewall Local para fa-
zer a veficação de conflitos
GET /rootFw/list Lista todas as regras Root definidas
PUT /rootFw/purgeDb Apaga o banco de dados de regras, tanto
as Root como as não Root. Isso não apaga
as regras que estão instaladas no Firewall
Local e nos switches.
TABELA 4.2 – Relação de métodos e URIs disponı́veis para o firewall Root.
curl -X POST -d ' { " nw_src " : " [Link]/32 " , " nw_dst " :
" [Link]/32 " , " nw_proto " : " TCP " , " tp_dst " : " 80 " ,
" dl_type " : " IPv4 " , " actions " : " ALLOW " } '
http :// localhost :8080/ rootFw / rules /0000000000000001
• getRootFw(filtro): Lê todas as regras que estão na coleção “root” do banco de dados
que coincidam com o filtro;
• setLocalFw: Insere uma regra não Root na coleção “local” do banco de dados;
O método para verificar se há conflito de regras foi inspirado no trabalho de (NATA-
RAJAN et al., 2012), que descreve uma técnica de verificação de conflito hı́brida hash-trie,
que divide cada entrada de fluxo em conjuntos de cabeçalhos para detectar o conflito em
cada campo individualmente, e depois utiliza uma matriz de intersecção para determinar
quais entradas de fluxo conflitam com a nova entrada de fluxo. Para maiores detalhes
da estratégia mencionada, volte ao capı́tulo 3, subseção 3.2 que, ao explanar o referido
trabalho, contém uma explicação das técnicas hash-trie e radix-trie.
No artigo, os autores utilizam uma estrutura radix trie para verificar conflitos nos
endereços IPs de origem e destino (chamados de campos baseados em prefixo), e uma es-
trutura hash-trie para verificar conflitos nos outros campos do fluxo (chamados de campos
de valores exatos).
Nessa dissertação, as regras de firewall são armazenadas em banco de dados, que
permite a criação de ı́ndices do tipo B-tree. Essa facilidade foi utilizada para a verificação
de conflitos nos campos de valores exatos. Então, ao invés de buscar no banco todas
as regras inseridas anteriormente, é feita uma busca utilizando-se filtros, que retornam
somente as regras que conflitem com a nova regra inserida, levando-se em consideração
somente esses campos de valores fixos.
Por exemplo, para criar uma regra que permita o tráfego do tipo TCP com destino a
CAPÍTULO 4. FIREWALL PARA SDN COM VERIFICAÇÃO DE CONFLITO DE
REGRAS HIERÁRQUICAS 59
funç~
a o verify_rule ( nova_regra )
preenche campos omitidos
busca regras conflitantes na coleç~ a o " root " do banco
de dados
if ( nenhuma regra retornou da busca acima )
continua
else
var lista [] = vazio
for ( cada regra retornada do banco )
if ( tem conflito de IP )
lista []. append ( regra
conflitante )
if ( lista [] nao está vazia )
retorna erro para o Firewall Local
grava nova regra na coleç~ a o " local " do banco de dados
retorna mensagem de sucesso para o Firewall Local
porta 80, com origem no host [Link]/32 e com destino ao host [Link]/32, a regra a ser
inserida é a seguinte: {“nw src”: “[Link]/32”, “nw dst”: “[Link]/32”, “dl type”: “IPv4”,
“nw proto”: “TCP”, “tp dst”: “80”, “actions”: “ALLOW”}. Desconsiderando os campos
baseados em prefixo (nw dst e nw src), qualquer regra que negue tráfego TCP com destino
a porta 80, com endereço do tipo IPv4, estará em conflito com essa nova regra. Então,
todo o processo de construir uma estrutura hash-trie utilizada por (NATARAJAN et al.,
2012) foi substituı́da por uma busca no banco de dados que já utiliza uma chave hash
dos campos relevantes. Para o caso acima, o filtro para a busca seria {“dl type”: “IPv4”,
“nw proto”: “TCP”, “tp dst”: “80”, “actions”: “DENY”}.
A verificação de conflito não pode ser feita usando uma pesquisa de hash nos campos
de endereço de IP de origem e destino porque as regras podem fazer referência a uma sub-
rede inteira. Então por exemplo, se uma regra tem como endereço de origem [Link]/32,
ela conflita com uma outra regra cujo endereço de origem seja [Link]/8, pois o primeiro
faz parte da sub-rede do segundo. Dado o conjunto de regras retornado pela busca feita
no banco, a nova regra compara os endereços de origem e destino um a um, utilizando-se
funções que comparam dois endereços IPs para ver se são iguais, ou se um pertence ao
outro (caso um deles ou os dois sejam uma sub-rede). Esta estratégia de implementação
de conferência de faixas de IP é similar a implementação do artigo que emprega radix-trie
e bastante difundida na área, embora o desempenho esperado do radix-trie seja superior.
Um exemplo de IPs que conflitam podem ser vistos na tabela 4.3.
No pior caso, a busca efetuada no banco irá retornar todas as regras da coleção (root
ou não root). Com isso, a verificação de conflito nos campos de endereço IP será feita em
CAPÍTULO 4. FIREWALL PARA SDN COM VERIFICAÇÃO DE CONFLITO DE
REGRAS HIERÁRQUICAS 60
IP da nova regra IP de regra existente Conflito de IP?
[Link]/32 [Link]/32 conflito
[Link]/8 [Link]/32 conflito
[Link]/32 [Link]/8 conflito
[Link]/8 [Link]/16 conflito
[Link]/16 [Link]/8 conflito
* [Link]/32 ou [Link]/8 conflito
[Link]/32 ou [Link]/8 * conflito
TABELA 4.3 – Exemplo de conflitos de endereços IP
todas as regras. Ou seja, o tempo para detectar o conflito, no pior caso, será O(n), onde
n é o número de regras presentes na coleção.
5 Verificação de Resultados
Para a realização dos testes foi criada uma rede virtual utilizando o Mininet. O
Mininet “é capaz de criar uma rede virtual realista, executando kernel, switch e códigos
de aplicações reais em uma única máquina, em segundos, com um simples comando”
(MININET TEAM, 2017). O Mininet foi instalado diretamente no sistema operacional do
computador utilizado para o teste. A figura 5.1 ilustra os componentes da estrutura
montada para os testes, onde vê-se o encadeamento em camadas de hardware e software.
VM VM VM
Mininet
VirtualBox
SO Hospedeiro - Ubuntu
Hardware
os dois switches, ou seja, cada controlador controla uma rede independente, e como dito
anteriormente, o objetivo do Controlador Root não é orquestrar uma rede logicamente
centralizada, e sim definir regras que serão repassadas para todos os switches de nı́vel
inferior e que não poderão ser sobrepostas.
Em cada switch estão ligados quatro hosts, totalizando oito hosts. O script utili-
zado para a criação da arquitetura utilizada para os testes no mininet está disponı́vel no
Apêndice A.1.
Para a execução dos três controladores foram criadas máquinas virtuais separadas
(representadas na figura 5.1). Neste ambiente se pode testar a comunicação entre os con-
troladores como se estivessem executando em máquinas diferentes, tornando o ambiente
de teste mais realista. Tanto as portas onde os controladores escutam como as portas
da interface REST foram unicamente definidas. Essas ações foram tomadas para evitar
qualquer dúvida sobre para qual controlador os switches estavam apontando, e para qual
controlador as regras de firewall estavam sendo enviadas.
Hospedeiro [Link]
porta controlador: 6636
porta Rest: 8080
VM MongoDB
[Link] [Link]
porta controlador: 6637 porta controlador:6638
porta Rest: 8081 porta Rest: 8082
VM VM
Firewall
Firewall Root Firewall
Local Local
Controlador
Controlador Root Controlador
Local Local
Mininet
Em cada um dos hosts foi iniciado um serviço HTTP usando o python para que os
testes pudessem ser feitos utilizando protocolo TCP, que é um protocolo de camada de
transporte do modelo TCP/IP que estabelece uma sessão entre os dois hosts envolvidos
na comunicação. O comando para subir um servidor HTTP nos hosts foi “python -m
CAPÍTULO 5. VERIFICAÇÃO DE RESULTADOS 63
SimpleHTTPServer 80’ ’. A partir deste ponto qualquer dos hosts poderia ser utilizado
para criação de fluxos de dados entre eles. A conexão ao serviço HTTP foi feita usando
o comando wget do Linux. Também foi utilizado o serviço SSH, que permite testes de
sessão remota com login e execução de comandos. Este foi um outro serviço adicionado
para enriquecer os testes das regras de firewall uma vez que o serviço SSH, diferente da
transferência via HTTP, mantem a sessão aberta indefinidamente.
# Descrição Regra
Estação do administrador de {“nw src”: “[Link]/32”, “nw dst”: “[Link]/32”, “dl type”:
1
rede local ([Link]) pode “IPv4”, “nw proto”: “TCP”, “tp dst”: “22”, “actions”:
acessar o servidor ([Link]) “ALLOW”}
usando a porta 22 (SSH) {“nw src”: “[Link]/32”, “nw dst”: “[Link]/32”, “dl type”:
“IPv4”, “nw proto”: “TCP”, “tp src”: “22”, “actions”:
“ALLOW”}
Todas os hosts da rede {“nw src”: “[Link]/8”, “nw dst”: “[Link]/32”, “dl type”:
2
([Link]/8) podem acessar o “IPv4”, “nw proto”: “TCP”, “tp dst”: “80”, “actions”:
servidor ([Link]) através da ”ALLOW”}
porta 80 (HTTP) {“nw src”: “[Link]/32”, “nw dst”: “[Link]/8”, “dl type”:
“IPv4”, “nw proto”: “TCP”, “tp src”: “80”, “actions”:
“ALLOW”}
Os outros hosts da rede não {“nw src”: “[Link]/8”, “nw dst”: “[Link]/32”, “dl type”:
3
podem acessar o servidor “IPv4”, “nw proto”: “TCP”, “tp dst”: “22”, “actions”:
([Link]) através da porta 22 “DENY”}
(SSH) {“nw src”: “[Link]/32”, “nw dst”: “[Link]/8”, “dl type”:
“IPv4”, “nw proto”: “TCP”, “tp src”: “22”, “actions”:
“DENY”}
Estação do administrador de {“nw src”: “[Link]/32”, “nw dst”: “[Link]/32”, “dl type”:
4
rede local ([Link]) pode “IPv4”, “nw proto”: “TCP”, “tp dst”: “22”, “actions”:
acessar o servidor Web “ALLOW”}
([Link]) usando a porta 22 {“nw src”: “[Link]/32”, “nw dst”: “[Link]/32”, “dl type”:
(SSH) “IPv4”, “nw proto”: “TCP”, “tp src”: “22”, “actions”:
“ALLOW”}
Todas os hosts da rede {“nw src”: “[Link]/8”, “nw dst”: “[Link]/32”, “dl type”:
5
([Link]/8) podem acessar o “IPv4”, “nw proto”: “TCP”, “tp dst”: “80”, “actions”:
servidor ([Link]) através da “ALLOW”}
porta 80 (HTTP) {“nw src”: “[Link]/32”, “nw dst”: “[Link]/8”, “dl type”:
“IPv4”, “nw proto”: “TCP”, “tp src”: “80”, “actions”:
“ALLOW”}
Os outros hosts da rede não {“nw src”: “[Link]/8”, “nw dst”: “[Link]/32”, “dl type”:
6
podem acessar o servidor “IPv4”, “nw proto”: “TCP”, “tp dst”: “22”, “actions”:
([Link]) através da porta 22 “DENY”}
(SSH) {“nw src”: “[Link]/32”, “nw dst”: “[Link]/8”, “dl type”:
“IPv4”, “nw proto”: “TCP”, “tp src”: “22”, “actions”:
“DENY”}
uma massa de dados mais abrangente foi testada. Algumas das regras utilizadas estão
descritas na tabela 5.3 e foram inseridas nessa ordem. Com essas regras mais abrangentes
o sistema de verificação de conflito também obteve o resultado esperado. Essas novas
regras são mais abrangentes pois fazem referência a:
• Protocolo UDP;
• Um host especı́fico;
• Qualquer host;
CAPÍTULO 5. VERIFICAÇÃO DE RESULTADOS 65
TABELA 5.3 – Regras adicionais para testes mais abrangentes. Nem todos os hosts estão
representados na figura 5.2
CAPÍTULO 5. VERIFICAÇÃO DE RESULTADOS 67
• Inserir regras no firewall padrão do Ryu: teste feito para coletar o tempo que a
inserção de regras leva no firewall do Ryu sem nenhuma alteração.
• Inserir somente regras Root no Firewall Root, sem verificação de conflito, mas sem
armazená-las em banco de dados: teste feito para coletar o tempo que a inserção
de regras leva sem armazenar em banco de dados. Com isso será possı́vel calcular o
impacto que o acesso a disco irá causar.
• Inserir somente regras Root no Firewall Root, sem verificação de conflito, porém
armazenando-as em banco de dados: sem ter nenhuma regra conflitante espera-se
que o tempo de inserção permaneça constante entre regras, uma vez que acontece
uma mera inserção sem processamento adicional.
• Inserir somente regras não Root, sem nenhuma regra Root: assim como no ı́tem
anterior, espera-se que o tempo permaneça constante.
• Inserir alternadamente regras Root e não Root: serão inseridas regras Root cujos
endereços IP de origem serão incrementados sequencialmente mas com o mesmo en-
dereço de destino (“nw dst”: “[Link]/32”, “nw src”: “10.0.x.y”, “dl type”: “IPv4”,
“nw proto”: “TCP”, “tp dst”: “80”, “actions”: “ALLOW”). Alternadamente, será in-
serida uma regra não Root que conflite com as regras Root (“nw dst”: “[Link]/32”,
“nw src”: “[Link]/8”, “dl type”: “IPv4”, “nw proto”: “TCP”,“tp dst”: “80”, “actions”:
“DENY”). Com isso, a cada iteração, a quantidade de regras conflitantes será incre-
mentada.
O gráfico com a comparação dos tempos pode ser visto na figura 5.3. Foram inseridas
mil regras em cada teste, e foi calculada a média do tempo de processamento medido a
cada dez regras. O tempo de processamento foi medido a partir da entrada da regra pelo
operador passando pela etapa de envio ao Root, verificação de conflito e concluindo com
a resposta de aceitação ou não da regra. Os testes foram gerados através de um laço que
a cada incremento de IP gerava uma nova regra.
CAPÍTULO 5. VERIFICAÇÃO DE RESULTADOS 68
0.018
0.016
Tempo médio em segundos
0.014
0.012
0.01
0.008
0.006
0.004
0.002
0 10 20 30 40 50 60 70 80 90 100
Quantidade de regras inseridas (x10)
Firewall padrão do Ryu
Inserção de regras Root sem verificação de conflito e sem armazenar em banco
Inserção de regras Root sem verificação de conflitos
Inserção de regras não Root sem regras Root
Inserção de regras alternadas
FIGURA 5.3 – Comparação dos tempos de processamento das regras de firewall. Testes
realizados em um computador Intel Core(TM) i5-2400 3.10GHz com 8GB de memória
RAM e disco SSD com sistema operacional Ubuntu Server 16.04.02 64 bits
do teste, o tempo de inserção das regras ficou próximo de 0,009 segundos, e no fim do
teste o tempo ficou próximo de 0,016 segundos, o que representa um aumento de 1,77x
da primeira para a última inserção do teste. Lembrando que esse teste é o pior caso, onde
a regra inserida (não Root) irá conflitar com todas as regras Root existentes, ou seja, na
última medição, ela está sendo verificada contra mil regras.
Uma descrição das operações que são executadas pela verificação de conflitos em cada
um dos testes segue abaixo:
• Inserção de regras Root sem verificação de conflitos (linha azul): Tem o pior tempo
pois contém o maior número de tarefas: verificação de conflitos; armazenamento em
banco; envio da regra aos dois controladores; resposta dos controladores.
• Inserção de regras não Root sem regras Root (linha laranja): envio da regra ao
controlador Root; verificação de conflito; armazenamento em banco; resposta do
Root ao controlador local que enviou a regra.
Na prática é necessário inserir uma grande quantidade de regras para que um adminis-
trador de rede perceba a diferença de tempo. Inserir mil regras no firewall nativo do Ryu
levará 4 segundos, e inserir mil regras com mil regras conflitantes irá leva 16 segundos, e
esse é o pior caso. Esse cenário onde muitas regras são inseridas por segundo é possı́vel,
por exemplo, caso haja uma integração do firewall com um IPS, e o ambiente esteja so-
frendo um ataque. O IPS irá detectar muitos acessos indevidos em um curto espaço de
tempo, e irá enviar muitas regras novas para o firewall. Nesse caso, o tempo de inserção
irá depender de quantas Regras Locais existem, pois como visto no gráfico, o tempo é
constante caso só haja um aumento de Regras Root sendo inseridas.
Outro ponto importante é que, depois que as regras estiverem inseridas, isso não irá
prejudicar o desempenho dos controladores, pois o firewall Root atua somente quando as
regras são inseridas.
CAPÍTULO 5. VERIFICAÇÃO DE RESULTADOS 70
Tempo
FlowGuard 0,06ms ∼ 9,01ms
Veriflow 1ms ∼ 159,2ms
Este Trabalho 10ms ∼ 16ms
TABELA 5.4 – Comparação de tempos com Trabalhos Relacionados
mais rapidamente em todas elas caso haja alguma alteração. Isso permite um controle com
grande flexibilidade nas filiais, pois os administradores locais podem continuar a definir
polı́ticas que dizem respeito somente àquela porção da rede da organização.
O uso de SDN foi muito conveniente para o desenvolvimento do sistema. É uma abor-
dagem moderna que por ser centralizada simplificou a integração das localidades. Além
disso, os controladores OpenFlow disponı́veis fornecem APIs para o desenvolvimento de
aplicações tornando também relativamente simples o desenvolvimentos do firewall. O sis-
tema de verificação de conflitos desenvolvido foi feito totalmente na camada de aplicação,
sem interferência ou alteração dos controladores SDN sobre os quais se apoiam. Essa
caracterı́stica permite que o sistema seja portável para outros controladores diferentes,
bastando para isso implementá-lo usando a API do controlador onde se deseja execu-
tar. Os testes em máquinas virtuais mostraram a viabilidade de tornar este firewall uma
Função Virtual de Rede (NFV - Network Functions Virtualization). A flexibilidade da
estrutura é altamente aderente com as tendências atuais das redes e suas configurações.
6.1 Limitação
A primeira sugestão para trabalhos futuros refere-se a firewall stateful, onde se conhe-
cem as conexões e se mantém regras conhecidas para os fluxos em andamento. Ao longo
da pesquisa para o desenvolvimento dessa dissertação verificou-se o inı́cio de estudos sobre
a implementação desse tipo de firewall em SDN. É necessário avaliar quais alterações são
necessárias no sistema hierárquico desenvolvido para que ele funcione corretamente com
firewall stateful.
Outra sugestão para a continuidade deste trabalho é a implementação de mais nı́veis de
hierarquia. Fazer essa alteração é um processo que não demanda muito esforço. Durante
a pesquisa os ambientes considerados não necessitaram de mais de um nı́vel pois, mesmo
que a organização tenha vários nı́veis, isso não necessariamente se reflete na administração
da rede e suas polı́ticas de segurança.
CAPÍTULO 6. CONCLUSÃO 74
GUDE, N.; KOPONEN, T.; PETTIT, J.; PFAFF, B.; CASADO, M.; MCKEOWN, N.;
SHENKER, S. Nox: Towards an operating system for networks. SIGCOMM
Comput. Commun. Rev., ACM, New York, NY, USA, v. 38, n. 3, p. 105–110, jul.
2008. ISSN 0146-4833. Disponı́vel em: <[Link]
HU, H.; HAN, W.; AHN, G.-J.; ZHAO, Z. Flowguard: Building robust firewalls for
software-defined networks. In: Proceedings of the Third Workshop on Hot
Topics in Software Defined Networking. New York, NY, USA: ACM, 2014.
(HotSDN ’14), p. 97–102. ISBN 978-1-4503-2989-7. Disponı́vel em:
<[Link]
KOPONEN, T.; CASADO, M.; GUDE, N.; STRIBLING, J.; POUTIEVSKI, L.; ZHU,
M.; RAMANATHAN, R.; IWATA, Y.; INOUE, H.; HAMA, T.; SHENKER, S. Onix: A
distributed control platform for large-scale production networks. In: Proceedings of
the 9th USENIX Conference on Operating Systems Design and
Implementation. Berkeley, CA, USA: USENIX Association, 2010. (OSDI’10), p.
351–364. Disponı́vel em: <[Link]
MONGODB, INC. Do What You Could Never Do Before. 2017. Disponı́vel em:
<[Link]
PORRAS, P.; CHEUNG, S.; FONG, M.; SKINNER, K.; YEGNESWARAN, V. Securing
the software-defined network control layer. In: Proceedings of the 2015 Network
and Distributed System Security Symposium (NDSS). San Diego, CA, USA:
Network and Distributed System Security Symposium (NDSS), 2015.
PORRAS, P.; SHIN, S.; YEGNESWARAN, V.; FONG, M.; TYSON, M.; GU, G. A
security enforcement kernel for openflow networks. In: Proceedings of the First
Workshop on Hot Topics in Software Defined Networks. New York, NY, USA:
ACM, 2012. (HotSDN ’12), p. 121–126. ISBN 978-1-4503-1477-0. Disponı́vel em:
<[Link]
RAO, S. SDN Series Part Three: NOX, the Original OpenFlow Controller.
December 2014. Disponı́vel em:
<[Link]
SHERWOOD, R.; GIBB, G.; YAP, K. kiong; CASADO, M.; MCKEOWN, N.;
PARULKAR, G. FlowVisor: A Network Virtualization Layer. Palo Alto, CA,
USA, 2009.
YOON, C.; PARK, T.; LEE, S.; KANG, H.; SHIN, S.; ZHANG, Z. Enabling security
functions with sdn: A feasibility study. Computer Networks, v. 85, p. 19–35, 2015.
Apêndice A - Códigos Utilizados
3 """
4 Script created by VND - Visual Network Description ( SDN
version )
5 """
6 from mininet . net import Mininet
7 from mininet . node import Controller , RemoteController ,
OVSKernelSwitch , IVSSwitch , UserSwitch
8 from mininet . link import Link , TCLink
9 from mininet . cli import CLI
10 from mininet . log import setLogLevel
11
12 def topology () :
13
51
1. 2. 3. 4.
CLASSIFICAÇÃO/TIPO DATA DOCUMENTO Nº Nº DE PÁGINAS
DM 31 de julho de 2017 DCTA/ITA/DM-061/2017 80
5.
TÍTULO E SUBTÍTULO:
Modelo de Firewall para Redes Definidas por Software com Verificação de Conflitos de Regras Hierárquicas
6.
AUTOR(ES):
Ruy Minoru Ito Takata
7.
INSTITUIÇÃO(ÕES)/ÓRGÃO(S) INTERNO(S)/DIVISÃO(ÕES):
Instituto Tecnológico de Aeronáutica – ITA
8.
PALAVRAS-CHAVE SUGERIDAS PELO AUTOR:
Redes de Computadores, SDN, firewall, segurança, firewall hierárquico
9.
PALAVRAS-CHAVE RESULTANTES DE INDEXAÇÃO:
Redes de Computadores; Redes Definidas por Software; Arquitetura de Software; Avaliação de Desempenho;
Computação.
10.
APRESENTAÇÃO: (X) Nacional ( ) Internacional
ITA, São José dos Campos. Curso de Mestrado. Programa de Pós-Graduação em Engenharia Eletrônica e
Computação. Área de Informática. Orientadora: Profa . Dra . Cecı́lia de Azevedo Castro César. Defesa em
06/07/2017. Publicada em 2017.
11.
RESUMO:
Organizações que estão distribuı́das em mais de um local fı́sico tem dificuldade em manter a coerência entre as
polı́ticas de segurança entre as localidades. Ao definir uma nova regra de segurança em um firewall em qualquer
das localidades é desejável que esta regra não entre em contradição com a polı́tica geral da organização, o que po-
deria causar uma vulnerabilidade no sistema como um todo. O processo de manter a coerência global permitindo
uma certa flexibilização na definição de polı́ticas locais não conflitantes é muito trabalhoso e frequentemente feito
de forma manual. Em grandes organizações, com muitas regras definidas, este desafio não tem sido atingindo
satisfatoriamente. O paradigma de Redes Definidas por Software (Software Defined Networking - SDN) facilita a
definição de arquiteturas hierárquicas que permitem o fortalecimento neste cenário de administração distribuı́da.
O presente trabalho desenvolveu uma aplicação de firewall hierárquica em ambiente SDN que faz a verificação
de coerência das regras das localidades a partir da definição de regras do nı́vel hierárquico superior. O sistema
desenvolvido mantém a coerência entre as regras de forma automática. A verificação é realizada no momento
da inserção da regra, não interferindo no desempenho normal do firewall. A avaliação de desempenho indicou
tempo reduzido na inserção.
12.
GRAU DE SIGILO:
(X) OSTENSIVO ( ) RESERVADO ( ) CONFIDENCIAL ( ) SECRETO