Iptables detalhado
Tentarei explicar um pouco sobre o Iptables, uma poderosa ferramenta de firewall.
Vantagens e fluxo de pacote
A partir da família 2.4.x do kernel, o controle de pacotes passou a ser implementado pelo Netfilter e através do módulo Iptables. O Ipchains era muito utilizado na família de kernel 2.2.x e não é recomendado para utilização nos kernel 2.4.x e superior.
Vamos ver algumas vantagens em utilizar o Iptables.
Filtro de pacotes por estado (Statefull): agora podemos definir regras baseadas em status de conexão: nova (NEW), estabelecida (ESTABLISHED), reincidente (RELATED) e inválida (INVALID).
Extremamente modular: possui módulos que permitem tratar a conexão por MAC, múltiplas portas, pacotes com má formação.
Fluxo de pacotes: INPUT: pacotes onde o DESTINO é o FIREWALL.
POSTROUTING: Trata roteamento de pacotes que deixam o FIREWALL.
Praticamente para todas as regras temos que definir uma TARGET.
Bloquear todo tráfego que irá passar pelo FIREWALL:
Liberar qualquer acesso partindo do FIREWALL:
Para qualquer regra teremos que adicionar uma regra ou indexar uma regra para isso usaremos os parâmetros abaixo:
Vamos ver algumas vantagens em utilizar o Iptables.
Filtro de pacotes por estado (Statefull): agora podemos definir regras baseadas em status de conexão: nova (NEW), estabelecida (ESTABLISHED), reincidente (RELATED) e inválida (INVALID).
Extremamente modular: possui módulos que permitem tratar a conexão por MAC, múltiplas portas, pacotes com má formação.
Fluxo de pacotes: INPUT: pacotes onde o DESTINO é o FIREWALL.
--------------
----------> | FIREWALL |
INPUT --------------
- OUTPUT: Pacotes onde a ORIGEM é o FIREWALL
--------------
| FIREWALL | ----------->
-------------- OUTPUT
FORWARD: Pacotes de origem 0/0 com destino 0/0 que passam pelo FIREWALL.
--------------
| FIREWALL |
--------------
---------> FORWARD --------->
PREROUTING: Trata roteamento de pacotes que chegam no FIREWALL.
POSTROUTING: Trata roteamento de pacotes que deixam o FIREWALL.
Praticamente para todas as regras temos que definir uma TARGET.
- ACCEPT: Aceita o pacote
- DROP: Bloqueia um pacote sem resposta
- REJECT: Bloqueia um pacote com resposta
- LOG: Gera log de acordo com a regra definida
- SNAT, DNAT, MASQUERADE: Realiza NAT sobre os pacotes
Política de segurança
Política de segurança é configurada através do parâmetro "-P". Vamos bloquear qualquer tráfego com destino ao FIREWALL:
iptables -P INPUT DROP
Bloquear todo tráfego que irá passar pelo FIREWALL:
iptables -P FORWARD DROP
Liberar qualquer acesso partindo do FIREWALL:
iptables -P OUTPUT ACCEPT
Para qualquer regra teremos que adicionar uma regra ou indexar uma regra para isso usaremos os parâmetros abaixo:
- APPEND (-A): A regra será adicionada uma após a outra.
- INSERT (-I): Regra será adicionada acima de todas as regras APPEND.
Related é melhor traduzido para "relacionada", ou seja, conexões que possuem uma relação entre si, mas que não são a mesma.
Quando tu envia o primeiro pacote de SYN TCP, por exemplo, os demais pacotes irão casar com ESTABLISHED pois a conexão está estabelecida. Mesmo UDP não tendo conceito de conexão, ESTABLISHED se aplica também a UDP e até mesmo ICMP (uma resposta de um ping casaria na regra ESTABLISHED).
O que seria então o RELATED?
São outros pacotes que não são da mesma conexão, mas se relacionam com ela.
Exemplo: se tu envia um SYN para a porta 80 e a porta 80 está fechada por um firewall com REJECT, tu vai receber um ICMP tipo 3, código 3 (porta inacessível). Este ICMP casaria com o RELATED pois o iptables entende que diz respeito aquele SYN que passou.