5.1. TECNOLOGIAS E TÉCNICAS UTILIZADAS
25
de usuário. Já o Netfilter é a entidade com quem a aplicação em espaço do usuário se
comunica, sendo quem, de fato, aceita ou bloqueia os pacotes.
A grande vantagem de se construir um sistema de filtragem de pacotes de propósito
específico utilizando como base essa infra-estrutura é o fato de que o Iptables pode ser
também utilizado em conjunto com a aplicação de filtragem de pacotes, auxiliando-a.
Regras de Iptables podem ser estabelecidas para complementar o sistema, suprindo defi-
ciências da aplicação de propósito específico. No caso do nosso sistema firewall, regras
de Iptables podem ser normalmente utilizadas, por exemplo, para bloquear outros tipos de
tráfego, restringir endereços IPs e portas, ou até mesmo para limitar a taxa de transmissão
do tráfego, prevenindo o sistema contra ataques de inundação de tráfego (flood).
5.1.2 Inspeção de Datagramas IP no Espaço de Usuário
A abordagem mais comum ao se implementar firewalls de propósito específico, utili-
zando como estrutura base o sistema operacional Linux, consiste no desenvolvimento de
uma série de modificações (patches) para o Netfilter e, consequentemente, para o Iptables.
O desenvolvimento desses patches é uma tarefa custosa, uma vez que envolve manipula-
ção do código-fonte do kernel, requer um aprofundado conhecimento do funcionamento
do Netfilter e do Iptables, e no desenvolvimento de patches para o kernel (kernel pat-
ching). A adoção de tal abordagem torna todas as fases do desenvolvimento diretamente
dependentes de inúmeras compilações e instalações do kernel, o que, em geral, demanda
bastante tempo. Outra dificuldade relacionada à esta abordagem está no processo de dis-
tribuição do software, onde seria necessário o desenvolvimento de patches apropriados
para diversas versões do kernel do Linux.
Uma abordagem alternativa para evitar os problemas do desenvolvimento em nível do
kernel consiste em utilizar um cenário de processamento de pacotes em que datagramas
IP são capturados no espaço do kernel, trazidos ao espaço de usuário, onde são analisados
ou manipulados, e em seguida, autorizados a voltarem ao espaço do kernel, para que
possam ser liberados. Este procedimento pode ser entendido como um mecanismo de
“seqüestro” de datagramas, em que somente após processamento em nível de usuário,
estes datagramas seriam autorizados a dar continuidade às suas trajetórias através da rede.
Uma maneira de se realizar tal procedimento em um sistema Linux se dá pela utili-
zação do mecanismo de enfileiramento de datagramas para processamento em espaço de
usuário do Netfilter. Este sistema é capaz de passar datagramas IP do espaço do kernel
para o espaço de usuário, e, então, recebê-los de volta juntamente com um veredicto, es-
pecificando a ação que o Netfilter deve tomar (aceitar ou descartar o datagrama) [Burns
et al. 2007, Libipq 2009, Netfilter 2009]. Um módulo manipulador de filas do kernel é
utilizado para interagir com o Netfilter e para desempenhar o mecanismo de passagem
de datagramas do espaço de kernel para o de usuário e vice-versa. Enquanto isso, uma
biblioteca é utilizada para permitir que aplicações em espaço de usuário obtenham acesso
a esses datagramas provenientes do espaço do kernel.
A principal vantagem dessa abordagem está na simplicidade de implementação. Dessa
forma, o programador pode direcionar sua atenção no desenvolvimento de firewalls ou
aplicações de manipulação de pacotes personalizadas inteiramente no espaço de usuário,