anúncios

quinta-feira, 10 de maio de 2012

Entendendo o funcionamento de um firewall e regras IPtables

Introdução

O Firewall tem o objetivo proteger o servidor e a rede local contra acessos indesejados, tráfego indesejado, proteger serviços que estejam rodando no servidor e bloquear a passagem de coisas que você não deseja receber (como conexões vindas da Internet para sua rede local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais). A implementação de um bom firewall dependerá da experiência, conhecimentos de redes (protocolos, roteamento, interfaces, endereçamento, masquerade, etc), da rede local, e sistema em geral do Administrador de redes, a segurança de sua rede e seus dados dependem da escolha do profissional correto, que entenda a fundo o TCP/IP, roteamento, protocolos, serviços e outros assuntos ligados a rede. No kernel do Linux 2.4, foi introduzido o programa IPtables (também chamado de Netfilter) que substitui o ipchains dos kernels da série 2.2. Este novo programa tem como vantagem ser muito estável (assim como o ipchains e ipfwadm), confiável, permite 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 servidor. 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 servidor, 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.

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 servidor. A segurança do servidor 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 sua rede, quanto administradores de sistemas/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.


Características do Netfilter/Iptables
Segue abaixo algumas características do Firewall Netfilter/IPtables
  • Especificação de portas/endereço de origem/destino
  • Suporte a protocolos TCP/UDP/ICMP (incluindo tipos de mensagens icmp)
  • Suporte a interfaces de origem/destino de pacotes
  • Manipula serviços de proxy na rede
  • Tratamento de tráfego dividido em chains para melhor controle do tráfego que entra/sai da máquina e tráfego redirecionado.
  • Permite um número ilimitado de regras por chain
  • Muito rápido, estável e seguro
  • Possui mecanismos internos para rejeitar automaticamente pacotes duvidosos ou mal formados.
  • Suporte a módulos externos para expansão das funcionalidades padrões oferecidas pelo código de firewall
  • Suporte completo a roteamento de pacotes, tratadas em uma área diferente de tráfegos padrões.
  • Suporte a especificação de tipo de serviço para priorizar o tráfego de determinados tipos de pacotes.
  • Permite especificar exceções para as regras ou parte das regras
  • Suporte a detecção de fragmentos
  • Permite enviar alertas personalizados ao syslog sobre o tráfego aceito/bloqueado.
  • Redirecionamento de portas
  • Masquerading
  • Suporte a SNAT (modificação do endereço de origem das máquinas para um único IP ou faixa de IP's).
  • Suporte a DNAT (modificação do endereço de destino das máquinas para um único IP ou fixa de IP's)
  • Contagem de pacotes que atravessaram uma interface/regra
  • Limitação de passagem de pacotes/conferência de regra (muito útil para criar proteções contra, syn flood, ping flood, DoS, etc).

Ficha técnica
Pacote: IPtables
  • iptables - Sistema de controle principal para protocolos ipv4
  • ip6tables - Sistema de controle principal para protocolos ipv6
  • iptables-save - Salva as regras atuais em um arquivo especificado como argumento. Este utilitário pode ser dispensado por um shell script contendo as regras executado na inicialização da máquina.
  • iptables-restore - Restaura regras salvas pelo utilitário iptables-save.

Entendendo as regras do IPtables
Agora iremos entender a estrutura das regras iptables:
Tabela FILTER
É a tabela responsável pelos filtros dos pacotes. Ela se divide em 3 chains padrão.
INPUT
A chain INPUT é responsável por filtrar todo o tráfego que entra no firewall.
FORWARD
A chain FORWARD é responsável por filtrar todo o tráfego que passará pelo firewall, ou seja, todos os pacotes onde o NAT será aplicado.
OUTPUT
A chain OUTPUT é responsável por filtrar todo o tráfego que sairá pelo firewall.
Tabela NAT
É a tabela responsável pelo redirecionamento de pacotes. Ela também se divide em 3 chains.
PREROUTING
A chain PREROUTING é utilizada para alterar pacotes antes que os mesmos sejam roteados.
POSTROUTING A chain POSTROUTING é utilizada pala alterar pacotes que já sofreram roteamento.
Tabela MANGLE
É a tabela responsável pela alteração de prioridade na entrada e saída de pacotes, baseando-se no tipo de serviço (TOS). É dividida em 2 chains.
Comandos e ações
Comandos
-I
Insere uma regra no início da lista.
-A
Adiciona uma regra no fim da lista.
-D
Apaga uma regra da lista.
-L
Lista as regras da lista.
-P
Altera a política padrão das Chains.
-F
Remove todas as regras da lista.
-R
Substitui uma regra da lista por outra.
-N
Cria uma nova chain na tabela especificada.
-E
Renomeia uma chain que foi criada com o comando -N.
-X
Apaga uma chain criada com o comando -N.
Ações
-p
Especifica o protocolo ao qual a regra se aplicará. Também podemos utilizar o valor numérico que referencia o protocolo em /etc/protocol. Ex: -p gre ; -p 47
-i
Especifica a interface de entrada utilizada pela regra. Pode ser utilizada apenas com as chains INPUT e FORWARD. EX: -i eth0 ou -i eth+ para especificar todas as entradas.
-o
Especifica a interface de saída utilizada pela regra. Pode ser utilizada apenas com as chains FORWARD e OUTPUT. EX: -o eth0
-s
Especifica o endereço ou a rede de origem utilizada pela regra. Se não especificarmos a máscara de rede, o iptables utiliza a máscara padrão da classe C 255.255.255.0. Também podemos utilizar nomes DNS. Ex: -s 192.168.1.2; -s 192.168.1.0/255.255.255.0 domínio: exemplo.com.br
-d
Especifica o endereço ou a rede de destino utilizado pela regra. Se utiliza da mesma maneira que a ação -s.
!
Utilizado para especificar exceções. Ex: -s ! 192.168.1.6 # A regra se aplicaria a todos os ips que tivessem origem diferente de 192.168.1.6
-j
Utilizado para aplicar um alvo a regra, os mesmos podem ser ACCEPT, DROP, REJECT e LOG. Ex: -j ACCEPT
--sport
Especifica a porta de origem utilizada. Só podemos aplicar a ação quando estivermos tratando dos protocolos tcp e udp. Ex: -p tcp --sport 25
--dport
Especifica a porta de destino utilizada. Funciona da mesma forma que a ação --sport. Ex: -p tcp --dport 25.
Alvos e módulos
Alvos
Quando temos um pacote que combinou com todas as opções da regra, necessitamos especificar um destino para o mesmo, como vimos anteriormente podemos especificar os seguintes alvos / destinos:
ACCEPT
Aceita a entrada ou passagem do pacote.
DROP
Descarta o pacote.

REJECT
Descarta o pacote, porém diferente de DROP, ele retorna uma mensagem ao emissor informando o que houve com o pacote.
LOG
Gera um log no sistema.
RETURN
Retorna o processamento da chain anterior.
QUEUE
Encarrega um programa de administrar o fluxo atribuído ao mesmo.
SNAT
Altera o endereço de origem do pacote.
DNAT
Altera o endereço de destino do pacote.
REDIRECT
Redireciona a porta do pacote juntamente com a opção --to-port.
TOS
Prioriza a entrada e saída de pacotes baseado em seu tipo de serviço.
Podemos especificar em TOS os seguintes valores:
16 ou 0x10 Espera mínima
8 ou 0x08 Máximo processamento
4 ou 0x04 Máxima confiança
2 ou 0x02 Custo mínimo
0 ou 0x00 Prioridade normal
Módulos
A utilização de módulos junto com o iptables é definida através da opção -m. Podemos utilizar os seguintes módulos:
limit Impõe um limite de vezes que a regra poderá ser executada.
state Utiliza o estado da conexão, que pode ser NEW, ESTABLISHED, RELATED, INVALID.
mac Permite a utilização do endereço mac nas regras.
multiport Permite a utilização de até 15 portas em uma única regra em conjunto com o --dport. string Verifica o conteúdo do pacote para aplicar a regra.
owner Verifica o usuário que criou o pacote.

Considerações finais
Para finalizar, temos que esclarecer algumas coisas sobre firewall do sistema GNU/Linux, que na realidade se chama Netfilter, e o IPtables são comandos interpretados pelo Netfilter no Kernel, por default já vem habilitado na maioria das distros.
Script Firewall com regras IPtables
rc.firewall.sh
Feito!

6 comentários:

  1. Meu amigo, seu conteúdo sobre Firewall do Linux estar muito bom, mas uma coisa que você confundiu e creio que todo mundo também confunde; é simplesmente afirmar que o IPTABLES é o Firewall propriamente dito. O Firewall em si chama-se Netfilter que já vem compilado internamente no kernel do sistema para ter um bom tratamento das regras em geral, em suma o iptables, nada mais é o comando que ativa a regras em determinadas tabela do Netfilter, então eis ai a diferença.

    ResponderExcluir
  2. Olá, sabe como bloquear a praga do ULTRASURF?

    ResponderExcluir
    Respostas
    1. http://www.vivaolinux.com.br/artigo/UltraSurf-Bloqueio-definitivo/

      Excluir
  3. Para bloquear o Ultrasulf as regras firewall deve iniciar com as chains INPUT, OUTPUT e FORWARD em DROP, como o Ultrasurf usa porta 443,80 por default, porém o usuário pode alterar a porta, por isso digo que deve ter politica DROP no firewall, iniciando assim apenas os serviços de redes em uso com suas respectivas portas.
    Portas 80,443 deve forçar passar tráfego pelo Proxy Squid em modo autenticado.
    Veja como configurar proxy autenticado no Squid http://mundodacomputacaointegral.blogspot.com.br/2011/12/configurando-servidor-proxy-autenticado.html

    ResponderExcluir
  4. neste script para Download como libero acesso ao outlook e protheus 11?

    muito boa essa materia

    obg Adilson

    ResponderExcluir
    Respostas
    1. Para liberar acesso ao outlook, na chain FORWARD deve adicionar liberação nas portas 25(SMTP), 587(nova porta SMTP), 110(POP3), 143(IMAP), 995(POP3 SSL/TLS), 993(IMAP SSL/TLS), 465(SSL/TLS).
      Quanto liberação do Protheus11, verifique os arquivos appserver.ini, smartclient.ini, que estão as portas utilizadas do Protheus11 e libere essa porta na chain FORWARD.
      Também deve ser liberadas as portas do banco de dados utilizados no Protheus11.

      Excluir