Mecanismo de firewall e seus conceitos

Autor: Elgio Schlemer <elgio.schlemer at gmail.com>

Introdução

Este artigo nasceu de uma palestra que fiz na Livraria Cultura em Outubro de 2009, pelo grupo TchêLinux.
A palestra acabou sendo uma coleção deste artigo junto com os demais
artigos que já publiquei sobre Iptables aqui mesmo no Viva o Linux.
Toda a palestra em PDF pode ser obtida em: Iptables: entenda como funciona o firewall do Linux

Quando se pensa em segurança de sistemas a primeira palavra que sempre
vem a tona é firewall. Firewall para alguns virou um certo sinônimo de
"corpo fechado". Tem firewall, tudo seguro, não tem, tudo aberto.

Contudo quem conhece realmente esta ferramenta sabe que muito
mais importante do que ter um firewall é saber configurá-lo de forma
correta. Muito pior um firewall com regras fracas, pois ele lhe dará a
falsa sensação de segurança.

Existem firewalls para os mais diversos sistemas operacionais.
A Microsoft passou a incorporar esta ferramenta a partir do Windows XP
(antes disto podia-se baixar ferramentas pagas ou gratuitas), enquanto
que o Linux e o BSD praticamente nasceram com filtragem de pacotes.

Define-se como firewall qualquer mecanismo que impeça o acesso baseado
em certas regras de controle. Dentro deste conceito, um sistema baseado
em proxy, como o Squid, por exemplo, é considerado um firewall pois
permite bloquear o acesso baseado em URL ou palavras chaves. O
iptables, porém, não é exatamente este tipo de firewall, ele se
enquadra no tipo de firewall chamado de filtro de pacotes.

Normalmente ao se falar em firewall está-se falando em filtro de pacotes.

Classificação quanto a atuação

Um firewall pode inicialmente ser classificado em dois tipos básicos, filtros de aplicação e filtro de pacotes.

Filtro de pacotes tem condições de filtrar baseado unicamente
no conteúdo de seus cabeçalhos. Apesar do iptables permitir filtragem
por contexto, ainda assim ele é considerado um filtro de pacotes.

Já o Squid, por exemplo, é considerado um filtro de aplicação.
Ele (Squid) tem conhecimento para analisar não apenas os cabeçalhos mas
também o conteúdo de um pacote do tipo HTTP e aplicar regras de
bloqueio baseado em textos (strings) contidas dentro dele. O Squid
entende uma requisição HTTP, sabe o que é um GET e um POST, assim como
todos os campos e dados de uma sessão HTTP. Trata-se, portanto, de um
filtro de aplicação. Mesmo o iptables podendo filtrar baseado em
strings, não chega nem perto do que um Squid pode fazer.

Tipicamente, determina-se como filtro de pacotes um firewall
que trabalha apenas nos níveis de Rede e Transporte do modelo TCP/IP
(Figura 1). Este modelo ainda conta com o nível físico, que não faz
parte da pilha pois é hardware (a pilha TCP/IP tipicamente representa
apenas software, tarefas que o sistema operacional deve implementar).

Linux: Mecanismo de firewall e seus conceitos

Resumidamente,
no nível de Enlace tem-se, por exemplo, o Ethernet, onde o
endereçamento é realizado através de uma informação de 48 bits
conhecida como MAC ADDRESS, ou endereço de hardware (o campo Hwaddr
fornecido por um ifconfig).

No nível de rede tem-se o roteamento, sendo o protocolo IPv4 o
mais usado, apesar da existência da versão 6 que ainda não se
popularizou. Já no nível de transporte tem-se o UDP e TCP como
principais protocolos e na aplicação os programas e aplicações, como o
Apache e Firefox.

Trabalhar no nível de rede significa que um filtro de pacotes
pode analisar o cabeçalho deste, como IP de destino e IP de origem,
enquanto que trabalhar no nível de transporte significa que pode
filtrar por protocolo (UDP, TCP), porta de origem e de destino.

O iptables, mesmo sendo um filtro de pacotes, vai um pouco
além disto, permitindo filtrar no nível de Enlace (MAC placa de rede) e
até mesmo na aplicação. O pessoal do BSD critica muito esta postura do
iptables de ser um, quase, canivete suíço que faz tudo, até o que não
deveria ser, conceitualmente, tarefa de um filtro de pacotes.

Classificação quanto ao que protege

Outra classificação importante quanto ao filtro de pacotes é a
abrangência do mesmo. Ele pode ser considerado como um filtro de host,
protegendo apenas e unicamente a máquina na qual se encontra
(frequentemente chamado de firewall pessoal) ou filtro de rede, para
proteger uma rede inteira. O iptables pode ser ambos.

Um filtro de host normalmente tem menos trabalho. Como ele
está protegendo apenas uma única máquina, aquela na qual se encontra
instalado, ele pode realizar filtragens mais robustas, pois tem tempo
para isto. Uma análise mais detalhada de um pacote demanda
processamento, mas como os pacotes que entram ou saem da máquina não
seriam tantos assim, este processamento não é crítico.

No mundo proprietário algumas ferramentas conhecidas como firewall
pessoal acabam realizando outras tantas tarefas que não são de
firewalls. Algumas abrem anexos de emails para procurar vírus (seria um
antivírus incorporado ao firewall), ou analisam os pacotes a procura de
padrões de invasões (seria um IDS).

Linux: Mecanismo de firewall e seus conceitos


