Um Exemplo de Firewall: IPTables

O IPTables é um comando disponível na maioria das distribuições Linux que comunica-se com uma biblioteca existente no kernel desse sistema operacional, chamada de NetFilter. Ele é o firewall padrão do Linux, compreendendo os conceitos que aparecem a seguir.

Regras: são comandos passados ao Netfilter para realizar uma determinada ação de acordo com, por exemplo, o endereço/porta de origem/destino, interface de origem/destino etc. O NetFilter realiza a comparação dessas regras com os pacotes que passam pela rede para autorizá-los ou não.

Chains: as regras são armazenadas em chains, que podem ser de dois tipos: os padrões (Ex: INPUT, OUTPUT e FORWARD) e os criados pelo usuário.

Tabelas: são locais usados para armazenar os chains e regras com características semelhantes. Existem três tabelas disponíveis no NetFilter, que são FILTER, NAT e MANGLE. Na tabela FILTER, são definidos quais pacotes podem passar ou não. Isso é justamente um filtro de pacotes. A tabela NAT (Network address translation) refere-se aos pacotes que vão sofrer tradução de endereço. A tabela MANGLE define quais pacotes serão marcados para uma ação posterior.

Alvo: é a ação a ser tomada quando um pacote “casa” com uma regra existente em uma chain. No IPTables, existe, entre outros: ACCEPT, DROP, REJECT e QUEUE. O ACCEPT permite que pacote chegue ao seu destino. A ação DROP nega o pacote sem retornar mensagem. A ação REJECT, por sua vez, nega a passagem do pacote, retornando uma mensagem. Por fim, o QUEUE envia pacote ao espaço do usuário.

O IPTables tem vários comandos para manipular as chains. Por exemplo, -L [Chain] lista as regras de uma chain. Esse curso tem como finalidade dar uma visão geral sobre os firewalls, por isso estamos citando o IPTables apenas para ilustrar. Não vamos, portanto, detalhar a vasta lista de comandos por ele disponibilizados. Um exemplo de uso do IPTables é a linha de código mostrada a seguir.

Nela, usamos o IPTables para incluir uma regra “A” no chain INPUT (-A INPUT) que bloqueia (-j DROP) qualquer acesso destinado ao endereço 7.8.9.10 (-d 192.168.0.1).

Fluxo de pacotes e processamento no NetFilter.

A Figura 13 mostra como ocorre o fluxo de dados internamente no kernel do Linux. Os pacotes movem-se atravessando as chains. Em cada quadrado da figura, são mostrados os chains do NetFilter (em azul) e as tabelas válidas para aquele chain (em vermelho). Por exemplo, na chain INPUT, existem as tabelas Mangle e Filter. Os pacotes que se enquadram nesta chain irão passar sequencialmente por elas. Se o pacote casa com alguma regra dessas tabelas, ele é processado. Se o pacote não casa com as regras, ele pode ser aceito ou descartado ― isso depende da política implementada. Se a política for descartar todos os pacotes que não casam com nenhuma regra (a mais comum), ele será descartado.

Versão 5.3 - Todos os Direitos reservados