Pesquisa de site

Ubuntu Iptables: Como controlar o tráfego de rede usando o iptables?


“…Um utilitário Unix de espaço de usuário que oferece aos administradores de sistema a capacidade de configurar as regras de filtragem de pacotes IP implementadas pelo módulo de filtro de rede do Kernel. ” O Iptables atua como um firewall usando regras de filtragem de pacotes com base em vários critérios, como endereço IP, porta e protocolos.

Este guia discutirá como configurar e usar as regras do iptables em um sistema Ubuntu para proteger sua rede. Seja você um usuário iniciante do Linux ou um administrador de sistema experiente, neste guia, de uma forma ou de outra, você aprenderá algo útil sobre o iptables.

O Iptables vem pré-instalado no Ubuntu e na maioria das distribuições baseadas no Debian. O Ubuntu também empacota o firewall GUFW, uma alternativa gráfica que você pode usar para trabalhar com iptables.

NOTA: Para usar e configurar o iptables, você precisará de privilégios sudo em seu sistema. Você pode aprender mais sobre o sudo no tutorial a seguir.

Agora que você sabe o que é Iptables, vamos mergulhar de cabeça!

Como usar o iptables para gerenciar o tráfego IPv4?

Para usar o Iptables para rede IPv4 e gerenciamento de tráfego, você precisa entender o seguinte:

O Comando Iptables

O Iptables oferece uma seleção de opções que permitem personalizar e ajustar suas regras do iptables. Vamos discutir alguns desses parâmetros e ver o que eles fazem.

NOTA: você pode configurar um conjunto de regras que gerenciam um subconjunto específico, conhecido como iptables chains.

Parâmetros do Iptables

Antes de começarmos a criar e configurar as regras do iptables, vamos primeiro entender o básico do iptables, como sintaxe geral e argumentos padrão.

Considere o comando abaixo:

sudo iptables -I INPUT -s 192.168.0.24 -j DROP

O comando acima diz ao iptables para criar uma regra na cadeia. A regra descarta todos os pacotes do endereço IP 192.168.0.24.

Vamos examinar o comando, linha por linha, para entendê-lo melhor.

  • O primeiro comando iptables chama o utilitário de linha de comando iptables.

  • O próximo é o argumento -I usado para inserção. O argumento de inserção adiciona uma regra no início da cadeia iptables e, portanto, recebe uma prioridade mais alta. Para adicionar uma regra em um número específico na cadeia, use o argumento -I seguido do número ao qual a regra deve ser atribuída.

  • O argumento -s ajuda a especificar a fonte. Portanto, usamos o argumento -s seguido do endereço IP.

  • O parâmetro -j com iptables especifica o salto para um destino específico. Esta opção define a ação que o Iptables deve executar quando houver um pacote correspondente. O Iptables oferece quatro alvos principais por padrão, que incluem: ACCEPT, DROP, LOG e REJECT.

O Iptables oferece uma seleção de parâmetros que você pode usar para configurar várias regras. Os vários parâmetros que você pode usar para configurar as regras do iptables incluem:

-p –protocol

Especifica o protocolo de conexão; por exemplo, TCP, UDP, etc.

-d –destination

Especifica o destino, que pode ser um endereço, nome de rede ou nome de host.

-j –jump

Define a ação que o iptables deve executar após encontrar um pacote.

-o –out-interface

Define a interface pela qual o iptable envia o pacote.

-i –in-interface

Define a interface usada para estabelecer pacotes de rede.

-c –set-counters

Permite que o administrador defina os contadores de bytes e pacotes para uma regra especificada.

-g –goto chain

O parâmetro especifica que o processamento deve continuar na cadeia definida pelo usuário após o retorno.

-f –fragment

Diz ao iptables para aplicar a regra apenas ao segundo fragmento e aos seguintes dos pacotes fragmentados.

Opções do Iptables

O comando iptables oferece suporte a uma ampla gama de opções. Alguns comuns incluem:

-D –delete

Remove uma regra da cadeia especificada

-F –flush

Remove todas as regras, uma de cada vez

-L –list

Mostra todas as regras na cadeia especificada

-I –insert

Insere uma regra na cadeia especificada (passada como um número, quando não há nenhum número especificado; a regra é adicionada no topo)

