Este guia discutirá como configurar e usar as regras iptables em um sistema Ubuntu para proteger sua rede. Seja você um usuário iniciante no Linux ou um administrador de sistema experiente, a partir deste guia e de uma maneira ou de outra, você aprenderá algo útil sobre iptables.
Os iptables vêm pré-instalados nas distribuições do Ubuntu e na maioria. O Ubuntu também empacota o Firewall GUFW, uma alternativa gráfica que você pode usar para trabalhar com iptables.
OBSERVAÇÃO: Para usar e configurar iptables, você precisará de privilégios sudoes em seu sistema. Você pode aprender mais sobre sudo com o seguinte tutorial.
Agora que você sabe o que é iptables, vamos mergulhar bem!
Como usar iptables para gerenciar o tráfego IPv4?
Para usar iptables para rede e gerenciamento de tráfego IPv4, você precisa entender o seguinte:
O comando iptables
Iptables oferece uma seleção de opções que permitem personalizar e ajustar suas regras iptables. Vamos discutir alguns desses parâmetros e ver o que eles fazem.
OBSERVAÇÃO: Você pode configurar um conjunto de regras que gerenciam um subconjunto específico, conhecido como correntes iptables.
Parâmetros iptables
Antes de começarmos a criar e configurar as regras iptables, vamos primeiro entender o básico dos iptables, como sintaxe geral e argumentos padrão.
Considere o comando abaixo:
sudo iptables -i entrada -s 192.168.0.24 -J Drop
O comando acima diz aos iptables para criar uma regra na cadeia. A regra cai todos os pacotes do endereço IP 192.168.0.24.
Vamos examinar o comando, linha por linha, para entender melhor.
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 iptables incluem:
Parâmetro de regra iptables | Descrição |
---|---|
-S -SOURCE | Especifique a fonte, que pode ser um endereço, nome de host ou nome de rede. |
-P -protocolo | Especifica o protocolo de conexão; Por exemplo, TCP, UDP, etc. |
-Destinação D | Especifica o destino, que pode ser um endereço, nome de rede ou nome de host. |
-J -Jump | Define a ação iptables deve realizar depois de encontrar um pacote. |
-o -out -interface | Define a interface através da qual o iptable envia o pacote. |
-Eu -in -interface | Define a interface usada para estabelecer pacotes de rede. |
-Counters de conjunto C | Permite que o administrador defina os contadores de byte e pacotes para uma regra especificada. |
-Cadeia g -Goto | O parâmetro especifica que o processamento deve continuar na cadeia do conjunto de usuários após o retorno. |
-F -Fragment | Diz aos iptables para aplicar a regra apenas ao segundo e seguindo fragmentos dos pacotes fragmentados. |
Opções iptables
O comando iptables suporta uma ampla gama de opções. Alguns comuns incluem:
Opção | Descrição |
---|---|
-A -Append | Adiciona uma regra ao final de uma cadeia especificada |
-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 | Insira uma regra na cadeia especificada (passada como um número, quando não há número especificado; a regra é adicionada no topo) |
-C -check | Consultas para uma correspondência de regra; requisito em uma regra especificada |
-v -verbose | Exibe mais detalhes quando usado com o parâmetro -l |
-N -NOVA CHANAIN | Adiciona uma nova cadeia definida pelo usuário |
-Chain de xelete x | Remove uma cadeia específica definida pelo usuário |
Tabelas iptables
O kernel Linux possui mesas 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.
OBSERVAÇÃO: As tabelas padrão dependerão fortemente da sua 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 filtro é uma tabela padrão que contém cadeias usadas para filtragem de pacotes de rede. Algumas das cadeias padrão desta tabela incluem:
Corrente | Descrição |
---|---|
Entrada | Iptables use esta cadeia para qualquer pacotes de entrada para o sistema, eu.e., pacotes indo para soquetes de rede locais. |
Saída | Iptables usam a cadeia de saída para pacotes gerados localmente, eu.e., pacotes saindo do sistema. |
Avançar | Esta cadeia é o que os iptables usam para pacotes roteados ou encaminhados através do sistema. |
2: As mesas de Nat
A tabela de endereços NAT ou de rede é um dispositivo de roteamento usado para modificar a fonte e os adjuntos IP de destino em um pacote de rede. O uso principal da tabela NAT está conectando duas redes em um intervalo de endereços privado com a rede pública.
O NAT foi desenvolvido para apoiar o mascaramento de endereços IP reais, permitindo que o endereço IP privado varia de alcançar a rede externa. Isso ajuda a proteger os detalhes sobre as redes internas de serem reveladas em redes públicas.
A tabela NAT é empregada quando um pacote inicia uma nova conexão.
Os iptables têm uma tabela padrão para o endereçamento do NAT. Esta tabela tem três cadeias principais:
Corrente | Descrição |
---|---|
Pré -rotulando | Permite a modificação das informações de pacotes antes de chegar na corrente de entrada usada para pacotes de entrada |
SAÍDA | Reservado para pacotes criados localmente, eu.e., Antes que o roteamento de rede ocorra |
Pós -trouting | Permite a modificação de pacotes de saída- pacotes deixando a cadeia de saída |
O diagrama abaixo mostra uma visão geral de alto nível deste processo.
Use o comando abaixo para ver suas tabelas de roteamento NAT.
iptables -t nat -n -v -l
3: As mesas de mangle
A tabela de 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 dos pacotes pode incluir a alteração de um valor TTL do pacote, a alteração do salto de rede válido para um pacote, etc.
A tabela contém as seguintes cadeias padrão:
Corrente | Descrição |
---|---|
Pré -rotulando | Reservado para pacotes de entrada |
Pós -trouting | Usado para pacotes de saída |
ENTRADA | Usado para pacotes que entram diretamente no servidor |
SAÍDA | Usado para pacotes locais |
Avançar | Reservado para pacotes roteados através do sistema |
4: as mesas cruas
O principal objetivo da mesa crua é configurar exceções para pacotes não pretendem ser tratados pelo sistema de rastreamento. A tabela bruta define uma marca NOTRACK em pacotes, provocando o recurso Conntrack para ignorar o pacote.
Conntrack é um recurso de rede de kernel Linux que permite ao kernel Linux rastrear todas as conexões de rede, permitindo que o kernel identifique pacotes que compõem um fluxo de rede.
A mesa crua tem duas correntes principais:
Corrente | Descrição |
---|---|
Pré -rotulando | Reservado para pacotes recebidos por interfaces de rede |
SAÍDA | Reservado para pacotes iniciados por processos locais |
5: A tabela de segurança
O uso primário desta tabela é definir o aprimoramento de segurança interna do mecanismo de segurança Linux (Selinux) que marca os pacotes. A marca de segurança pode ser aplicada por conexão ou pacote.
É usado para regras de controle de acesso obrigatório e é a segunda tabela acessada após a tabela de filtro. Oferece as seguintes cadeias padrão:
Corrente | Descrição |
---|---|
ENTRADA | Reservado para pacotes de entrada no sistema |
SAÍDA | Usado para pacotes criados localmente |
AVANÇAR | Usado para pacotes roteados através do sistema |
Tendo analisado os iptables padrão, vamos dar um passo adiante e discutir como trabalhar com regras iptables.
Como trabalhar com regras iptables?
As regras iptables são aplicadas em ordem crescente. Isso significa que a primeira regra em um conjunto específica é aplicada primeiro, seguida pelo segundo, depois terceiro e assim por diante, até o último.
Devido a essa função, os iptables impedem você de adicionar regras em um conjunto usando o parâmetro -a; você deve usar o -i, seguido pelo número ou esvaziando -o para adicionar ao topo da lista.
Exibindo iptables
Para ver seus iptables, use o comando iptables -l -v para ipv4 e ip6tables -l -v para ipv6.
Inserção de regras
Para inserir regras em um conjunto, você deve posicioná -las na ordem exata, respeitando as regras usadas pela mesma cadeia. Você pode visualizar a lista de suas regras iptables com o comando, conforme discutido acima:
sudo iptables -l -v
Por exemplo, para inserir uma regra que permite conexões de entrada na porta 9001 sobre o TCP, precisamos especificar o número da regra para a cadeia de entrada aderindo às regras de tráfego para a web.
sudo iptables -i entrada 1 -p tcp - -dport 9001 -m State -Estado novo -j aceita
Depois de visualizar os iptables atuais, você deve ver a nova regra no conjunto.
sudo iptables -l -v
Substituindo regras
A funcionalidade de substituição funciona de maneira 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 entrada 1 -p tcp - -dport 9001 -m State -estado novo -j rejeitar
Excluir 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 entrada 1
Na maioria dos distritos Linux, os 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 rotação.
Vamos abordar como configurar iptables:
Como configurar iptables?
Existem inúmeras maneiras de configurar regras iptables. Esta seção usa exemplos para mostrar como definir regras usando endereços IP e portas.
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 aceit -p tcp -destinação -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 -destinação -port 1001 -i wlan0
Este comando faz o oposto do comando acima, pois bloqueia todo o tráfego na porta 1001 na WLAN0.
Aqui está uma inspeção estreita do comando:
OBSERVAÇÃO: Iptables não entendem aliases da interface de rede. Assim, em um sistema com mais de uma interface virtual, você precisará definir o endereço de destino manualmente e explicitamente.
Por exemplo:
sudo iptables -a input -j drop -p tcp -destinação -port 1001 -i wlan0 -d 192.168.0.24
Endereços IP da lista de permissões e lista negra
Você pode criar regras de firewall usando iptables. Um exemplo é interromper todo o tráfego e permitir apenas o tráfego de rede de endereços IP explícitos.
Exemplo:
iptables -um estado de entrada -m -Estado estabelecido, relacionado -j aceita
iptables -a input -i lo -m comentário -comment "permitir conexões de loopback" -j aceitar
iptables -a input -p ICMP -M Comentário -Comentário "Permita que o ping funcione como esperado" -J
ACEITAR
iptables -uma entrada -s 192.168.0.1/24 -J Aceitar
iptables -uma entrada -s 192.168.0.0 -J Aceitar
IPTABLES -P DROP
iptables -p forward grow
A primeira linha define uma regra para permitir todos os endereços IP de origem nos 192.168.0.1/24 Subnet. Você também pode usar endereços IP individuais ou individuais. No comando a seguir, definimos a regra para permitir todo o tráfego conectado às conexões existentes. Nos comandos finais, estabelecemos uma política de entrada e encaminhamento para soltar tudo.
Usando iptables no ipv6
O comando iptables funciona apenas no ipv4. Para usar iptables no ipv6, você deve usar o comando ip6tables. IP6Tables usa mesas cruas, filtro, de segurança e mangle. A sintaxe geral para ip6tables é semelhante aos iptables e também suporta opções de correspondência iptables, como anexar, excluir, etc.
Considere usar as páginas manuais do IP6Tables para obter mais informações.
Exemplo de conjunto de regras iptables para segurança de rede
Criar 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: Permitir tráfego de interface de loopback e rejeitar todo o loopback vindo de outras interfaces
iptables -a input -i lo -j aceita (você também pode usar ip6tables)
iptables -uma entrada ! -eu lo -s 127.0.0.0 -J Rejeit
2: negar todos os pedidos de ping
iptables -a input -p ICMP -M State -State New --icmp -type 8 -j Rejeit
3: Permitir conexões SSH
iptables -a input -p tcp - -dport 22 -m State -Estado novo -j aceita
Estes são comandos de exemplo que você pode usar para proteger seu sistema. No entanto, a configuração dependerá fortemente do que ou de quem você deseja acessar vários serviços.
CUIDADO: Se você preferir desativar completamente o IPv6, certifique -se de descomentar a linha, pois isso diminuirá o processo de atualização:
Precedência :: ffff: 0: 0/96 100 encontrado em/etc/gai.conf .
Isso porque o gerente de pacotes apt resolve o domínio espelhado no IPv6 devido à atualização do APT-Get.
Como implantar regras iptables?
Para implantar seus iptables no Ubuntu ou em outros sistemas baseados em Debian, comece criando dois arquivos, IP4 e IP6, para seus respectivos endereços IP.
Em ambos os arquivos, adicione as regras que você deseja aplicar nas regras correspondentes de arquivos-ipv4 ao arquivo IP4 e regras IPv6 ao 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 e iptables-Persistent
O Ubuntu e as distribuições comuns baseadas no Debian vem com um pacote iptables-Persistent que permite que você aplique suas regras de firewall facilmente ao reiniciar. O pacote fornece arquivos que você pode usar para definir regras para IPv4 ou IPv6 e pode ser aplicado automaticamente após a inicialização.
Você também pode usar regras de firewall usando UFW ou GUFW. Considere o seguinte tutorial para aprender a usar o UFW.
Como instalar iptables-persistent?
Certifique-se de que você possui Iptables-Persistent instalado em seu sistema. Use DPKG para verificar se você tiver o pacote instalado.
Caso contrário, use o seguinte comando:
sudo apt-get install iptables-persistent
Você será solicitado duas vezes a salvar suas regras atuais de IPv4 e IPv6. Clique em Sim para salvar as duas regras.
Clique em Sim para salvar IPv6.
Depois que a instalação estiver concluída, verifique se você tem o subdiretório iptables, como mostrado na imagem abaixo.
Agora você pode usar as regras.v4 e regras.v6 para adicionar regras iptables, e elas serão aplicadas automaticamente por iptables-persistent. Os arquivos são arquivos de texto simples que você pode editar facilmente usando qualquer editor de texto de sua escolha.
Conclusão
Neste tutorial, cobrimos o básico dos iptables. Começando com o trabalho com iptables, comandos básicos, tabelas iptables padrão e parâmetros.
Pelo que aprendeu, você deve estar em posição de usar iptables para criar regras de firewall que ajudem a proteger seu sistema.