O iptables é um firewall base utilizado em sistemas Unix, programado em C, que permite realizar uma variedade de operações com pacotes de rede, incluindo bloqueios, redirecionamentos e filtragem de tráfego. O iptables opera na linha de comando, proporcionando uma ferramenta prática, direta, simples e eficiente para proteger sistemas ou redes inteiras. A flexibilidade do iptables permite criar regras complexas que podem ser adaptadas para diversas necessidades de segurança, desde bloquear tráfego indesejado até redirecionar pacotes para outros destinos.
1. Bloqueio de Pacotes: O iptables pode ser configurado para bloquear pacotes de rede indesejados com base em diversos critérios, como endereço IP de origem, protocolo, porta de destino, entre outros. Isso permite proteger a rede contra acessos não autorizados e ataques.
2. Redirecionamento de Pacotes: Uma das funcionalidades poderosas do iptables é a capacidade de redirecionar pacotes para outros endereços IP ou portas. Isso é útil para implementar soluções como balanceamento de carga, proxies e NAT (Network Address Translation).
3. Filtragem de Tráfego: O iptables permite criar regras para filtrar o tráfego que passa pelo firewall, permitindo ou negando o tráfego com base em critérios específicos. Isso é essencial para a implementação de políticas de segurança robustas.
4. Registro de Tráfego: O iptables pode ser configurado para registrar (log) o tráfego de rede, ajudando na análise de tentativas de acesso e no monitoramento da atividade da rede. Isso é importante para a detecção de intrusões e auditoria de segurança.
5. Script de Inicialização: As regras do iptables podem ser salvas em scripts de inicialização, permitindo que a configuração do firewall seja carregada automaticamente durante a inicialização do sistema. Isso garante que as políticas de segurança sejam aplicadas consistentemente em cada reinicialização.
6. Suporte a Extensões: O iptables suporta extensões que permitem adicionar funcionalidades adicionais, como módulos de inspeção de pacotes, correspondência de estado de conexão e outras funcionalidades avançadas de filtragem de pacotes.
7. Integração com Outras Ferramentas de Segurança: O iptables pode ser integrado com outras ferramentas de segurança e monitoramento, como sistemas de detecção de intrusões (IDS), para fornecer uma camada adicional de proteção.
A utilização do iptables requer um bom entendimento da estrutura e funcionamento das redes de computadores, assim como conhecimento detalhado sobre a sintaxe e semântica das regras do iptables. No entanto, a sua flexibilidade e poder tornam-no uma escolha popular entre administradores de sistemas e profissionais de segurança para proteger redes e sistemas Unix.
Lógica do iptables
As regras no iptables são organizadas em tabelas, cada uma delas definindo um escopo específico de regras e comportamentos para manipulação de pacotes de rede. As principais tabelas no iptables são:
Tabelas
As tabelas no iptables são coleções de regras agrupadas de acordo com o tipo de operação que realizam. As principais tabelas são:
1. filter: A tabela padrão utilizada para a filtragem de pacotes. Contém regras para aceitar, rejeitar ou descartar pacotes.
2. nat: Utilizada para a tradução de endereços de rede (NAT). Inclui regras para a pré-roteamento, pós-roteamento e saída de pacotes gerados localmente.
3. mangle: Usada para modificações especiais em pacotes, como alteração de campos de cabeçalho. Permite a configuração de regras que processam pacotes antes e depois do roteamento, assim como pacotes destinados ou gerados pelo sistema local.
4. raw: Usada para configurar exceções de rastreamento de conexões. Permite a configuração de regras para o pré-roteamento e saída de pacotes gerados localmente.
Funcionamento
Quando um pacote chega ao sistema, ele é processado pelas tabelas apropriadas conforme o fluxo de tráfego. Cada tabela contém um conjunto de regras que determinam como o pacote deve ser tratado. As ações típicas incluem:
• ACCEPT: Permite que o pacote continue seu caminho.
• DROP: Descarte silenciosamente o pacote.
• REJECT: Recusa o pacote e envia uma resposta de erro ao remetente.
• LOG: Registra o pacote para análise posterior.
• REDIRECT: Redireciona o pacote para outro destino.
Default Policies
As políticas padrões do firewall são separadas para cada tabela e determinarão o que acontecerá caso os pacotes recebidos não deem match com nenhuma regra especificada no firewall, podendo aceitar ou rejeitar os pacotes. Para visualizar as políticas padrões definidas no iptables, utilize:
- Comando:
- iptables -L
Para verificar as políticas aplicadas em outras tabelas, utilize : iptables -L -t (tabela), por exemplo:
- Comando:
- iptables -L -t nat
- ou
- iptables -L -t mangle
Chains
As chains, ou "cadeias", são grupos dentro das tabelas do iptables que formam um conjunto de regras para avaliar pacotes de rede de forma sequencial (de cima para baixo, conforme listadas no terminal). Um pacote passa por todas as regras de uma chain e para na primeira correspondência (match). Por exemplo, se há um pacote direcionado para a porta 80 e existe uma regra que rejeita esse pacote seguida por outra regra que permite pacotes para essa porta, o pacote será rejeitado pela primeira regra. Se nenhuma regra corresponder ao pacote dentro da cadeia, a política padrão será consultada.
Embora seja possível criar novas chains para necessidades muito específicas, geralmente as chains padrão são suficientes para a maioria das configurações. As chains padrão são:
• OUTPUT: Regras aplicadas a pacotes gerados por processos locais no sistema.
• FORWARD: Regras aplicadas a pacotes que são roteados através do servidor, incluindo pacotes que atravessam diferentes interfaces de rede no servidor.
• PREROUTING: Regras aplicadas a pacotes quando eles chegam ao sistema, antes do roteamento. Usada principalmente para DNAT (Destination NAT).
• POSTROUTING: Regras aplicadas a pacotes após o roteamento. Usada principalmente para SNAT (Source NAT).
Estrutura de uma Regra no iptables
O iptables é gerenciado via linha de comando. Para entender melhor a estrutura de uma regra no iptables, vejamos os componentes comuns de uma regra típica:
• -A: Adiciona a regra no final da cadeia especificada.
• -p: Especifica o protocolo (tcp, udp, icmp, etc.).
• --dport: Define a porta de destino.
• -j: Escolhe a ação a ser tomada pelo firewall (ACCEPT, REJECT, DROP, etc.).
Tabelas do iptables
Tabela filter
A tabela filter é a mais utilizada, destinada a aceitar, rejeitar ou redirecionar pacotes. Geralmente, contém a maior quantidade de regras, pois é responsável por armazenar os bloqueios para redes externas, como a internet.
Tabela nat
A tabela nat controla a tradução de endereços de rede (NAT) que atravessam o host Linux. É utilizada principalmente para DNAT (Destination NAT) e SNAT (Source NAT).
Tabela mangle
A tabela mangle é usada para modificações especiais em pacotes, como a marcação de pacotes, priorização de serviços e ajustes de desempenho de rede.
Tabela raw
A tabela raw é utilizada para marcar pacotes que não devem ser manipulados pelo sistema de rastreamento de conexões. É a primeira tabela na ordem de processamento de um pacote, e rejeitar pacotes diretamente nesta tabela pode economizar recursos de processamento.
Ações Possíveis
As ações, ou "targets", definidas com o parâmetro -j (ou --jump), determinam o que o iptables deve fazer quando uma regra corresponde a um pacote. As principais ações incluem:
• REJECT: Rejeita o pacote e envia uma mensagem de erro ao remetente.
• ACCEPT: Aceita o pacote e permite que ele continue seu caminho.
• DROP: Descarte silenciosamente o pacote, sem informar o remetente.
• LOG: Registra informações sobre o pacote no log do sistema.
Outras ações, específicas para determinadas tabelas, incluem:
• SNAT: Modifica o endereço de origem do pacote (tabela nat).
• DNAT: Modifica o endereço de destino do pacote (tabela nat).
• MASQUERADE: Similar ao SNAT, mas usado principalmente em conexões dinâmicas (tabela nat).
• MARK: Marca o pacote para processamento posterior (tabela mangle).
• TOS: Define o tipo de serviço para o pacote (tabela mangle).
• TTL: Modifica o campo Time-To-Live do pacote (tabela mangle).
Comandos Úteis
O comando abaixo é utilizado para listar todas as regras de uma tabela específica no iptables, fornecendo informações detalhadas sobre cada regra e numerando as linhas.
- Comando:
- iptables -vL -t <nome da tabela> --line-numbers
Com o número da linha em mãos obtido no comando acima, você poderá deletar a regra com o camando abaixo:
- Comando:
- iptables [-t <tabela>] -D <chain> <número da linha>
O comando abaixo é utilizado para adicionar uma nova regra a uma cadeia específica dentro de uma tabela no iptables.
- Comando:
- iptables [-t <tabela>] -A <chain> <regra> -j <acao>
É isso galera, agora e mão na massa e praticar, compreender a estrutura e os componentes das regras do iptables, bem como as funções das tabelas e ações, é essencial para a configuração eficaz de políticas de segurança e gerenciamento de tráfego de rede