-C –check

Consultas para correspondência de regras; requisito em uma regra especificada

-v –verbose

Exibe mais detalhes quando usado com o parâmetro -L

-N –new-chain <name>

Adiciona uma nova cadeia definida pelo usuário

-X –delete-chain <name>

Remove uma cadeia específica definida pelo usuário

Tabelas Iptables

O kernel do Linux possui tabelas padrão que abrigam um conjunto de regras relacionadas. Essas tabelas padrão têm um conjunto de cadeias padrão, mas os usuários podem personalizar as regras adicionando regras definidas pelo usuário.

NOTA: As tabelas padrão dependerão muito da configuração do Kernel e dos módulos instalados.

Aqui estão as tabelas iptables padrão:

1: As Tabelas de Filtro

A tabela de filtros é uma tabela padrão que contém cadeias usadas para filtragem de pacotes de rede. Algumas das cadeias padrão nesta tabela incluem:

Chain Description
Input Iptables use this chain for any incoming packets to the system, i.e., packets going to local network sockets.
Output Iptables use the output chain for locally generated packets, i.e., packets going out of the system.
Forward This chain is what the Iptables use for packets routed or forwarded via the system.

2: As tabelas NAT

NAT ou tabela de endereços de rede é um dispositivo de roteamento usado para modificar os endereços IP de origem e destino em um pacote de rede. O principal uso da tabela NAT é conectar duas redes em um intervalo de endereço privado com a rede pública.

O NAT foi desenvolvido para suportar o mascaramento de endereços IP reais, permitindo que intervalos de endereços IP privados alcancem a rede externa. Isso ajuda a evitar que detalhes sobre redes internas sejam revelados em redes públicas.

A tabela NAT é empregada quando um pacote inicia uma nova conexão.

O Iptables tem uma tabela padrão para endereçamento NAT. Esta tabela tem três cadeias principais:

Chain Description
PREROUTING Allows the modification of packet information before arriving in the INPUT chain—used for incoming packets
OUTPUT Reserved for packets created locally, i.e., before network routing occurs
POSTROUTING Allows the modification of outgoing packets— Packets leaving the OUTPUT chain

O diagrama abaixo mostra uma visão geral de alto nível desse processo.

Use o comando abaixo para visualizar suas tabelas de roteamento NAT.

iptables -t nat -n -v -L

3: As tabelas Mangle

A tabela mangle é usada principalmente para modificação especial de pacotes. Em termos simples, é usado para modificar os cabeçalhos IP de um pacote de rede. A modificação de pacotes pode incluir a alteração de um valor TTL de pacote, alteração de saltos de rede válidos para um pacote, etc.

A tabela contém as seguintes cadeias padrão:

POSTROUTING

Usado para pacotes de saída

INPUT

Usado para pacotes vindos diretamente para o servidor

OUTPUT

Usado para pacotes locais

Forward

Reservado para pacotes roteados pelo sistema

4: As Tabelas Brutas

O objetivo principal da tabela bruta é configurar exceções para pacotes que não devem ser tratados pelo sistema de rastreamento. A tabela bruta define uma marca NOTRACK nos pacotes, solicitando que o recurso conntrack ignore o pacote.

Conntrack é um recurso de rede do kernel do Linux que permite que o kernel do Linux rastreie todas as conexões de rede, permitindo que o kernel identifique os pacotes que compõem um fluxo de rede.

A tabela bruta possui duas cadeias principais:

Chain Description
PREROUTING Reserved for packets received by network interfaces
OUTPUT Reserved for packets initiated by local processes

5: A Tabela de Segurança

O uso principal desta tabela é configurar o mecanismo de segurança interno Security Enhancement for Linux (SELinux) que marca nos pacotes. A marca de segurança pode ser aplicada por conexão ou pacote.

Ela é usada para regras de controle de acesso obrigatório e é a segunda tabela acessada após a tabela de filtro. Ele oferece as seguintes cadeias padrão:

Chain Description
INPUT Reserved for incoming packets to the system
OUTPUT Used for locally created packets
FORWARD Used for packets routed through the system

Depois de examinar o Iptables padrão, vamos dar um passo adiante e discutir como trabalhar com as regras do iptables.

