Tutorial sobre iptables

55,506 views

Published on

Tutorial sobre iptables, descrevendo seu funcionamento e principais comandos.

Published in: Technology

Tutorial sobre iptables

  1. 1. Sistemas informatizados Introdução ao iptables Marcelo Barros de Almeida [email_address]
  2. 2. Sumário <ul><li>Características do iptables
  3. 3. Conceitos básicos
  4. 4. Diagramas de tabelas e cadeias
  5. 5. Principais comandos
  6. 6. Principais filtros
  7. 7. Principais ações
  8. 8. Referências </li></ul>
  9. 9. Iptables <ul><li>A implementação de filtro de pacotes nos kernels 2.4 e 2.6 é realizado pelo iptables (projeto netfilter)
  10. 10. O iptables é o programa capaz de gerenciar a configuração do netfilter
  11. 11. Principais características </li><ul><li>Filtragem sem considerar o estado do pacote
  12. 12. Filtragem considerando o estado do pacote
  13. 13. Suporte a NAT, tanto para endereços de rede ou portas
  14. 14. Flexível, com suporte a plugins </li></ul></ul>
  15. 15. Conceitos básicos <ul><li>regras : são instruções dados para o firewall, indicando o que ele deve fazer.
  16. 16. cadeias : locais onde as regras podem ser agrupadas. As regras são processadas em ordem pelo firewall.
  17. 17. Toda cadeia tem uma política padrão, definida pelo usuário.
  18. 18. A cadeia é percorrida até uma regra ser atingida. As seguintes são ignoradas.
  19. 19. Regras com erro são ignoradas.
  20. 20. Se nenhuma regra é atingida, usa-se a regra da política padrão. </li></ul>Regra 1 Regra 2 Regra 3 Regra n ... Cadeia ... Nenhuma regra atingida. Usa a política da cadeia Regra atingida Analise a cadeia
  21. 21. Conceitos básicos <ul><li>tabelas : o iptables organiza o seu fluxo de pacotes em tabelas, cada uma com um conjunto de cadeias pré-definidas: </li><ul><li>Tabela filter : é a tabela padrão, com três cadeias </li><ul><li>INPUT
  22. 22. OUTPUT
  23. 23. FORWARD </li></ul><li>Tabela nat : tabela usada para NAT (gera outras conexões) </li><ul><li>PREROUTING
  24. 24. OUTPUT
  25. 25. POSTROUTING </li></ul></ul></ul>
  26. 26. Conceitos básicos <ul><li>Tabelas do iptables (continuação): </li><ul><li>Tabela mangle : permite alterações nos pacotes (TOS, TTL, etc) </li><ul><li>PREROUTING
  27. 27. INPUT
  28. 28. FORWARD
  29. 29. OUTPUT
  30. 30. POSTROUTING </li></ul><li>Tabela raw : marca pacotes para rastreio posterior </li></ul></ul>
  31. 31. Organização das tabelas do iptables <ul><li>Tabela filter e suas cadeias </li></ul>PROCESSO LOCAL FORWARD INPUT OUTPUT <ul>Roteamento </ul><ul>Roteamento </ul>interface de saída interface de entrada
  32. 32. Organização das tabelas do iptables <ul><li>Tabela nat e suas cadeias </li></ul>PROCESSO LOCAL PREROUTING POSTROUTING OUTPUT <ul>Roteamento </ul><ul>Roteamento </ul>interface de entrada interface de saída
  33. 33. Organização das tabelas do iptables <ul><li>Tabela mangle e suas cadeias </li></ul>PROCESSO LOCAL FORWARD PREROUTING POSTROUTING INPUT OUTPUT <ul>Roteamento </ul><ul>Roteamento </ul>interface de entrada interface de saída
  34. 34. Organização das tabelas do iptables <ul><li>Tabelas raw e suas cadeias </li></ul>PROCESSO LOCAL PREROUTING POSTROUTING OUTPUT <ul>Roteamento </ul><ul>Roteamento </ul>interface de entrada interface de saída
  35. 35. Organização das tabelas do iptables <ul><li>Tabelas filter, nat, mangle e raw e suas cadeias </li></ul>PROCESSO LOCAL FORWARD PREROUTING POSTROUTING INPUT OUTPUT <ul><li>filter
  36. 36. mangle
  37. 37. nat (DNAT)
  38. 38. raw </li></ul><ul><li>filter
  39. 39. mangle </li></ul><ul><li>raw
  40. 40. mangle
  41. 41. nat (DNAT) </li></ul><ul><li>mangle
  42. 42. nat (SNAT) </li></ul><ul>Roteamento </ul><ul>Roteamento </ul>interface de entrada <ul><li>filter
  43. 43. mangle </li></ul>interface de saída
  44. 44. Salvando e restaurando regras no iptables <ul><li>Pode ser feito com um arquivo de script ou usando os comandos iptables-save e iptables-restore
  45. 45. iptables-[save|restore] executam a operação em um só passo, de maneira mais segura (sem brechas temporárias) e rápida.
  46. 46. Salvando: </li><ul><li>sudo iptables-save > arquivo_de_regras </li></ul><li>Restaurando: </li><ul><li>sudo iptables-restore < arquivo_de_regras </li></ul><li>É possível salvar os contadores com -c </li></ul>
  47. 47. Formato geral das regras do iptables <ul><li>iptables [-t table] comando [filtro] [-j ação] </li></ul>Especifique a tabela que deseja usar. A tabela filter é a tabela default. O que será feito: adicionar uma regra, remover, etc. Deve vir no início. Detalhamento que irá permitir a filtragem do pacote. IPs de origem, taxas, portas, etc. Ação a ser tomada. Por exemplo, DROP, ACCEPT, pular para outra cadeia, etc.
  48. 48. Principais comandos de manipulação de cadeias no iptables <ul><li>Sempre maiúsculo seguido do nome da cadeia: </li><ul><li>-P: configura a política padrão da cadeia (DROP ou ACCEPT) </li><ul><li>iptables -P OUTPUT ACCEPT </li></ul><li>-N: cria uma nova cadeia </li><ul><li>iptables -N internet </li></ul><li>-F: apaga as regras da cadeia </li><ul><li>iptables -F INPUT </li></ul><li>-X: apaga uma cadeia vazia </li><ul><li>iptables -F internet; iptables -X internet </li></ul><li>-Z: zera todos os contadores da cadeia </li><ul><li>iptables -Z INPUT </li></ul></ul></ul>
  49. 49. Principais comandos de manipulação de cadeias no iptables <ul><ul><li>-A: adicionar uma regra no final da cadeia </li><ul><li>iptables -A INPUT --dport 80 -j DROP </li></ul><li>-L: listar regras da cadeia (adicione -n para não resolver nomes e --line-numbers para ver o número das regras) </li><ul><li>iptables -L -n --line-number </li></ul><li>-D: apagar uma regra da cadeia. Pode usar também a linha </li><ul><li>iptables -D INPUT --dport 80 -j DROP
  50. 50. iptables -D INPUT 5 </li></ul><li>-R: trocar uma regra por outra </li><ul><li>iptables -R INPUT 2 -s 10.0.1.2 -j DROP </li></ul><li>-I: insere uma regra em um ponto específico da cadeia </li><ul><li>iptables -I INPUT 1 --dport 80 -j DROP </li></ul></ul></ul>
  51. 51. Principais filtros no iptables <ul><li>-p <protocolo>: especifica o protocolo. Por exemplo, udp, tcp ou icmp. Pode ser negado também. Para tudo menos tcp, faça: com “-p ! tcp” </li><ul><li>iptables -A INPUT -p icmp -j DROP
  52. 52. iptables -A INPUT -p ! tcp -j DROP </li></ul><li>-s <endereço>: especifica o endereço de origem. Aceita IPs, redes, IP/máscara, IP/nn (notação CIDR) e também a negação com “!”. </li><ul><li>iptables -A INPUT -s 10.1.1.1 -j ACCEPT
  53. 53. iptables -A INPUT -s ! 10.1.1.0/24 -j DROP </li></ul><li>-d <endereço>: especifica o endereço de destino (mesmas regras do -s) </li><ul><li>iptables -A OUTPUT -d uol.com.br -j ACCEPT </li></ul></ul>
  54. 54. Principais filtros no iptables <ul><li>-i <interface>: especifica a interface de entrada do pacote. Use “!” para negar e “+” como curinga. “-i eth+” significa todas as interfaces eth. Válida em INPUT, PREROUTING e FORWARD. </li><ul><li>iptables -A INPUT -i eth0 -j ACCEPT
  55. 55. iptables -A INPUT -i ppp+ -j DROP </li></ul><li>-o <interfaces>: especifica a interface de saída. Válida em OUTPUT, POSTROUTING e FORWARD. Usa as mesmas regras de -i. </li><ul><li>iptables -A OUTPUT -o ppp+ -j ACCEPT </li></ul></ul>
  56. 56. Principais filtros no iptables <ul><li>--sport <porta>: especifica a porta de origem. Pode ser dado em forma de faixa também, como em “--sport 80:123” ou mesmo “--sport 1023:” (todas acima de 1023). Precisa ter tcp ou udp especificado como protocolo. </li><ul><li>iptables -A INPUT -p udp --dport 53 -j ACCEPT
  57. 57. iptables -A INPUT -p tcp --sport 1:1023 -j REJECT
  58. 58. iptables -A INPUT -p tcp --sport 1024: -j ACCEPT </li></ul><li>--dport <porta>: especifica a porta de destino. Mesmas regras do --sport. </li><ul><li>iptables -A OUTPUT -p tcp --dport 23 -j DROP </li></ul></ul>
  59. 59. Principais filtros no iptables (TCP, -p tcp necessário) <ul><li>--tcp-flags <máscara> <set>: Permite casar por flags do TCP. Primeiro se diz quais serão examinados, depois os que devem estar setados. Flags: SYN, ACK, URG, FIN, RST e PSH. ALL e NONE também pode ser usados para simplificar a seleção dos flags </li><ul><li>iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN -j DROP
  60. 60. iptables -A INPUT -p tcp --tcp-flags ! SYN,FIN,ACK SYN -j DROP </li></ul><li>--syn: Uma abreviação para selecionar pacotes que estejam relacionados com um processo de abertura de conexão. Poderia ser escrito também como: “--tcp-flags SYN,RST,ACK SYN” </li><ul><li>iptables -A INPUT -p tcp --syn -j DROP </li></ul></ul>
  61. 61. Principais filtros no iptables (icmp) <ul><li>Neste caso, precisa-se ter “-p icmp” antes
  62. 62. --icmp-type <tipo>: filtra por tipo de pacotes ICMP. Por exemplo, 8 é o ping, mas “echo-request” poderia ser usado. Veja a lista completa com “iptables -p icmp –help” </li><ul><li>iptables -A INPUT -p icmp –icmp-type echo-request -j ACCEPT </li></ul></ul>
  63. 63. Principais filtros no iptables (filtros explícitos) <ul><li>Existem opções de filtragem que exigem a opção “-m”, em geral opções mais avançadas ou relacionadas a plugins. A lista é enorme.
  64. 64. -m iprange: permite especificar faixas de IPs para origem (--src-range) e destino (--dst-range) </li><ul><li>-m iprange --src-range 10.0.0.1-10.0.0.20 </li></ul><li>-m length --length <min:max>: permite selecionar pacotes usando o seu tamanho como referência.
  65. 65. -m limit: limita quantas vezes uma regra pode ser casada dentro de um intervalo de tempo. Por exemplo, “-m limit --limit 3/s” ou “-m --limit 1000/hour”. É possível especificar limites de rajadas junto com--limit-burst. Por exemplo “-m limit --limit 5/s --limit-burst 10”.
  66. 66. -m mac --mac-source xx:xx:xx:xx:xx:xx: filtra por MACs
  67. 67. Isto é só um amostra, existem muitas opções “-m” </li></ul>
  68. 68. Principais ações no iptables <ul><li>ACCEPT: aceita o pacote </li><ul><li>iptables -A INPUT -p tcp --dport 22 -j ACCEPT </li></ul><li>DROP: descarta o pacote </li><ul><li>iptables -A INPUT -p tcp --dport 23 -j DROP </li></ul><li>REJECT: rejeita o pacote, informando ao host de origem. Válida em INPUT, OUTPUT e FORWARD. </li><ul><li>iptables -A INPUT -p tcp --dport 23 -j REJECT </li></ul><li>LOG: coloca no log informações sobre o pacote. Uma opção interessante é o --log-prefix “mensagem”, que permite a adição de um prefixo. O log não interrompe o processamento, fique atento. </li><ul><li>iptables -A INPUT -p tcp --dport 23 -j LOG --log-prefix “Tentativa de telnet”
  69. 69. iptables -A INPUT -p tcp --dport 23 -j DROP </li></ul></ul>
  70. 70. Principais ações no iptables (MASQUERADE) <ul><li>MASQUERADE: realiza o NAT, alterando o endereço de origem. Similar ao SNAT, mas sem opções de endereço de saída. Válido em POSTROUTING somente, tabela nat. Muito usado para implementar as regras de NAT do firewall. </li><ul><li>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  71. 71. iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE </li></ul><li>Não esqueça de habilitar o forwarding, colocando 1 em em /proc/sys/net/ipv4/ip_forward, usando uma das formas abaixo: </li><ul><li>$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
  72. 72. # echo 1 > /proc/sys/net/ipv4/ip_forward </li></ul></ul>firewall internet intranet eth1 eth0
  73. 73. Principais ações no iptables (SNAT) <ul><li>SNAT: realiza o NAT, alterando o endereço de origem do pacote. Válido em POSTROUTING, da tabela nat. Pode usar a opção --to-source <IPa-IPb> para especificar uma faixa de IPs. </li><ul><li>iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 200.210.10.1-200.210.10.10
  74. 74. iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 200.210.10.1-200.210.10.10:1024:32000 </li></ul></ul>
  75. 75. Principais ações no iptables (REDIRECT) <ul><li>REDIRECT: permite o redirecionamento de portas. Possui a opção --to-ports para especificar a nova portas (ou uma faixa delas). Válida em PREROUTING e OUTPUT, da tabela nat. Útil para proxy transparentes, por exemplo. </li><ul><li>iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to--ports 3128 </li></ul><li>Na configuração do squid, use a seguinte linha: </li><ul><li>http_port 3128 transparent </li></ul></ul>proxy+fw :3128 intranet cliente Acesso a internet na porta 80 eth1
  76. 76. Principais ações no iptables (DNAT) <ul><li>DNAT: realiza o NAT, alterando o endereço de destino do pacote. Pode usar a opção --to-destination <IPa-IPb> para especificar uma faixa de IPs (load balancing). Válido somente em PREROUTE e OUTPUT, tabela nat.
  77. 77. Caso de uso típico para criação de virtual servers, onde é preciso regras para quem vem de fora, para máquina na intranet e para o próprio firewall. </li><ul><li>iptables -t nat -A PREROUTING -p tcp -d 65.10.20.31 --dport 80 -j DNAT --to-destination 172.16.0.10
  78. 78. iptables -t nat -A POSTROUTING -p tcp -d 172.16.0.10 --dport 80 -j SNAT --to-source 172.16.0.1
  79. 79. iptables -t nat -A OUTPUT -p tcp -d 65.10.20.31 --dport 80 -j DNAT --to-destination 172.16.0.10 </li></ul></ul>firewall internet intranet WWW cliente 200.210.1.2 172.16.0.10 172.16.0.1 65.10.20.31
  80. 80. Principais ações no iptables (redirecionando cadeias) <ul><li>Caso você tenha criado uma cadeia, pode usar o -j para redirecionar a filtragem para ela: </li><ul><li>-j <nome_da_cadeia> </li></ul><li>Ao terminar, caso nenhuma regra tenha sido acionada, o fluxo volta para quem redirecionou e o processamento continua. Caso contrário, é interrompido. </li><ul><li>iptables -N internet
  81. 81. iptables -A INPUT -p tcp --dport 80 -j internet </li></ul></ul>Regra 1 -j internet Regra 3 Regra n ... INPUT ... Regra 1 Regra 2 Regra 3 Regra m ... internet ... Regra não atingida: aplica política padrão da cadeia e retorna se possível
  82. 82. Referências <ul><li>O iptables tutorial, do Oscar Andreasson, é imperdível: </li><ul><li>http://www.frozentux.net/documents/iptables-tutorial/ </li></ul><li>O guia foca Linux, como sempre: </li><ul><li>http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.html </li></ul><li>A página do projeto netfilter (com alguns docs em PT_BR): </li><ul><li>http://www.netfilter.org/documentation/ </li></ul></ul>

×