O documento introduz o iptables, o programa que gerencia o firewall no Linux. Aborda conceitos como tabelas, cadeias e regras, além dos principais comandos e filtros para configurar o firewall, como ACCEPT, DROP, SNAT e DNAT.
20. Se nenhuma regra é atingida, usa-se a regra da política padrão. Regra 1 Regra 2 Regra 3 Regra n ... Cadeia ... Nenhuma regra atingida. Usa a política da cadeia Regra atingida Analise a cadeia
21. Conceitos básicos tabelas : o iptables organiza o seu fluxo de pacotes em tabelas, cada uma com um conjunto de cadeias pré-definidas: Tabela filter : é a tabela padrão, com três cadeias INPUT
31. Organização das tabelas do iptables Tabela filter e suas cadeias PROCESSO LOCAL FORWARD INPUT OUTPUT Roteamento Roteamento interface de saída interface de entrada
32. Organização das tabelas do iptables Tabela nat e suas cadeias PROCESSO LOCAL PREROUTING POSTROUTING OUTPUT Roteamento Roteamento interface de entrada interface de saída
33. Organização das tabelas do iptables Tabela mangle e suas cadeias PROCESSO LOCAL FORWARD PREROUTING POSTROUTING INPUT OUTPUT Roteamento Roteamento interface de entrada interface de saída
34. Organização das tabelas do iptables Tabelas raw e suas cadeias PROCESSO LOCAL PREROUTING POSTROUTING OUTPUT Roteamento Roteamento interface de entrada interface de saída
35. Organização das tabelas do iptables Tabelas filter, nat, mangle e raw e suas cadeias PROCESSO LOCAL FORWARD PREROUTING POSTROUTING INPUT OUTPUT filter
46. Salvando: sudo iptables-save > arquivo_de_regras Restaurando: sudo iptables-restore < arquivo_de_regras É possível salvar os contadores com -c
47. Formato geral das regras do iptables iptables [-t table] comando [filtro] [-j ação] 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. Principais comandos de manipulação de cadeias no iptables Sempre maiúsculo seguido do nome da cadeia: -P: configura a política padrão da cadeia (DROP ou ACCEPT) iptables -P OUTPUT ACCEPT -N: cria uma nova cadeia iptables -N internet -F: apaga as regras da cadeia iptables -F INPUT -X: apaga uma cadeia vazia iptables -F internet; iptables -X internet -Z: zera todos os contadores da cadeia iptables -Z INPUT
49. Principais comandos de manipulação de cadeias no iptables -A: adicionar uma regra no final da cadeia iptables -A INPUT --dport 80 -j DROP -L: listar regras da cadeia (adicione -n para não resolver nomes e --line-numbers para ver o número das regras) iptables -L -n --line-number -D: apagar uma regra da cadeia. Pode usar também a linha iptables -D INPUT --dport 80 -j DROP
50. iptables -D INPUT 5 -R: trocar uma regra por outra iptables -R INPUT 2 -s 10.0.1.2 -j DROP -I: insere uma regra em um ponto específico da cadeia iptables -I INPUT 1 --dport 80 -j DROP
51. Principais filtros no iptables -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” iptables -A INPUT -p icmp -j DROP
52. iptables -A INPUT -p ! tcp -j DROP -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 “!”. iptables -A INPUT -s 10.1.1.1 -j ACCEPT
53. iptables -A INPUT -s ! 10.1.1.0/24 -j DROP -d <endereço>: especifica o endereço de destino (mesmas regras do -s) iptables -A OUTPUT -d uol.com.br -j ACCEPT
54. Principais filtros no iptables -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. iptables -A INPUT -i eth0 -j ACCEPT
55. iptables -A INPUT -i ppp+ -j DROP -o <interfaces>: especifica a interface de saída. Válida em OUTPUT, POSTROUTING e FORWARD. Usa as mesmas regras de -i. iptables -A OUTPUT -o ppp+ -j ACCEPT
56. Principais filtros no iptables --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. iptables -A INPUT -p udp --dport 53 -j ACCEPT
58. iptables -A INPUT -p tcp --sport 1024: -j ACCEPT --dport <porta>: especifica a porta de destino. Mesmas regras do --sport. iptables -A OUTPUT -p tcp --dport 23 -j DROP
59. Principais filtros no iptables (TCP, -p tcp necessário) --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 iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN -j DROP
60. iptables -A INPUT -p tcp --tcp-flags ! SYN,FIN,ACK SYN -j DROP --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” iptables -A INPUT -p tcp --syn -j DROP
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” iptables -A INPUT -p icmp –icmp-type echo-request -j ACCEPT
63. Principais filtros no iptables (filtros explícitos) 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. -m iprange: permite especificar faixas de IPs para origem (--src-range) e destino (--dst-range) -m iprange --src-range 10.0.0.1-10.0.0.20 -m length --length <min:max>: permite selecionar pacotes usando o seu tamanho como referência.
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”.
67. Isto é só um amostra, existem muitas opções “-m”
68. Principais ações no iptables ACCEPT: aceita o pacote iptables -A INPUT -p tcp --dport 22 -j ACCEPT DROP: descarta o pacote iptables -A INPUT -p tcp --dport 23 -j DROP REJECT: rejeita o pacote, informando ao host de origem. Válida em INPUT, OUTPUT e FORWARD. iptables -A INPUT -p tcp --dport 23 -j REJECT 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. iptables -A INPUT -p tcp --dport 23 -j LOG --log-prefix “Tentativa de telnet”
70. Principais ações no iptables (MASQUERADE) 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. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
71. iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE Não esqueça de habilitar o forwarding, colocando 1 em em /proc/sys/net/ipv4/ip_forward, usando uma das formas abaixo: $ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
73. Principais ações no iptables (SNAT) 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. iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 200.210.10.1-200.210.10.10
75. Principais ações no iptables (REDIRECT) 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. iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to--ports 3128 Na configuração do squid, use a seguinte linha: http_port 3128 transparent proxy+fw :3128 intranet cliente Acesso a internet na porta 80 eth1
76. Principais ações no iptables (DNAT) 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. 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. iptables -t nat -A PREROUTING -p tcp -d 65.10.20.31 --dport 80 -j DNAT --to-destination 172.16.0.10
80. Principais ações no iptables (redirecionando cadeias) Caso você tenha criado uma cadeia, pode usar o -j para redirecionar a filtragem para ela: -j <nome_da_cadeia> Ao terminar, caso nenhuma regra tenha sido acionada, o fluxo volta para quem redirecionou e o processamento continua. Caso contrário, é interrompido. iptables -N internet
81. iptables -A INPUT -p tcp --dport 80 -j internet 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. Referências O iptables tutorial, do Oscar Andreasson, é imperdível: http://www.frozentux.net/documents/iptables-tutorial/ O guia foca Linux, como sempre: http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.html A página do projeto netfilter (com alguns docs em PT_BR): http://www.netfilter.org/documentation/