Iptables Completo Oliver

8,794 views
8,624 views

Published on

Iptables Linux

Published in: Technology
1 Comment
8 Likes
Statistics
Notes
No Downloads
Views
Total views
8,794
On SlideShare
0
From Embeds
0
Number of Embeds
49
Actions
Shares
0
Downloads
730
Comments
1
Likes
8
Embeds 0
No embeds

No notes for slide

Iptables Completo Oliver

  1. 1. Iptables Firewalls no Linux por oliver menezes
  2. 2. Firewall - Iptables <ul><li>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. </li></ul>
  3. 3. Componentes <ul><li>Pacote: iptables </li></ul><ul><li>iptables - Sistema de controle principal para protocolos ipv4 </li></ul><ul><li>ip6tables - Sistema de controle principal para protocolos ipv6 </li></ul><ul><li>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. </li></ul><ul><li>iptables-restore - Restaura regras salvas pelo utilitário iptables-save. </li></ul>
  4. 4. Hardware Necessário <ul><li>É 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. </li></ul><ul><li>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. </li></ul>
  5. 5. Registro <ul><li>Todo tráfego que for registrado pelo iptables é registrado por padrão no arquivo /var/log/kern.log. </li></ul>
  6. 6. Instalação <ul><li>#apt-get install iptables </li></ul><ul><li>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. </li></ul>
  7. 7. Tipos de firewalls <ul><li>Existem basicamente dois tipos de firewalls: </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul>
  8. 8. Como começar ? <ul><li>Antes de iniciar a construção do firewall é bom pensar nos seguintes pontos: </li></ul><ul><li>Quais serviços precisa proteger. </li></ul><ul><li>Que máquinas terão acesso livre e quais serão restritas. </li></ul><ul><li>Que serviços deverão ter prioridade no processamento. </li></ul><ul><li>Que máquinas/redes NUNCA deverão ter acesso a certas/todas máquinas. </li></ul><ul><li>O que tem permissão de passar de uma rede para outra (em máquinas que atuam como roteadores/gateways de uma rede interna). </li></ul>
  9. 9. O que são regras? <ul><li>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. </li></ul><ul><li>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. </li></ul><ul><li>Um exemplo de regra: </li></ul><ul><li>#iptables -A INPUT -s 123.123.123.1 -j DROP </li></ul>
  10. 10. O que são chains? <ul><li>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 </li></ul>
  11. 11. O que são tabelas? <ul><li>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: </li></ul><ul><ul><li>Filter; </li></ul></ul><ul><ul><li>NAT; </li></ul></ul><ul><ul><li>Mangle. </li></ul></ul>
  12. 12. O que são tabelas? <ul><li>filter - Esta é a tabela padrão, contém 3 chains padrões: </li></ul><ul><ul><li>INPUT - Consultado para dados que chegam a máquina </li></ul></ul><ul><ul><li>OUTPUT - Consultado para dados que saem da máquina </li></ul></ul><ul><ul><li>FORWARD - Consultado para dados que são redirecionados para outra interface de rede ou outra máquina. </li></ul></ul>
  13. 13. O que são tabelas? <ul><li>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: </li></ul><ul><ul><li>PREROUTING - Consultado quando os pacotes precisam ser modificados logo que chegam. É o chain ideal para realização de DNAT e redirecionamento de portas. </li></ul></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>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. </li></ul></ul>
  14. 14. O que são tabelas? <ul><li>mangle - Utilizada para alterações especiais de pacotes (como modificar o tipo de serviço (TOS). Possui 2 chains padrões: </li></ul><ul><ul><li>INPUT - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain INPUT da tabela filter . </li></ul></ul><ul><ul><li>FORWARD - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain FORWARD da tabela filter . </li></ul></ul><ul><ul><li>PREROUTING - Consultado quando os pacotes precisam ser modificados antes de ser enviados para o chain PREROUTING da tabela nat . </li></ul></ul><ul><ul><li>POSTROUTING - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain POSTROUTING da tabela nat . </li></ul></ul><ul><ul><li>OUTPUT - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain OUTPUT da tabela nat . </li></ul></ul>
  15. 15. Adicionando regras - A <ul><li>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 ): </li></ul><ul><li>iptables -t filter -A INPUT -d 127.0.0.1 -j DROP </li></ul><ul><li>Agora verificamos um novo ping. </li></ul><ul><li>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. </li></ul><ul><li>OBS: - A tabela filter será usada como padrão caso nenhuma tabela seja especificada através da opção -t. </li></ul>
  16. 16. Listando regras - L <ul><li>A seguinte sintaxe é usada para listar as regras criadas: </li></ul><ul><li>iptables [ -t tabela ] -L [ chain ] [ opções ] </li></ul><ul><li>Onde: </li></ul><ul><li>tabela </li></ul><ul><ul><li>É uma das tabelas usadas pelo iptables. Se a tabela não for especificada, a tabela filter será usada como padrão.. </li></ul></ul><ul><li>chain </li></ul><ul><ul><li>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. </li></ul></ul><ul><li>opções </li></ul><ul><ul><li>-v - Exibe mais detalhes sobre as regras criadas nos chains. </li></ul></ul><ul><ul><li>-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. </li></ul></ul><ul><ul><li>-x - Exibe números exatos ao invés de números redondos. Também mostra a faixa de portas de uma regra de firewall. </li></ul></ul><ul><ul><li>--line-numbers - Exibe o número da posição da regra na primeira coluna da listagem. </li></ul></ul>
  17. 17. Listando regras - L <ul><li>Para listar a regra criada anteriormente usamos o comando: </li></ul><ul><li>#iptables -t filter -L INPUT </li></ul>
  18. 18. Limpando as regras de um chain - F <ul><li>Para limpar todas as regras de um chain, use a seguinte sintaxe: </li></ul><ul><li>iptables [ -t tabela ] [ -F chain ] </li></ul><ul><li>Onde: </li></ul><ul><li>tabela </li></ul><ul><ul><li>Tabela que contém o chain que desejamos zerar. </li></ul></ul><ul><li>chain </li></ul><ul><ul><li>Chain que desejamos limpar. Caso um chain não seja especificado, todos os chains da tabela serão limpos. </li></ul></ul><ul><li>#iptables -t filter -F INPUT </li></ul>
  19. 19. Especificando um endereço de origem/destino <ul><li>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). </li></ul><ul><li>Caso um endereço/máscara não sejam especificados, é assumido 0/0 como padrão (todos as máquinas de todas as redes). </li></ul><ul><li>Bloqueia o tráfego vindo da rede 200.200.200.*: </li></ul><ul><li>#iptables -A INPUT -s 200.200.200.0/24 -j DROP </li></ul>
  20. 20. Especificando a interface de origem/destino <ul><li>As opções -i (ou --in-interface) e -o (ou --out-interface) especificam as interfaces de origem/destino de pacotes. </li></ul><ul><li>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): </li></ul><ul><li>#iptables -A INPUT -s 200.123.123.10 -i ppp0 -j DROP </li></ul><ul><li>A mesma regra pode ser especificada como : </li></ul><ul><li>#iptables -A INPUT -s 200.123.123.10 -i ppp+ -j DROP O sinal de &quot;+&quot; funciona como um coringa, assim a regra terá efeito em qualquer interface. Para bloquear qualquer tráfego local para a Internet: </li></ul><ul><li>#iptables -A OUTPUT -o ppp+ -j DROP </li></ul><ul><li>Para bloquear a passagem de tráfego da interface ppp0 para a interface eth1 (de uma de nossas redes internas): </li></ul><ul><li>#iptables -A FORWARD -i ppp0 -o eth1 -j DROP </li></ul>
  21. 21. Especificando um protocolo <ul><li>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: </li></ul><ul><li>#iptables -A INPUT -s 200.200.200.200 -p udp -j DROP </li></ul>
  22. 22. Especificando portas de origem/destino <ul><li>As portas de origem/destino devem ser especificadas após o protocolo e podem ser precedidas por uma das seguintes opções: </li></ul><ul><li>--source-port ou --sport - Especifica uma porta ou faixa de portas de origem. </li></ul><ul><li>--destination-port ou --dport - Especifica uma porta ou faixa de portas de destino. </li></ul><ul><li>Uma faixa de portas pode ser especificada através de PortaOrigem:PortaDestino: </li></ul><ul><li>Bloqueia qualquer pacote indo para 200.200.200.200 na faixa de # portas 0 a 1023: </li></ul><ul><li>#iptables -A OUTPUT -d 200.200.200.200 -p tcp --dport :1023 -j DROP </li></ul>
  23. 23. Salvando e Restaurando regras <ul><li>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. </li></ul><ul><li>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: </li></ul><ul><li>#iptables-save >/dir/iptables-regras. </li></ul><ul><li>Para restaurar as regras salvas, utilize o comando: </li></ul><ul><li>#iptables-restore </dir/iptables-regras </li></ul>
  24. 24. Fazendo IP masquerading (Compartilhar Internet) <ul><li>#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE </li></ul><ul><li>#echo &quot;1&quot; >/proc/sys/net/ipv4/ip_forward </li></ul><ul><li>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. </li></ul>
  25. 25. Fazendo DNAT <ul><li>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. </li></ul><ul><li>Modifica o endereço IP destino dos pacotes de 200.200.217.40 vindo da interface eth0 para 192.168.1.2. </li></ul><ul><li>#iptables -t nat -A PREROUTING -s 200.200.217.40 -i eth0 -j DNAT --to 192.168.1.2 </li></ul><ul><li>OBS: Não se esqueça de conferir se o ip_forward está ajustado para 1: </li></ul><ul><li>#echo &quot;1&quot; >/proc/sys/net/ipv4/ip_forward. </li></ul>
  26. 26. Um exemplo de firewall simples <ul><ul><li>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. </li></ul></ul>
  27. 27. Um exemplo de firewall simples <ul><li>#!/bin/bash </li></ul><ul><li>#Firewall e compartilhamento de internet implementado por </li></ul><ul><li>#oliver_menezes@yahoo.com.br </li></ul><ul><li>#Esse script assume que o módulo iptables já esteja carregado por padrão </li></ul><ul><li>#Limpa as regras anteriores </li></ul><ul><li>##Qdo o argumento -t é omitido regra é aplicada na tabela filter </li></ul><ul><li>iptables -F </li></ul>
  28. 28. Um exemplo de firewall simples <ul><li>#Limpa as regras da tabela nat </li></ul><ul><li>iptables -t nat -F </li></ul><ul><li>#Compartilhamento de internet </li></ul><ul><li>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE </li></ul><ul><li>echo 1 > /proc/sys/net/ipv4/ip_forward </li></ul>
  29. 29. Um exemplo de firewall simples <ul><li>#Abre algumas portas </li></ul><ul><li>iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT </li></ul><ul><li>iptables -A INPUT -p tcp --destination-port 3128 -j ACCEPT </li></ul><ul><li>iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT </li></ul><ul><li>iptables -A INPUT -p tcp --destination-port 1433 -j ACCEPT </li></ul><ul><li>iptables -A INPUT -p tcp --destination-port 3389 -j ACCEPT </li></ul><ul><li>#Liberação de conexão para computadores da rede interna </li></ul><ul><li>iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT </li></ul><ul><li># Fecha o resto </li></ul><ul><li>iptables -A INPUT -p tcp --syn -j DROP </li></ul>
  30. 30. Um exemplo de firewall simples <ul><li>#Redirecionamento do trafego da porta 80 para o Squid </li></ul><ul><li>iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128 </li></ul><ul><li>#Redirecionamento do tráfego TCP e UDP que provém da internet para uma máquina </li></ul><ul><li>#na rede interna com ip 192.168.1.254 </li></ul><ul><li>iptables -t nat -A PREROUTING -p tcp --dport 1433 -i eth0 -j DNAT --to 192.168.1.254 </li></ul><ul><li>iptables -t nat -A PREROUTING -p udp --dport 1433 -i eth0 -j DNAT --to 192.168.1.254 </li></ul>
  31. 31. Referências <ul><li>http://www.guiadohardware.net/artigos/firewall-iptables/ </li></ul><ul><li>http://www.conectiva.com.br/cpub/pt/incConectiva/suporte/pr/servidores.firewall.iptables.html </li></ul><ul><li>http://focalinux.cipsga.org.br/gol.html </li></ul>

×