Firewall Iptables
today Postado em 30 de Nov de -0001

A função do Firewall é tomar conta das portas, verificar quem as está acessando e conforme as regras do usuário deixar ou não o acesso dos programas através das referidas portas.

Para usuários Linux temos o iptables, configurado via scripts.

As regras do iptables são compostas de uma Tabela, Opção, Chain, Dados e Ação.

 iptables [-t tabela] [opção] [chain] [dados] -j [ação]

Tabelas:

– São os locais usados para armazenar os chains. As tabelas são referenciadas em uma regra iptables com a opção “-t tabela“.

Existem 3 tabelas disponíveis:

filter – tabela padrão, usada no tráfego de dados comum com ocorrência de NAT (geração de outra conexão);

nat – usada quando há ocorrência de NAT (geração de outra conexão);

mangle – raramente usada, utilizada para alterações especiais de pacotes.

Se você deixar em branco [-t tabela], a tabela usada será a filter.

Opções:

Representada por uma letra sempre escrita em maiúscula.

-A = acrescenta uma nova regra às existentes;

-L = lista as regras existentes;

-F = apaga todas as regras;

-I = insere uma nova regra;
-Z = zera uma regra especifica;

Chains:

– Com eles podemos especificar a situação do tratamento dos pacotes, seja qual tabela for, exemplo: para tabelas filter temos as seguintes tipos de chains:

INPUT – consultado para dados que chegam ao computador;

OUTPUT – consultado para dados que saem do computador;

FORWARD – consultado para dados que são redirecionados para outra interface de rede ou outra máquina.

– Já para as tabelas nat os chains possíveis são:

PREROUTING – consultado para os dados que precisam ser modificados logo que chegam (DNAT e redirecionamentode portas);

POSTROUTING – consultado para dados que precisam ser modificados após o tratamento de roteamento (IP Masquerading);

OUTPUT – consultado quando os dados gerados localmente precisam ser modificados antes de serem roteados (IPs locais).

Composição das regras do iptables: dados e ações.

Dados:

 – As opções de dados possíveis de inserção em uma regra iptables são:

-s

– Especifica a origem do pacote. Origem que pode ser informada como:

* endereço IP completo (-s 192.168.1.1);

* hostname (-s ubuntu);

* endereço fqdn (-s www.ubuntu.com);

* par rede/máscara (-s 200.200.200.0/255.255.255.0 ou -s 200.200.200.0/24).

 -d

– Especifica um destino para o pacote, com a mesma sintaxe descrita acima por -s.

-i

– Identifica a interface de entrada do pacote, podendo ser placa de rede, modem ou interface de conexão:

* -i eth0

* -i eth1

* -i ppp0

-o

Identifica a interface de saída do pacote, com a mesma sintaxe descrita acima em -i.

-p

– Especifica o protocolo usado na regra, podendo ser:

* -p tcp

* -p udp

* -p icmp

 -sport ou –source-port

– Especifica uma porta ou faixa de portas de origem. Deve sempre ser acompanhado por -p tcp e -p udp.

-dport ou –destination-port

– Especifica uma porta ou faixa de portas de destino. Deve sempre ser acompanhado por -p tcp e -p udp.

!

– Exclui determinado argumento (exceção).

Ações:

– Sempre vem após o parâmetro -j e os mais usados são:

ACCEPT – O pacote é ACEITO e o processamento das regras daquele chains é concluído;

DROP – Rejeita o pacote sem nenhum aviso;

REJECT – Rejeita o pacote, mas envia um aviso;

LOG – Este módulo envia uma mensagem ao syslog (/var/log/messages) tanto com o pacote aceito ou rejeitado.

Manipulando regras:

– Após conhecermos toda a estrutura de uma regra para o iptables, devemos saber como salvar nossas regras.

Nós podemos usar duas maneiras. A primeira é usando o comando:

# iptables-save > /diretório/[dê um nome para o arquivo]

Para restaurá-la, usamos outro comando:

 # iptables-restore > /diretório/[nome do arquivo]

A segunda maneira é criando um script com as regras:

#!/bin/bash

# descrição da regra

iptables [regra]

– Salve o arquivo [nome do arquivo], dê permissão de execução:

– Toda vez que quiser que ele seja habilitado é só executá-lo (sempre como root):

#!/bin/bash

# descrição da regra

iptables [regra]

chmod +x [nome do arquivo]

Comandos Básicos:

– Digitando:

iptables -L

– Lista suas atuais regras no iptables. Se você acabou de configurar seu servidor, você não terá regras, e você verá:

– Você poderia começar por bloquear o tráfego, mas talvez você esteja trabalhando por SSH, onde você precisa permiti-lo antes de bloquear todo o resto.

– Para permitir o tráfego de entrada (incoming) padrão para porta SSH (22), você pode dizer ao iptables permitir que todo tráfego TCP nesta porta esteja autorizado.

iptables -A INPUT -p tcp –dport ssh -j ACCEPT

–dport – As Portas de destino precisam desta regra.

– Sobre o comando anterior é uma regra que significa, a permissão de todos os pacotes TCP vindos da porta padrão SSH.

– Agora, vamos bloquear todo tráfego de entrada na porta 80 proveniente de um IP.

iptables -A INPUT -s 192.168.2.108 -p tcp –dport 80 -j DROP

– Checando as regras nós temos:

Outras Regras:

– Um exemplo que cria uma regra que nega todos os pacotes ICMP vindos do servidor, em que se encontra o firewall.

#iptables -A INPUT -P icmp -j DROP

– A regra citada faz com que todos os pacotes vindos de qualquer endereço da classe de ip 200.204.120.0

#iptables -A INPUT -s 200.204.120.0/24 -j DROP

– Esta regra só permitirá pacotes icmp para máquinas que estejam em qualquer endereço ip, menos no citado abaixo.

#iptables -A OUTPUT -p icmp -d ! 200.201.120.0/24 -j ACCEPT

Exemplo Compartilhar a Internet

modprobe iptable_nat

iptables –t nat –A POSTROUTING –o eth1 –j MASQUERADE

echo 1 >/proc/sys/net/ipv4/ip_forward

Com esses comandos, você pode ainda criar outras combinações.

Bons testes!

Humberto Forsan

Especialista em Segurança da Informação