Como trabalhar com as regras do iptables?

As regras do iptables são aplicadas em ordem crescente. Isso significa que a primeira regra em um conjunto específico é aplicada primeiro, seguida pela segunda, depois pela terceira e assim por diante, até a última.

Por causa dessa função, o iptables impede que você adicione regras em um conjunto usando o parâmetro -A; você deve usar o -I, seguido do número ou esvaziando-o para adicionar ao topo da lista.

Exibindo Iptables

Para visualizar seu iptables, use o comando iptables -L -v para IPv4 e ip6tables -L -v para IPv6.

Inserindo Regras

Para inserir regras em um conjunto, você deve posicioná-las na ordem exata, respeitando as regras utilizadas pela mesma cadeia. Você pode visualizar a lista de suas regras do iptables com o comando discutido acima:

sudo iptables -L -v

Por exemplo, para inserir uma regra permitindo conexões de entrada para a porta 9001 sobre TCP, precisamos especificar o número da regra para a cadeia INPUT aderindo às regras de tráfego para a web.

sudo iptables -I INPUT 1 -p TCP --dport 9001 -m state --state NEW -j ACCEPT

Depois de visualizar o iptables atual, você deverá ver a nova regra no conjunto.

sudo iptables -L -v

Regras de Substituição

A funcionalidade de substituição funciona de forma semelhante à inserção, no entanto, usa o comando iptables -R. Por exemplo, para modificar a regra acima e definir a porta 9001 para negar, nós:

sudo iptables -R INPUT 1 -p TCP --dport 9001 -m state --state NEW -j REJECT

Excluindo uma regra

Para excluir uma regra, passamos o número da regra. Por exemplo, para excluir a regra acima, podemos especificar como:

sudo iptables -D INPUT 1

Na maioria das distribuições Linux, iptables estão vazios para IPv4 e IPv6. Portanto, se você não adicionou nenhuma nova regra, obterá uma saída semelhante à mostrada abaixo. Isso é arriscado porque significa que o sistema está permitindo todo o tráfego de entrada, saída e roteado.

Vamos nos aprofundar em como configurar o iptables:

Como configurar o iptables?

Existem inúmeras maneiras de configurar as regras do iptables. Esta seção usa exemplos para mostrar como definir regras usando portas e endereços IP.

Bloqueando e Permitindo Tráfego por Portas

Você pode usar uma porta específica para bloquear ou permitir todo o tráfego em uma interface de rede. Considere os seguintes exemplos:

sudo iptables -A INPUT -j ACCEPT -p TCP --destination-port 1001 -i wlan0

Os comandos acima permitem o tráfego na porta 1001 TCP na interface wlan0.

sudo iptables -A INPUT -j DROP -p TCP --destination-port 1001 -i wlan0

Este comando faz o oposto do comando acima, pois bloqueia todo o tráfego na porta 1001 em wlan0.

Aqui está uma inspeção detalhada do comando:

  • O primeiro argumento (-A) adiciona uma nova regra ao final da cadeia de tabelas.

  • O argumento INPUT adiciona a regra especificada à tabela.

  • O argumento DROP define a ação a ser executada como ACCEPT e DROP, respectivamente. Isso significa que, uma vez que um pacote é correspondido, ele é descartado.

  • -p especifica o protocolo como TCP e permite que o tráfego em outros protocolos passe.

  • –destination-port define a regra para aceitar ou descartar todo o tráfego destinado à porta 1001.

  • -i diz ao iptables para aplicar a regra ao tráfego vindo da interface wlan0.

NOTA: Iptables não entendem aliases de interface de rede. Assim, em um sistema com mais de uma interface virtual, será necessário definir o endereço de destino de forma manual e explícita.

Por exemplo:

sudo iptables -A INPUT -j DROP -p TCP --destination-port 1001 -i wlan0 -d 192.168.0.24

Listas brancas e listas negras de endereços IP

Você pode criar regras de firewall usando iptables. Um exemplo é interromper todo o tráfego e permitir o tráfego de rede apenas de endereços IP explícitos.

Exemplo :

iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A INPUT -i lo -m comment --comment "Allow loopback connections" -j ACCEPT
iptables -A INPUT -p icmp -m comment --comment “Allow Ping to work as expected” -j

ACEITAR

iptables -A INPUT -s 192.168.0.1/24 -j ACCEPT
iptables -A INPUT -s 192.168.0.0 -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

A primeira linha define uma regra para permitir todos os endereços IP de origem na sub-rede 192.168.0.1/24. Você também pode usar CIDR ou endereços IP individuais. No comando a seguir, definimos a regra para permitir todo o tráfego conectado às conexões existentes. Nos comandos finais, definimos uma política para INPUT e FORWARD para descartar tudo.

Usando iptables em IPv6

O comando Iptables só funciona em IPv4. Para usar o iptables no IPv6, você deve usar o comando ip6tables. O Ip6tables usa tabelas raw, filter, security e mangle. A sintaxe geral para ip6tables é semelhante a iptables e também suporta opções correspondentes de iptables, como append, delete, etc.

Considere usar as páginas de manual do ip6tables para obter mais informações.

Exemplo de conjuntos de regras iptables para segurança de rede

A criação de regras de firewall adequadas dependerá principalmente do serviço em execução em um sistema e das portas em uso. No entanto, aqui estão algumas regras básicas de configuração de rede que você pode usar para proteger seu sistema:

1: Permita o tráfego da interface de loopback e rejeite todos os loopbacks provenientes de outras interfaces

iptables -A INPUT -i lo -j ACCEPT (You can also use ip6tables)
iptables -A INPUT ! -i lo -s 127.0.0.0 -j REJECT (ip6tables also applicable)

2: Negar todas as solicitações de ping

iptables -A INPUT -p icmp -m state --state NEW --icmp-type 8 -j REJECT

3: Permitir conexões SSH

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

Estes são comandos de exemplo que você pode usar para proteger seu sistema. No entanto, a configuração dependerá muito do que ou de quem você deseja acessar vários serviços.

CUIDADO: Se você preferir desativar completamente o IPv6, certifique-se de remover o comentário da linha, pois isso retardará o processo de atualização:

precedence ::ffff:0:0/96 100 found in /etc/gai.conf .

Isso ocorre porque o gerenciador de pacotes APT resolve o domínio espelho no IPv6 devido ao apt-get update.

Como implantar regras do iptables?

Para implantar seu iptables no Ubuntu ou em outros sistemas baseados em Debian, comece criando dois arquivos, ip4 e ip6, para seus respectivos endereços IP.

Em qualquer um dos arquivos, adicione as regras que deseja aplicar em seus arquivos correspondentes — regras IPv4 para o arquivo ip4 e regras IPv6 para o arquivo ip6.

Em seguida, precisamos importar as regras usando o comando:

sudo iptables-restore < /tmp/ip4 (replace filename for IPv6)

Em seguida, você pode verificar se as regras foram aplicadas usando o comando:

sudo iptables -L -v

Um guia rápido do iptables-persistent

O Ubuntu e as distribuições comuns baseadas no Debian vêm com um pacote iptables-persistent que permite que você aplique suas regras de firewall facilmente na reinicialização. O pacote fornece arquivos que você pode usar para definir regras para IPv4 ou IPv6 e podem ser aplicados automaticamente na inicialização.

Você também pode usar regras de firewall usando UFW ou GUFW. Considere o tutorial a seguir para aprender a usar o UFW.

Como instalar o iptables-persistent?

Certifique-se de ter o iptables-persistent instalado em seu sistema. Use o dpkg para verificar se você tem o pacote instalado.

Se não, use o seguinte comando:

sudo apt-get install iptables-persistent

Você será solicitado duas vezes a salvar suas regras IPv4 e IPv6 atuais. Clique em Sim para salvar ambas as regras.

Clique em sim para salvar o IPv6.

Após a conclusão da instalação, verifique se você possui o subdiretório iptables, conforme mostrado na imagem abaixo.

Conclusão

Neste tutorial, abordamos os fundamentos do iptables. Começando com o trabalho com iptables, comandos básicos, tabelas iptables padrão e parâmetros.

Pelo que você aprendeu, você deve estar em condições de usar o iptables para criar regras de firewall que ajudem a proteger seu sistema.