Iptables   Completo   Oliver
Upcoming SlideShare
Loading in...5
×
 

Iptables Completo Oliver

on

  • 10,255 views

Iptables Linux

Iptables Linux

Statistics

Views

Total Views
10,255
Views on SlideShare
10,216
Embed Views
39

Actions

Likes
5
Downloads
652
Comments
1

2 Embeds 39

http://www.slideshare.net 38
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Iptables   Completo   Oliver Iptables Completo Oliver Presentation Transcript

  • Iptables Firewalls no Linux por oliver menezes
  • Firewall - Iptables
    • O iptables é um código de firewall das versões 2.4 do kernel, que substituiu o ipchains (presente nas séries 2.2 do kernel). Ele foi incluído no kernel da série 2.4 em meados de Junho/Julho de 1999.
  • Componentes
    • 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.
  • Hardware Necessário
    • É necessário que o seu kernel tenha sido compilado com suporte ao iptables. O requerimento mínimo de memória necessária para a execução do iptables é o mesmo do kernel 2.4 (4MB). Dependendo do tráfego que será manipulado pela(s) interface(s) do firewall ele poderá ser executado com folga em uma máquina 386 SX com 4MB de RAM.
    • Como as configurações residem no kernel não é necessário espaço extra em disco rígido para a execução deste utilitário.
  • Registro
    • Todo tráfego que for registrado pelo iptables é registrado por padrão no arquivo /var/log/kern.log.
  • Instalação
    • #apt-get install iptables
    • O pacote iptables contém o utilitário iptables (e ip6tables para redes ipv6) necessários para inserir suas regras no kernel. Se você não sabe o que é ipv6, não precisará se preocupar com o utilitário ip6tables por enquanto.
  • Tipos de firewalls
    • Existem basicamente dois tipos de firewalls:
    • nível de aplicação - Este tipo de firewall analisam o conteúdo do pacote para tomar suas decisões de filtragem. Permitem um controle relacionado com o conteúdo do tráfego. Servidores proxy, como o squid, são um exemplo deste tipo de firewall.
    • nível de pacotes - Este tipo de firewall toma as decisões baseadas nos parâmetros do pacote, como porta/endereço de origem/destino, estado da conexão, e outros parâmetros do pacote. O firewall então pode negar o pacote (DROP) ou deixar o pacote passar (ACCEPT). O iptables é um excelente firewall que se encaixa nesta categoria.
  • Como começar ?
    • Antes de iniciar a construção do firewall é bom pensar nos seguintes pontos:
    • Quais serviços precisa proteger.
    • Que máquinas terão acesso livre e quais serão restritas.
    • Que serviços deverão ter prioridade no processamento.
    • Que máquinas/redes NUNCA deverão ter acesso a certas/todas máquinas.
    • O que tem permissão de passar de uma rede para outra (em máquinas que atuam como roteadores/gateways de uma rede interna).
  • O que são regras?
    • As regras são como comandos passados ao iptables para que ele realize uma determinada ação (como bloquear ou deixar passar um pacote) de acordo com o endereço/porta de origem/destino, interface de origem/destino, etc. As regras são armazenadas dentro dos chains e processadas na ordem que são inseridas.
    • As regras são armazenadas no kernel, o que significa que quando o computador for reiniciado tudo o que fez será perdido. Por este motivo elas deverão ser gravadas em um arquivo para serem carregadas a cada inicialização.
    • Um exemplo de regra:
    • #iptables -A INPUT -s 123.123.123.1 -j DROP
  • O que são chains?
    • Os Chains são locais onde as regras do firewall definidas pelo usuário são armazenadas para operação do firewall. Existem dois tipos de chains: os embutidos (como os chains INPUT , OUTPUT e FORWARD ) e os criados pelo usuário. Os nomes dos chains embutidos devem ser especificados sempre em maiúsculas (note que os nomes dos chains são case-sensitive, ou seja, o chain input é completamente diferente de INPUT
  • O que são tabelas?
    • Tabelas são os locais usados para armazenar os chains e conjunto de regras com uma determinada característica em comum. As tabelas podem ser referenciadas com a opção -t tabela e existem 3 tabelas disponíveis no iptables:
      • Filter;
      • NAT;
      • Mangle.
  • O que são tabelas?
    • filter - Esta é a tabela padrão, contém 3 chains padrões:
      • INPUT - Consultado para dados que chegam a máquina
      • OUTPUT - Consultado para dados que saem da máquina
      • FORWARD - Consultado para dados que são redirecionados para outra interface de rede ou outra máquina.
  • O que são tabelas?
    • nat - Usada para dados que gera outra conexão (masquerading, source nat, destination nat, port forwarding, proxy transparente são alguns exemplos). Possui 3 chains padrões:
      • PREROUTING - Consultado quando os pacotes precisam ser modificados logo que chegam. É o chain ideal para realização de DNAT e redirecionamento de portas.
      • OUTPUT - Consultado quando os pacotes gerados localmente precisam ser modificados antes de serem roteados. Este chain somente é consultado para conexões que se originam de IPs de interfaces locais.
      • POSTROUTING - Consultado quando os pacotes precisam ser modificados após o tratamento de roteamento. É o chain ideal para realização de SNAT e IP Masquerading.
  • O que são tabelas?
    • mangle - Utilizada para alterações especiais de pacotes (como modificar o tipo de serviço (TOS). Possui 2 chains padrões:
      • INPUT - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain INPUT da tabela filter .
      • FORWARD - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain FORWARD da tabela filter .
      • PREROUTING - Consultado quando os pacotes precisam ser modificados antes de ser enviados para o chain PREROUTING da tabela nat .
      • POSTROUTING - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain POSTROUTING da tabela nat .
      • OUTPUT - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain OUTPUT da tabela nat .
  • Adicionando regras - A
    • Agora vamos incluir uma regra no chain INPUT ( -A INPUT ) que bloqueie ( -j DROP ) qualquer acesso indo ao endereço 127.0.0.1 ( -d 127.0.0.1 ):
    • iptables -t filter -A INPUT -d 127.0.0.1 -j DROP
    • Agora verificamos um novo ping.
    • Desta vez a máquina 127.0.0.1 não respondeu, pois todos os pacotes com o destino 127.0.0.1 (-d 127.0.0.1) são rejeitados (-j DROP). A opção -A é usada para adicionar novas regras no final do chain. Além de -j DROP que serve para rejeitar os pacotes, podemos também usar -j ACCEPT para aceitar pacotes. A opção -j é chamada de alvo da regra ou somente alvo pois define o destino do pacote que atravessa a regra.
    • OBS: - A tabela filter será usada como padrão caso nenhuma tabela seja especificada através da opção -t.
  • Listando regras - L
    • A seguinte sintaxe é usada para listar as regras criadas:
    • iptables [ -t tabela ] -L [ chain ] [ opções ]
    • Onde:
    • tabela
      • É uma das tabelas usadas pelo iptables. Se a tabela não for especificada, a tabela filter será usada como padrão..
    • chain
      • Um dos chains disponíveis na tabela acima ou criado pelo usuário. Caso o chain não seja especificado, todos os chains da tabela serão mostrados.
    • opções
      • -v - Exibe mais detalhes sobre as regras criadas nos chains.
      • -n - Exibe endereços de máquinas/portas como números ao invés de tentar a resolução DNS e consulta ao /etc/services.
      • -x - Exibe números exatos ao invés de números redondos. Também mostra a faixa de portas de uma regra de firewall.
      • --line-numbers - Exibe o número da posição da regra na primeira coluna da listagem.
  • Listando regras - L
    • Para listar a regra criada anteriormente usamos o comando:
    • #iptables -t filter -L INPUT
  • Limpando as regras de um chain - F
    • Para limpar todas as regras de um chain, use a seguinte sintaxe:
    • iptables [ -t tabela ] [ -F chain ]
    • Onde:
    • tabela
      • Tabela que contém o chain que desejamos zerar.
    • chain
      • Chain que desejamos limpar. Caso um chain não seja especificado, todos os chains da tabela serão limpos.
    • #iptables -t filter -F INPUT
  • Especificando um endereço de origem/destino
    • As opções -s (ou --src/--source)e -d (ou --dst/--destination) servem para especificar endereços de origem e destino respectivamente. É permitido usar um endereço IP completo (como 192.168.1.1), um hostname (debian), um endereço fqdn (www.debian.org) ou um par rede/máscara (como 200.200.200.0/255.255.255.0 ou 200.200.200.0/24).
    • Caso um endereço/máscara não sejam especificados, é assumido 0/0 como padrão (todos as máquinas de todas as redes).
    • Bloqueia o tráfego vindo da rede 200.200.200.*:
    • #iptables -A INPUT -s 200.200.200.0/24 -j DROP
  • Especificando a interface de origem/destino
    • As opções -i (ou --in-interface) e -o (ou --out-interface) especificam as interfaces de origem/destino de pacotes.
    • Por exemplo para bloquear o acesso do tráfego de qualquer máquina com o endereço 200.123.123.10 vinda da interface ppp0 (uma placa de fax-modem):
    • #iptables -A INPUT -s 200.123.123.10 -i ppp0 -j DROP
    • A mesma regra pode ser especificada como :
    • #iptables -A INPUT -s 200.123.123.10 -i ppp+ -j DROP O sinal de "+" funciona como um coringa, assim a regra terá efeito em qualquer interface. Para bloquear qualquer tráfego local para a Internet:
    • #iptables -A OUTPUT -o ppp+ -j DROP
    • Para bloquear a passagem de tráfego da interface ppp0 para a interface eth1 (de uma de nossas redes internas):
    • #iptables -A FORWARD -i ppp0 -o eth1 -j DROP
  • Especificando um protocolo
    • A opção -p (ou --protocol) é usada para especificar protocolos no iptables. Podem ser especificados os protocolos tcp , udp e icmp . Por exemplo, para rejeitar todos os pacotes UDP vindos de 200.200.200.200:
    • #iptables -A INPUT -s 200.200.200.200 -p udp -j DROP
  • Especificando portas de origem/destino
    • As portas de origem/destino devem ser especificadas após o protocolo e podem ser precedidas por uma das seguintes opções:
    • --source-port ou --sport - Especifica uma porta ou faixa de portas de origem.
    • --destination-port ou --dport - Especifica uma porta ou faixa de portas de destino.
    • Uma faixa de portas pode ser especificada através de PortaOrigem:PortaDestino:
    • Bloqueia qualquer pacote indo para 200.200.200.200 na faixa de # portas 0 a 1023:
    • #iptables -A OUTPUT -d 200.200.200.200 -p tcp --dport :1023 -j DROP
  • Salvando e Restaurando regras
    • As regras que você está trabalhosamente criando e testando manualmente enquanto manipula o iptables podem ser salvas de 2 formas; uma delas é escrevendo um shell script que tenha todos os comandos, um por linha. Isto é recomendado quando tem um firewall grande e que exige uma boa padronização de regras, bem como sua leitura, comentários.
    • A outra forma é usando as ferramentas iptables-save e iptables-restore. O iptables-save deve ser usado sempre que modificar regras no firewall iptables da seguinte forma:
    • #iptables-save >/dir/iptables-regras.
    • Para restaurar as regras salvas, utilize o comando:
    • #iptables-restore </dir/iptables-regras
  • Fazendo IP masquerading (Compartilhar Internet)
    • #iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
    • #echo &quot;1&quot; >/proc/sys/net/ipv4/ip_forward
    • A configuração do servidor Linux está completa, agora os clientes da rede precisarão ser configurados para usar o endereço IP do servidor Linux como gateway. É recomendável instalar um servidor proxy e DNS na máquina Linux para acelerar o desempenho das requisições/resolução de nomes das máquinas em rede.
  • Fazendo DNAT
    • DNAT (Destination nat - nat no endereço de destino) consiste em modificar o endereço de destino das máquinas clientes. O destination nat é muito usado para fazer redirecionamento de pacotes, proxyes transparentes e balanceamento de carga.
    • Modifica o endereço IP destino dos pacotes de 200.200.217.40 vindo da interface eth0 para 192.168.1.2.
    • #iptables -t nat -A PREROUTING -s 200.200.217.40 -i eth0 -j DNAT --to 192.168.1.2
    • OBS: Não se esqueça de conferir se o ip_forward está ajustado para 1:
    • #echo &quot;1&quot; >/proc/sys/net/ipv4/ip_forward.
  • Um exemplo de firewall simples
      • O exemplo a seguir toma com base a situação que o servidor linux está ligado à rede externa pela interface eth0, e a rede interna por eth1.
  • Um exemplo de firewall simples
    • #!/bin/bash
    • #Firewall e compartilhamento de internet implementado por
    • #oliver_menezes@yahoo.com.br
    • #Esse script assume que o módulo iptables já esteja carregado por padrão
    • #Limpa as regras anteriores
    • ##Qdo o argumento -t é omitido regra é aplicada na tabela filter
    • iptables -F
  • Um exemplo de firewall simples
    • #Limpa as regras da tabela nat
    • iptables -t nat -F
    • #Compartilhamento de internet
    • iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    • echo 1 > /proc/sys/net/ipv4/ip_forward
  • Um exemplo de firewall simples
    • #Abre algumas portas
    • iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
    • iptables -A INPUT -p tcp --destination-port 3128 -j ACCEPT
    • iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
    • iptables -A INPUT -p tcp --destination-port 1433 -j ACCEPT
    • iptables -A INPUT -p tcp --destination-port 3389 -j ACCEPT
    • #Liberação de conexão para computadores da rede interna
    • iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
    • # Fecha o resto
    • iptables -A INPUT -p tcp --syn -j DROP
  • Um exemplo de firewall simples
    • #Redirecionamento do trafego da porta 80 para o Squid
    • iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
    • #Redirecionamento do tráfego TCP e UDP que provém da internet para uma máquina
    • #na rede interna com ip 192.168.1.254
    • iptables -t nat -A PREROUTING -p tcp --dport 1433 -i eth0 -j DNAT --to 192.168.1.254
    • iptables -t nat -A PREROUTING -p udp --dport 1433 -i eth0 -j DNAT --to 192.168.1.254
  • Referências
    • http://www.guiadohardware.net/artigos/firewall-iptables/
    • http://www.conectiva.com.br/cpub/pt/incConectiva/suporte/pr/servidores.firewall.iptables.html
    • http://focalinux.cipsga.org.br/gol.html