Iptables Completo Oliver

  • 7,918 views
Uploaded on

Iptables Linux

Iptables Linux

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
7,918
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
678
Comments
1
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Iptables Firewalls no Linux por oliver menezes
  • 2. 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.
  • 3. 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.
  • 4. 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.
  • 5. Registro
    • Todo tráfego que for registrado pelo iptables é registrado por padrão no arquivo /var/log/kern.log.
  • 6. 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.
  • 7. 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.
  • 8. 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).
  • 9. 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
  • 10. 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
  • 11. 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.
  • 12. 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.
  • 13. 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.
  • 14. 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 .
  • 15. 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.
  • 16. 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.
  • 17. Listando regras - L
    • Para listar a regra criada anteriormente usamos o comando:
    • #iptables -t filter -L INPUT
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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.
  • 25. 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.
  • 26. 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.
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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