Tutorial do Iptables
Iptables é um firewall de linha de comando que filtra pacotes de acordo com as regras definidas. Com o Iptables, os usuários podem aceitar, recusar ou encaminhar conexões; é incrivelmente versátil e amplamente utilizado, apesar de ter sido substituído por nftables.
Depois de ler este tutorial, você entenderá as políticas do Iptables e definirá as regras do Iptables para proteger sua rede doméstica.
Nota: o comando sudo foi adicionado para leitores que precisam copiar e colar as regras mencionadas neste tutorial do iptables.
Glossário do Iptables:
TARGET: Ao usar o iptables, um destino é uma ação que você deseja que o Iptables aplique quando um pacote corresponder a uma regra.
CHAIN: Uma cadeia é uma lista de regras; as cadeias incorporadas disponíveis são: INPUT, OUTPUT, FORWARD, PREROUTING e POSTROUTING.
TABELA: Tabelas são recursos do iptables para cada propósito. Por exemplo, existe uma tabela para tarefas de roteamento e outra tabela para tarefas de filtragem; cada tabela contém cadeias de regras.
As tabelas disponíveis são filter, nat, raw, security e mangle. Cada tabela contém cadeias internas (regras). A lista a seguir mostra quais cadeias incluem cada tabela:
FILTER | INPUT | OUTPUT | FORWARD | ||
---|---|---|---|---|---|
NAT | PREROUTING | POSTROUTING | OUTPUT | ||
RAW | PREROUTING | OUTPUT | |||
MANGLE | PREROUTING | POSTROUTING | OUTPUT | INPUT | FORWARD |
SECURITY | INPUT | OUTPUT | FORWARD |
Dependendo da ação que você deseja que o iptables faça, você precisa especificar uma tabela usando a opção -t seguida do nome da tabela. Neste tutorial, a opção -t não é usada. Este tutorial se concentra nos propósitos de filtragem usando a tabela de filtros aplicada por padrão quando a opção -t não é passada. Ao ler este tutorial, você aprenderá alguns dos conceitos mencionados acima.
Como instalar:
Para instalar o Iptables no Debian e suas distribuições Linux baseadas, execute:
Antes de instalar o Iptables em distribuições Linux baseadas em RedHat, você precisa desativar o Firewalld executando:
sudo systemctl disable firewalld
sudo systemctl mask --now firewalld
Em seguida, instale o Iptables executando:
sudo systemctl start iptables
sudo systemctl start ip6tables
sudo systemctl enable iptables
sudo systemctl enable ip6tables
sudo systemctl start ip6tables
Introdução ao Iptables:
Antes de começar, verifique as regras anteriores instruindo o iptables a listar as políticas e regras existentes usando o parâmetro -L (–list).
A saída acima mostra 3 linhas: Chain INPUT, Chain FORWARD e Chain OUTPUT. Onde INPUT refere-se a políticas relacionadas ao tráfego de entrada, OUTPUT refere-se a políticas aplicadas ao tráfego de saída e FORWARD refere-se a políticas de roteamento.
A saída também mostra que não há regras definidas e todas as políticas definidas são aceitas.
Existem 3 tipos de políticas: ACEITAR, REJEITAR e DROP.
A política ACEITAR permite conexões; a política REJECT recusa conexões retornando um erro; a política DROP recusa conexões sem produzir erros. Ao usar DROP, os pacotes UDP são descartados e o comportamento será o mesmo que conectar a um porto sem serviço. Os pacotes TCP retornarão um ACK/RST, que é a mesma resposta com a qual uma porta aberta sem serviço responderá. Ao usar REJECT, um pacote ICMP retorna destino inacessível ao host de origem.
Ao lidar com o Iptables, você precisa primeiro definir as três políticas para cada cadeia; depois disso, você pode adicionar exceções e especificações. A adição de políticas fica assim:
sudo iptables -P OUTPUT <ACCEPT/DROP/REJECT>
sudo iptables -P FORWARD <ACCEPT/DROP/REJECT>
Políticas permissivas e restritivas do Iptables:
Você pode aplicar o Iptables com uma política permissiva aceitando todas as conexões de entrada, exceto aquelas que você descartar ou rejeitar especificamente. Nesse caso, todas as conexões são permitidas, a menos que você defina uma regra para recusá-las especificamente.
Pelo contrário, as políticas restritivas recusam todas as conexões, exceto aquelas que você aceita especificamente. Nesse caso, toda conexão é recusada, a menos que você defina uma regra para aceitá-la.
Aplicando uma política restritiva com Iptables:
O exemplo a seguir mostra como aplicar uma política restritiva com Iptables eliminando todo o tráfego de entrada, exceto o permitido.
Bloqueio de tráfego de entrada.
IMPORTANTE: aplicar as 3 regras a seguir pode deixar você sem conexão com a internet. Usando as regras mencionadas em “Regras de anexação do Iptables e estados do Iptables”, você adiciona as exceções necessárias para restaurar seu acesso à Internet. Você pode executar consistentemente sudo iptables -F para liberar regras.
Você pode bloquear todo o tráfego de entrada, permitindo apenas o tráfego de saída para navegar na web e para os aplicativos de que você precisa.
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
Onde :
-P=Política
sudo iptables -P INPUT DROP: instrui o iptables a recusar todo o tráfego de entrada sem responder à fonte.
sudo iptables -P OUTPUT ACCEPT: define uma política ACCEPT para o tráfego de saída.
sudo iptables -P FORWARD DROP: instrui o iptables a não executar tarefas de roteamento descartando todos os pacotes destinados a um host diferente (tentando passar pelo dispositivo com firewall) sem resposta.
O exemplo acima permite navegar na web e conexões iniciadas pelo dispositivo local (-P OUTPUT ACCEPT), mas impedirá conexões iniciadas por outro host (-P INPUT DROP) como ssh tentativas de acessar seu dispositivo não retornam mensagens de erro.
Ao habilitar o Iptables com uma política restritiva como no exemplo anterior, você precisa anexar regras para ajustar sua configuração. Por exemplo, se você mantiver a configuração mencionada acima sem adicionar uma exceção razoável para a interface de loopback (lo), alguns aplicativos podem não funcionar corretamente. Você também precisará permitir o tráfego de entrada pertencente ou relacionado a uma conexão iniciada por seu dispositivo.
Regras de anexação do Iptables e estados do Iptables
É essencial entender que o Iptables aplica regras por ordem. Quando você define uma regra após uma regra anterior, a segunda regra reescreverá a última se um pacote corresponder à mesma regra.
Eu gosto do exemplo anterior; você bloqueou todo o tráfego de entrada, você precisa anexar exceções para a interface de loopback; isso pode ser obtido adicionando o parâmetro -A (Anexar).
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
O módulo (-m) conntrack –ctstate ESTABLISHED,RELATED instrui o Iptables a confirmar se o estado da conexão é ESTABLISHED ou RELATED a uma conexão existente antes de aplicar a política de regra definida.
Existem 4 estados possíveis que o Iptables pode verificar:
Iptables state NOVO: O pacote ou tráfego que você permite ou bloqueia tenta iniciar uma nova conexão.
Iptables state ESTABLISHED: O pacote ou tráfego que você permite ou bloqueia faz parte de uma conexão estabelecida.
Estado do Iptables RELATED: o pacote ou tráfego inicia uma nova conexão, mas está relacionado a uma conexão existente.
Iptables state INVALID: O pacote ou tráfego é desconhecido sem o estado.
A primeira linha do exemplo acima instrui o Iptables a aceitar pacotes recebidos do tráfego proveniente ou relacionado a conexões iniciadas por seu dispositivo. A segunda linha instrui o Iptables a aceitar apenas tráfego de saída de conexões já estabelecidas.
Iptables Append para aceitar o tráfego de loopback e definir interfaces:
A interface de loopback é usada por programas que precisam interagir com o localhost. Se você não permitir o tráfego de loopback, alguns aplicativos podem não funcionar.
O seguinte comando permite conexões de loopback:
sudo iptables -A OUTPUT -o lo -j ACCEPT
Onde -i e -o são usados para especificar o dispositivo de rede para tráfego de entrada (-i) e tráfego de saída (-o).
Aplicando uma política permissiva com Iptables:
Você também pode definir uma política permissiva permitindo todo o tráfego, exceto o especificado descartado ou rejeitado. Você pode habilitar tudo, exceto um IP ou intervalo de IP específico, ou pode recusar pacotes com base em seus cabeçalhos, entre outras possibilidades.
O exemplo a seguir mostra como aplicar uma política permissiva permitindo todo o tráfego, exceto para um intervalo de IP bloqueado para o serviço ssh.
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
sudo iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.1.100-192.168.1.110 -j REJECT
O exemplo acima aplica uma política permissiva, mas bloqueia o acesso ssh a todos os IPs pertencentes ao intervalo 192.168.1.100 e 192.168.1.110.
Onde -p especifica o protocolo, –dport (ou –destination-port) a porta de destino (22,ssh) e o módulo iprange com o argumento –src-range (intervalo de origem) permite definir o intervalo de IP. A opção -j (–jump) instrui o iptables sobre o que fazer com o pacote; neste caso, representamos REJECT.
Bloqueando portas com Iptables
O exemplo a seguir mostra como bloquear uma porta específica para todas as conexões, a porta ssh.
Salvando alterações do Iptables
As regras do Iptables não são persistentes; após a reinicialização, as regras não serão restauradas. Para tornar suas regras persistentes, execute os seguintes comandos onde a primeira linha salva as regras no arquivo /etc/iptables.up.rules, e a segunda linha é para criar o arquivo para o iptables iniciar após a reinicialização.
nano /etc/network/if-pre-up.d/iptables
Adicione o seguinte ao arquivo e feche as alterações de salvamento (CTRL+X).
/sbin/iptables-restore < /etc/iptables.up.rules
Por fim, dê ao arquivo permissões de execução executando:
Liberando ou removendo as regras do Iptables:
Você pode remover todas as suas regras do Iptables executando o seguinte comando:
Para remover uma cadeia específica como INPUT, você pode executar:
Conclusão:
O Iptables está entre os firewalls mais sofisticados e flexíveis do mercado. Apesar de ter sido substituído, continua sendo um dos softwares defensivos e de roteamento mais difundidos.
Sua implementação pode ser rapidamente aprendida por novos usuários Linux com conhecimento básico de TCP/IP. Depois que os usuários entendem a sintaxe, definir regras torna-se uma tarefa fácil.
Existem muito mais módulos e opções adicionais que não foram abordados neste tutorial introdutório. Você pode ver mais exemplos de iptables em Iptables para iniciantes.
Espero que este tutorial do Iptables tenha sido útil. Continue seguindo o Linux Hint para mais dicas e tutoriais sobre Linux.