11 de maio de 2009

Aula de Iptables e Firewall

Por Lucas Sabino

Galera. Tive aulas de firewall e iptables tanto do meu professor quanto do meu chefe. Algumas eu já sabia, outras foram de grande utilidade, e outras tantas foram de utilidade master ultra mega supimpa!

Enfim, irei postar aqui o meu resumão sobre iptables e fw. Pode ajudar alguém a estudar ou com alguma dificuldade. Bom proveito!

--------------------------------------------------------------------------------------------------

Firewall - filtrar pacotes/conexão TCP/IP(é uma parede, um muro)

filtrar msn e outros serviços - só o proxy faz ou o fw + proxy.

o firewall não entende camada de aplicação

HUB- todo frame que ele recebe ele replica em todas as portas

Switch - ver o mac adress e encontra a porta, ou seja, ele é mais inteligente

A brigde é o avô do switch - ela faz o papel de uma ponte. Não deixa o hub fazer a burrice de ficar repiclando pacotes. bridge é um conjunto de switches.

O linux tem e não tem firewall. O fw vem instalado, porém nada instalado. O nome do bendito. Iptables. Tabelas IP.

Vamos ao que interessa!

pra listar as regras: iptables -L

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


chain - corrente
input - entrada-
output - saída
forward - encaminhar

Exemplo:
uma máquina que tem 2 redes. uma interna e uma externa. as vezes ele precisa iniciar da local e encaminhar para a rede do speedy ou do virtua, esse é o chain forward.

Criação de regra: iptables -A OUTPUT -p icmp -j DROP
A - append = inserir/criar regra
p - protocol
j - jump - pular - ele manda tudo pro /dev/null

o que a regra faz? Não pode sair icmp, ou seja, a máquina não pode pingar pro mundo a fora.


Aceitar o ping

iptables -A OUTPUT -p icmp -d ACCEPT

d- destino que pode ser um IP, um numéro de rede ou um host


Apagando a regra do iptables

iptables -D OUTPUT -p icmp -j drop
-D de Delete

Limpar o iptables
iptables -F

Trocando a política (polity) padrão
iptables -P OUTPUT/INPUT/FORWARD DROP/ACCEPT
- P --> de política, polity


Bloquear o MSN
porta do msn 1863
iptables A OUTPUT -p tcp --dport 1863 -j DROP
-p tcp - protocolo TCP
--dport - destination port - porta destino

Fazendo Log
iptables -A OUTPUT -p icmp -j LOG
LOG - /var/log/messages no debian

Iptables usa facility.kern no syslog


Agora pra entrada
bloquear tudo na entrada

iptables A INPUT -i -lo -j DROP
-A - cria regra na entrada/input
-i - interface
-lo - localhost ou loopback

Excluir regra
iptables -D INPUT -i -lo -j DROP

Iptables é um firewall STATEFULL
STATEFULL - ele guarda o estado das conexões

Para deixar o sistema bem seguro
iptables -P INPUT DROP - é mais fácil bloquear tudo... e desbloquear somente o que vc precisa

Mas, se eu tiver uma porta que precisa ser usada por exemplo a porta 80, se eu tiver um servidor apache, então..cria-se a regra aceitando a porta 80
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Forward
situação:
eth0 = 200.168.43.149 - ip internet
eth1 = 192.168.0.1 - rede local
pc do seu pai = 192.168.0.2 - rede local

estamos fazendo um forward. Ou seja, 192.168.0.2 --> 192.168.0.1 -> 200.168.43.149 --> internet

Precisamos ativar o forward
Para ativar o forward: echo 1 > /proc/sys/net/ipv4/ip_forward

Antes dele sair, precisamos mudar o endereço de origem e colocar o ip internet, o ip público. Isso se chama NAT (Network Adress Translation).

Voltando ao iptables e criando a regra
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-t de tabela/filtro
-nat - a "linguagem" nat
-A criação
POSTROUTING - Roteamente após
-o - output de interface.. saída da interface
MASQUERADE - mudança no nat, mascaramento de endereços

Porém não podemos deixar o NAT para todo mundo. Então... bloqueia tudo e desbloqueia alguns users

bloqueando o forward: iptables -P FORWARD DROP
Restringindo alguns users: iptables -A FORWARD -p tcp --dport 80 -s 192.168.0.2 -i eth1 -o eth0 -j ACCEPT

-s source.. fonte... origem do pacote
-i eth1 - entrando pela eth1
-o - saindo pela eth0

Porém o pacote não consegue voltar... temos que fazer outra regra recebendo o pacote

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED, ESTABLISHED -j ACCEPT

-i eth0 = entrando pela eth0
-o eth1 - Saindo pela eth1
-m state - m de module - tem um bd de histórico de conexões
--state RELATED, ESTABLISHED
RELATED = relacionado
ESTABLISHED - estabelecido

-----------------------------------------------------------------------------------------------

Bom é isso aí velinho (a la pernalonga!)! Espero ser util e ajudar em alguma dificuldade.

2 comentários:

Anônimo disse...

Fala aí Lucas,

Parabéns por ser tão jovem e já estar dando aulas.

Anônimo disse...

Vlw!

Tamo junto!