segunda-feira, 29 de outubro de 2012

Firewall IPTABLES - 1º Parte

Olá pessoal, está semana estava estudando o IPTABLES, comecei pela tabela FILTER, como estava documentando tudo que achava e testava, vou postar aqui, pois pode ser de ajuda para alguém.

A tabela FILTER, é a tabela mais usada, tudo que for destinado a máquina ou ao servidor utilizará as cadeias de INPUT E OUTPUT,  e tudo que não for destinado ao servidor ou máquina, utilizará a cadeia FORWARD.



Este fluxograma ilustra bem como fucniona, como podemos ver são varias cadeias onde o pacote vai passar, e precisa ser tratado, no nosso caso somente vamos utilizar a tabela filter que são os quadros azuis.





COMO VERIFICAR O CONTEÚDO DAS CADEIAS:


iptables -t filter -nL

A tabela filter é composta de 3 cadeias, que são:

INPUT
FORWARD
OUTPUT

iptables - t nat -nL

A tabela NAT é composta de 3 cadeias, que são:

PREROUTING
POSTROUTING
OUTPUT

iptables - t mangle -nL

A tabela MANGLE é composta de 5 cadeias, que são:

PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING

A leitura das regras do IPTABLES é feita de cima para baixo, então quer dizer o seguinte, se você criar uma regra que bloqueia algo, e depois uma mesma regra que da ACCEPT, a regra de bloqueio se vier antes  se aplicara, já satisfazendo, e a regra seguinte, que é a de ACCEPT, nem será lida pelo IPTABLES.

Exemplo:

iptables -t filter -A INPUT -p icmp -j DROP -> Essa regra está bloqueando o ping de qualquer origem.
iptables -t filter -A INPUT -p icmp -j ACCEPT -> Está regra está aceitando o ping de qualquer origem. Como a primeira regra adicionada está DROPANDO  o ping , a segunda regra que é igual, porém aceita, não é lida.

Bloqueando ping a um ip especifico

iptables -t filter -A INPUT -p icmp -s 192.168.0.10 -j DROP

A regra está dizendo o seguinnte:
Essa sendo adicionado (-A) uma regra na tabela filter (-t filter) na cadeia INPUT, em um protocolo icmp (-p icmp) para a origem (-s ) 192.168.0.10 e ação a ser tomada é de bloqueio (-j DROP)
Bloqueando o ping originado pela máquina com este ip ao servidor.

iptables -t filter -I INPUT -p tcp --dport 22 -d 192.168.0.1 -s 192.168.0.10 -j ACCEPT

Essa regra está aceitando o acesso SSH da máquina 192.168.0.10 ao servidor 192.168.0.1, que é a própria máquina.


-P (politica) maiúsculo vai dar permissão a cadeia toda, exemplo:
Iptables - t filter -P INPUT DROP

Salvando as regras em um arquivo.

iptables-save > firewall -> vai salvar as regras em um arquivo chamado firewall.

Para voltar as regras caso tenha adicionado regras ao arquivo, vc vai usar o comando de restore.

iptables-restore < firewall


Vamos agora a um estudo de caso

Servidor Firewall com duas placas de redes:
eth0 com ip 192.168.0.1 mascara /24
eth1 com ip 192.168.1.1 mascara /24

Outra máquina com IP da rede 192.168.0.1/24
Outra máquina com IP da rede 192.168.1.0/24
Para que essa duas redes conversem, é preciso habilitar o IP_FORWARD  entre as duas placas de rede do Servidor.
Comando:

echo 1 > /proc/sys/net/ipv4/ip_forward
Com este comando, as duas redes já podem conversar.

Se você der um ping em algumas das máquinas, na outra máquina da outra rede, vai ver que já consegue pingar.
Agora vamos criar uma regra que deixe a politica padrão da cadeia filter como DROP,  onde será bloqueado o ping, por que tudo que passa pela cadeia filter é destinado a outra rede, e não ao próprio Servidor.

iptables -t filter -P FORWARD DROP

Agora o ping vai começar dar "time out"

Vamos agora liberar o ping.

iptables -t filter -A FORWARD -p icmp -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT

-s -> origem
-d -> destino

Se você ainda está pingando, vai perceber que ainda não é possível ter resposta, por que só liberamos de um lado da rede,  a outra não consegue emitir a resposta, para realizar a conexão, e estabelecer o ping.
Então vamos fazer a mesma regra, porém invertendo as redes.

iptables -t filter -A FORWARD -p icmp -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT

A conexão e o ping vai funcionar a partir de agora.


Um comentário:

  1. Papel de parede claro e letra branca?!?! Meus parabéns!!!!!!!!!!!!!!!! Não conseguimos ler quase nada......

    ResponderExcluir