um filtro de rede precisa se preocupar com pacotes que entram e saem da
rede. Dependendo do tamanho desta rede e da largura de banda dela,
colocar muitas regras e/ou regras muito complexas pode transformar o
filtro em um gargalo. Esta é, inclusive, algumas das poucas críticas ao
iptables. Como ele tem muito poder de filtragem, permitindo até mesmo
filtrar por palavras (strings na área de dados), alguns administradores
tendem a se empolgar e transformar seu firewall em um limitador de
banda. Claro que se você tem uma rede Ethernet 100Mbps e um link com a
Internet de 10Mbps, qualquer máquina com um bom processador atual irá
filtrar com folga teus pacotes de e para a Internet, pois 10Mbps já
seria um gargalo.

Classificação quanto ao poder

Os filtros de pacotes ainda se dividem em stateless, muito mais conhecido como filtro estático, e os filtro statefull, também chamado de filtro dinâmico.

Um filtro stateless ou estático é aquele que precisa tomar a
sua decisão baseado unicamente no pacote atual. Tal filtro não tem
possibilidade de "lembrar-se" do passado e nunca poderia tomar uma
decisão como "vou bloquear este pacote porque já passaram 100 deste ip
no último minuto". Para que ele fizesse isto, teria que armazenar a
informação de que passaram-se 100 pacotes em um minuto, e o stateless
não tem esta memória.

A única informação que um stateless pode usar para decidir
pelo bloqueio ou não de um pacote é baseado em informações que estão
presentes neste pacote. Informações estas que podem ser número do IP,
da porta, do protocolo ou qualquer outra informação disponível nos
cabeçalhos do pacote que se está filtrando.

Já os filtros statefull ou dinâmicos permitem tomar sua
decisão baseada em decisões ou pacotes anteriores. Com um filtro
statefull é possível tomar uma decisão como"vou deixar este pacote de
dados passar porque a origem completou corretamente o handshake TCP".
Para que ele tome esta decisão é necessário que ele tenha visto o
handshake e armazenado esta informação para lembrar-se dele
posteriormente (Figura 3).

Linux: Mecanismo de firewall e seus conceitos

Filtros
de pacotes incorporados a roteadores comerciais geralmente são apenas
stateless. O motivo disto é fácil de explicar, já que são roteadores e
não firewalls. Todo o hardware foi construído para rotear e rotear bem.
Também porque os filtros statefull requerem muito mais recursos de
hardware, seja de memória para armazenar as informações de pacotes
anteriores, seja de processamento para recuperar esta informação
consultando tabelas. Filtros statefull são mais lentos e consomem mais
recursos e mais facilmente podem tornarem-se gargalos.

Já o iptables é extremamente statefull. Extremamente porque
muita coisa pode ser feita baseada em sua capacidade de memorização de
pacote, como:

  • consultar sua tabela para ver se este pacote pertence a uma sessão ativa (módulo state);
  • contar quantos pacotes passam por determinando intervalo de tempo (módulo limit);
  • armazenar os ips de origem e contar quantos pacotes vieram deles (módulo recent);

O iptables possui recursos que podem até instigar a
curiosidade sobre sua necessidade. Pode-se até mesmo decidir recusar,
aleatoriamente, uma porcentagem dos pacotes que entram.

Conclusão e referências

Muito se fala em firewall e mais ainda em iptables, que tem muito
poder de filtragem. Mas poder significa responsabilidade e conhecer as
peculiaridades do iptables, seu jeito de ser, é pré-requisito para quem
deseja aventurar-se em suas configurações.

Não se pode querer gerenciar um firewall iptables sem:

  • conhecer a pilha TCP/IP: saber quais informações existem nos
    cabeçalhos do IPv4, do UDP e do TCP. Saber o que é um handshake e o que
    são pacotes ICMP, enfim, abrir as entranhas de um pacote;
  • saber o que é realmente um firewall filtro de pacotes, qual
    o seu poder e quais as suas limitações. Quais os tipos de filtro que
    existem e o que se pode realizar com eles;
  • conhecer a estrutura do iptables, conhecer como as tabelas
    se relacionam, o que cada uma faz e como faz. Saber onde (qual lista e
    tabela) uma regra deve ser inserida e porque;
  • aprender a sintaxe dos comandos: saber os comandos de
    inserção do iptables. Como uma regra é construída, cada um de seus
    campos.

Uma continuação deste artigo, mesmo que tenha sido escrito antes, pode ser encontrado em Estrutura do Iptables, sendo que o mesmo tem sua continuidade no artigo Estrutura do Iptables 2: a tabela nat. Como a configuração de regras de firewall está muito ligada as configurações de IPs e suas máscaras, a leitura do artigo 255.255.255.0: a matemática das máscaras de rede pode ser bem vinda.

Em nenhum destes artigos eu chego a falar da sintaxe do iptables em si, exceto na palestra da Livraria cultura. Contudo muitos artigos aqui mesmo no Viva o Linux se propõe a ensinar a sintaxe do iptables, como um recente intitulado Segurança com Iptables.

Basicamente tenho pregado que configurar iptables não é pegar
um script receita de bolo do tipo "mega firewall faz tudo" e sair
aplicando em sua rede. Raramente isto traz bons resultados. Ou você
aprende a configurar ou instala alguma ferramenta gráfica de
gerenciamento de firewall como o guarddog, por exemplo. Usar receitas
de bolo é contra a filosofia do Linux. Aprenda e domine!


http://www.vivaolinux.com.br/artigo/Mecanismo-de-firewall-e-seus-conceitos

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s