Introdução ao IpTables

Introdução ao IpTables

Introdução

O Iptables é o firewall base utilizado em sistemas Unix, programado em C, que permite realizar bloqueios, redirecionamentos e outras operações com os pacotes recebidos. Todo o funcionamento é pela linha de comando, e como veremos a seguir, é uma ferramenta prática, direta, simples e eficiente para proteger um sistema ou uma rede.

Lógica do Iptables

As regras no Iptables são organizadas em cima de tabelas que definem um escopo de regras, que possuem chains específicas para uso do administrador:

regras iptables

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:

iptables -L
listar regras iptables

Caso não seja especificada a tabela no comando como no exemplo acima, a saída apresentará por padrão as políticas da tabela Filter. Podemos observar que a política está definida para aceitar os pacotes mesmo que não exista match com nenhuma regra.

Para verificar as políticas aplicadas em outras tabelas, utilize : iptables -L -t (tabela), por exemplo:

iptables -L -t nat

ou

iptables -L -t mangle

CHAINS

Chains ou “Cadeias” são grupos dentro das tabelas e formam um conjunto de regras para avaliar um pacote, de maneira sequencias (de cima para baixo, listadas no terminal). O pacote passa por todas as regras e para no primeiro match, ou seja, se há um pacote com direção a porta 80 e há uma regra rejeitando esse pacote, e em seguida existir outra regra permitindo pacotes para essa porta, ele será rejeitado pela primeira regra. Se não houver correspondência do pacote para nenhuma regra dentro da cadeia, a política padrão será consultada.

Existe a possibilidade de criarmos chains, porém isso ocorre para atender necessidades muito específicas, geralmente as próprias chains já existentes por padrão são o suficiente, sendo elas:

INPUT – A regra será executada em pacotes de entrada
OUTPUT – A regra será executada para pacotes gerados por um processo local
FORWARD – A regra será executada aos pacotes de rede roteados através do servidor (inclusive entre interfaces de rede do próprio servidor)
PREROUTING – A regra será executada ao pacotes  quando eles chegam e antes do roteamento. Usado para DNAT (Destination NAT)
POSTROUTING – A regra será executada no pacotes após o roteamento. Usado para SNAT (Source NAT)

Estrutura de uma regra no Iptables

Como já dito, o iptables é gerenciado via linha de comando, e para entender melhor sobre a escrita de uma regra, observe os exemplos abaixo:

Exemplos:

Regras para que a comunicação na porta 443 seja aceita no próprio servidor em que se encontra o iptables:

iptables -A INPUT -p tcp -dport 443 -j ACCEPT

Regras para que a comunicação na porta 80 seja rejeitada no próprio servidor em que se encontra o iptables:

iptables -A INPUT -p tcp -dport 80 -j REJECT

Em ambas as regras, possuímos:

  • -A para adicionar a regra na última linha da cadeia
  • -p para especificar o protocolo
  • -dport para definir a porta de destino
  • -j para escolher a ação a ser tomada pelo firewall

Sobre a tabela FILTER

A tabela filter é utilizada para aceitar, rejeitar ou redirecionar pacotes, geralmente possui a maior quantidade de regras por se tratar da tabela em que armazena os bloqueios para redes externas, como internet.

Sobre a tabela NAT

Nessa tabela tem a função de controlar a tradução de endereços que atravessam o host linux.

Sobre a tabela Mangle

A tabela mangle contém regras de marcação de pacotes, possibilitando até mesmo aplicação de funcções referentes ao desempenho da rede e priorização de serviços.

Sobre a tabela RAW

Marca pacotes que não devem ser manipulados pelo sistema de rastreamento de conexões, basicamente é a primeira tabela na ordem de conexão de um pacote, e rejeitá-lo diretamente nessa tabela pode economizar processamento.

Exemplos de ações possíveis:

Ações ou “tarjets” definidas com o -j ou -jump na escrita da regra, são as ações a serem tomadas pelo iptables caso o match aconteça, as principais para quem está conhecendo o assunto agora, são:

REJECT - Rejeita o pacote

ACCEPT - Aceita o pacote

DROP - Descarta o pacote ( não informa a origem da ação tomada sobre a conexão )

LOG - Gera log referente ao pacote

Porém há diversas outras ações, aplicadas por cada tabela, como SNAT, DNAT, MASQUERADE na tabela NAT e MARK, TOS, TTL na tabela Mangle.

Comandos úteis

Listar todas as regras de uma tabela e numerar as linhas

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:

iptables [-t <tabela>] -D <chain> <número da linha>

Adicionar uma nova regra na última linha de uma cadeia dentro da tabela

iptables [-t <tabela>] -A <chain> <regra> -j <acao>

Por este post é isso! Agora você já sabe a lógica do iptables acerca de políticas padrão, tabelas, cadeias além de como interpretar regras!

Em caso de dúvidas, fiquem à vontade para comentar!

Não esqueçam de usar o iptables -help no terminal para dar aquela aprofundada!

Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !

Posts relacionados

Escalar privilégios com SUDO

Escalar privilégios com SUDO

O SUDO permite que um usuário execute um comando como super user (root), sendo ele um dos binários do linux que possibilita escalação de privilégio.

Ler post completo
Pilha TIG (Telegraf, InfluxDB e Grafana)

Pilha TIG (Telegraf, InfluxDB e Grafana)

Como todo bom SysAdmin você precisa de uma forma eficiente de monitorar os recursos dos seus servers, certo?

Ler post completo
Redirecionar a saída padrão e de erros

Redirecionar a saída padrão e de erros

Quando é executado um comando ou algum script no Linux é possível redirecionar a saída padrão e de erros para não ser printado em tela ou que seja direcionado à algum lugar especifico.

Ler post completo