sexta-feira, 25 de janeiro de 2013

Um Pouco Sobre o Iptables


O Firewall é um programa que como objetivo proteger a máquina contra acessos indesejados, tráfego indesejado, proteger serviços que estejam rodando na máquina e bloquear a passagem de coisas que você não deseja receber (como conexões vindas da Internet para sua segura rede local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais). No kernel do Linux 2.4, foi introduzido o firewall iptables (também chamado de netfilter) que substitui o ipchains dos kernels da série 2.2. Este novo firewall tem como vantagem ser muito estável (assim como o ipchains e ipfwadm), confiável, permitir muita flexibilidade na programação de regras pelo administrador do sistema, mais opções disponíveis ao administrador para controle de tráfego, controle independente do tráfego da rede local/entre redes/interfaces devido a nova organização das etapas de roteamento de pacotes.

O iptables é um firewall em nível de pacotes e funciona baseado no endereço/porta de origem/destino do pacote, prioridade, etc. Ele funciona através da comparação de regras para saber se um pacote tem ou não permissão para passar. Em firewalls mais restritivos, o pacote é bloqueado e registrado para que o administrador do sistema tenha conhecimento sobre o que está acontecendo em seu sistema.

Ele também pode ser usado para modificar e monitorar o tráfego da rede, fazer NAT (masquerading, source nat, destination nat), redirecionamento de pacotes, marcação de pacotes, modificar a prioridade de pacotes que chegam/saem do seu sistema, contagem de bytes, dividir tráfego entre máquinas, criar proteções anti-spoofing, contra syn flood, DoS, etc. O tráfego vindo de máquinas desconhecidas da rede pode também ser bloqueado/registrado através do uso de simples regras. As possibilidades oferecidas pelos recursos de filtragem iptables como todas as ferramentas UNIX maduras dependem de sua imaginação, pois ele garante uma grande flexibilidade na manipulação das regras de acesso ao sistema, precisando apenas conhecer quais interfaces o sistema possui, o que deseja bloquear, o que tem acesso garantido, quais serviços devem estar acessíveis para cada rede, e iniciar a construção de seu firewall. O iptables ainda tem a vantagem de ser modularizável, funções podem ser adicionadas ao firewall ampliando as possibilidades oferecidas.

Um firewall não funciona de forma automática (instalando e esperar que ele faça as coisas por você), é necessário pelo menos conhecimentos básicos de rede tcp/ip, roteamento e portas para criar as regras que farão a segurança de seu sistema. A segurança do sistema depende do controle das regras que serão criadas por você, as falhas humanas são garantia de mais de 95% de sucesso nas invasões.

Enfim o iptables é um firewall que agradará tanto a pessoas que desejam uma segurança básica em seu sistema, quando administradores de grandes redes que querem ter um controle minucioso sobre o tráfego que passam entre suas interfaces de rede (controlando tudo o que pode passar de uma rede a outra), controlar o uso de tráfego, monitoração, etc.
Fonte: guiafoca.org

O Linux utiliza um recurso independente em termos de kernel para controlar e monitorar todo o tipo de fluxo de dados dentro de sua estrutura operacional. Mas não o faz sozinho, pois sua função deve ser a de trabalhar ao lado de processos e tarefas tão somente.
Para que o kernel pudesse então controlar seu próprio fluxo interno lhe fora agregada uma ferramenta batizada de netfilter.

Criado por Marc Boucher, James Morris, Harald Welte e Rusty Russell, o netfilter é m conjunto de situações de fluxo de dados agregadas inicialmente ao kernel do Linux e dividido em tabelas.

Sob uma ótica mais pratica podemos ver o netfilter como um grande bando de dados que contem em sua estrutura 3 tabelas padrões: Filter, Nat e Mangle. Cada uma destas tabelas contem regras direcionadas a seus objetivos básicos. A tabela filter por exemplo guarda todas as regras aplicadas a um firewall filtro de pacotes, a tabela Nat das regras direcionadas a um Firewall Nat e a Mangle a funções mais complexas de tratamento de pacotes como o TOS.

Todas as tabelas possuem situações de fluxo (entrada, saída, redirecionamento, etc.) que lhes proporcionam a realização de seus objetivos.

  • Tabela Filter

 É a tabela padrão do Netfilter e trata das situações implementadas por um Firewall filtro de pacotes. Estas situações são:

INPUT
Tudo o que entra no host.

FORWARD
Tudo o que chega ao host mas deve ser redirecionado a um host secundário ou outra interface de rede.

OUTPUT
Tudo o que sai do host.

  • Tabela NAT

 Esta tabela implementa funções de NAT (Networ Address Translation) ao host Firewall. O Nat por sua vez, possui diversas utilidades, conforme abordado anteriormente. Suas situações são:

PREROUTING
Utilizada quando há necessidade de se fazer alterações em pacotes antes mesmo que sejam roteados.

OUTPUT
Trata os pacotes emitidos pelo host Firewall.

POSTROUTING
Utilizado quando há necessidade de se fazer alterações em pacotes após o tratamento de roteamento.

  • Tabela Mangle

 Implementa alterações especiais em pacotes em um nível mais complexo. A tabela Mangle é capaz por exemplo de alterar a prioridade de entrada e saída de um pacote baseado no tipo de serviço (TOS) o qual o pacote se destinava, Suas situações são:

PREROUTING
Modifica pacotes dando-lhes em tratamento especial antes que os mesmos sejam roteados.

OUTPUT
Altera pacotes de forma especial gerados localmente antes que os mesmos sejam roteados.

AS prioridades são:

Espera mínima                                 16 ou 0x10
Maximo processamento                     8 ou 0x08
Máxima confiança                              4 ou 0x04
Custo mínimo                                    2 ou 0x02
Prioridade normal                              0 ou 0x00

Parâmetros

-A = Adiciona uma nova entrada ao fim da lista de regras.

-D = Apaga um regra especificada da lista.

-L = Lista as regras existentes na lista.

-P = Altera a política padrão das chains.

-F = Remove todas as entradas adicionadas na lista.

-I = Insere uma nova regra ao inicio da lista de regras.

-R = Substitui uma regra já adicionada.

-N = Cria uma nova chain a tabela especificada.

-E = Renomeia uma chain criada anteriormente.

-X = Apaga uma chain.

-p =Especifica o protocolo aplicado a regra, pode ser qualquer valor numérico especificado no arquivo /etc/protocol ou o próprio nome do protocolo (tcp, udp, icmp, etc...).

-i = Especifica a interface de entrada a ser utilizada.

-o = Especifica a interface de saída a ser utilizada.

-s = Especifica a origem (source) do pacote ao qual a regra deve ser aplicada.

-d = Especifica o destino do pacote (destination) ao qual a regra deve ser aplicada.

! = Significa exclusão e é utilizada quando se deseja aplicar uma exceção a uma regra.

-j = Define o alvo (target) do pacote caso o mesmo se encaixe a uma regra.

--sport = Porta de origem.

--dport = Porta de destino.

ACCEPT = Aceita a passagem do pacote.

DROP = Descarta o pacote.

REJECT = Rejeita o pacote.

LOG = Cria uma entrada de log no arquivo /var/log/messages

RETURN = Retorna o processamento do chain anterior sem processar o resto do chain atual.

QUEUE = Encarrega um pograma em nível de usuário de administrar o processamento de fluxo atribuído ao mesmo.

SNAT = Altera a origem das maquinas clientes antes dos pacotes serem roteados.

DNAT = Altera o destino das maquinas clientes.

REDIRECT = Realiza o redirecionamento de portas.

TOS = Prioriza a entrada e saída de pacotes baseados em seu tipo de serviço.


Exemplos

Lista as regras na lista da tabela Filter.
# iptables -L

Lista as regras na lista da tabela Nat.
# iptables -t nat -L

Lista as regras na lista da tabela Mangle.
# iptables -t mangle -L

Define a política padrão DROP da da chain INPUT.
# iptables -P INPUT DROP

Define a política padrão DROP da da chain OUTPUT.
# iptables -P OUTPUT DROP

Define a política padrão DROP da da chain FORWARD.
# iptables -P FORWARD  DROP

Libera o trafego na interface de loopback
# iptables -A INPUT -i lo -j ACCEPT

Proibe a rede 192.168.0.0/24 acessar o dominio sex.com.br
# iptables -A FORWARD -s 192.168.0.0/24 -d www.sex.com.br -j DROP

Rejeita pacotes vindos do ip 200.200.100.44 para a rede 192.168.0.0/24.
# iptables -A FORWARD -s 200.200.100.44 -d 192.168.0.0/24 -j REJECT

Redireciona os pacotes com destino a porta 3389 do protocolo tcp para o ip 10.0.0.5
# iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to 10.0.0.5:3389

Aceita a saida de pacotes de todas as interfaces exceto da eth3.
# iptables -A OUTPUT -i ! eth3 -j ACCEPT

Deleta a regra inserida anteriormente
# iptables -D OUTPUT -i ! eth3 -j ACCEPT

Aceita pacotes tcp com porta origem entre a 1024 até a 65535 com destino ao ip 10.0.10.5 na porta 80.
# iptables -A FORWARD -p tcp --sport 1024:65535 -d 10.0.10.5 --dport 80 -j ACCEPT

Configura o proxy transparente caso o proxy esteja rodando no mesmo host do firewall, a regra redireciona todo pacote com destino a porta 80 para a porta 3128.
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Apaga todas as regras na chain INPUT
# iptables -F INPUT

Insere a regra no topo da lista, bloqueia o pacote que sair pela interface eth0 com destino a porta 3777.
# iptables -I OUTPUT -o eth0 --dport 3777 -j DROP

Cria a chain INTERNET na tabela filter
# iptables -t filter -N INTERNET

Renomeia a chain INTERNET para NET
# iptables -E INTERNET NET

Apaga a chain NET
# iptables -X NET

Loga acessos na porta 22
# iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "ACESSO A PORTA 22"

Define espera minima para pacotes que entrarem no host com porta origem 22
# iptables -t mangle -A PREROUTING -p tcp --sport 22 -j TOS --set-tos 16

Pessoal é isso ai espero que a galera que não tinha muita intimidade com o iptables possa ter estreitado essa distancia, fiquem a vontade para postar dúvidas, elas serão respondidas o mais rápido possível. Até a próxima.

Fonte: Livro Dominando Linux Firewall Iptables

Nenhum comentário:

Postar um comentário