Firewall no Linux? O IPtables é a solução! (Parte II)
Todos nós temos a noção que é importante dispormos de mecanismos de segurança nos nossos PC’s. Para quem é utilizador do Linux certamente que já ouviu falar do iptables (firewall)…..mas provavelmente nunca o usou devido à sua complexidade. O iptables é uma ferramenta bastante poderosa por si só, que vem por omissão nas distribuições Linux.
No sentido de desmistificar o iptables, vamos produzir alguns artigos, com alguns exemplos práticos. Depois de no ultimo tutorial (ver aqui) termos apresentado as três tabelas predefinidas do IPtables, hoje vamos saber o que são chains (cadeias) e targets (acções).
Como referido no ultimo tutorial, no iptables as tabelas disponibilizam contextos de utilização das regras de filtragem. Cada tabela disponibiliza várias chains (cadeias), que por sua vez contêm regras. .
Chain (cadeias)
Cada chain consiste numa lista ordenada de regras, sendo que a ordem das mesmas é muito importante. Quando um pacote é submetido a uma cadeia, as suas características são comparadas uma a uma, pela ordem que foram sendo definidas. Quando as características de um pacote não encaixam em qualquer uma das regras, é aplicada então a política predefinida dessa cadeira.
Uma vez que a tabela filter é a mais utilizada, vamos analisar as chains da mesma:
Cadeias da tabela filter
- INPUT
- Filtragem de pacotes IP à entrada do sistema
- OUTPUT
- Filtragem de pacotes IP à saída do sistema
- FORWARD
- Filtragem de pacotes IP à passagem do sistema
Targets (Acções)
Um target indica a acção a aplicar ao pacote, caso a regra se verifique. Alguns exemplos de targets para a chains INPUT/OUTPUT/FORWARD
- DROP
- Descarta um pacote sem notificar o emissor
- ACCEPT
- Aceita o pacote
- REJECT
- Rejeita o pacote sem notificar o emissor
No próximo tutorial vamos apresentar alguns exemplos de aplicação. Esperamos que tenham gostado deste segundo artigo e não se esqueçam do seguinte: o iptables tem tabelas que por sua vez têm chains que por sua vez têm regras e as regras definem targets. Aguardamos o vosso feedback.
Este artigo tem mais de um ano
Não percebi nada, mas vou acompanhar para tentar perceber . Obrigado pela vossa existência.
Tens de começar a aprendizagem pela parte I. O iptables, no inicio, é algo complexo.
Gostei deste artigo sobre o Iptables, foi algo como uma introdução.
Mas seria bom demonstrar alguns exemplos e mais comandos. Demonstrar casos específicos.
Relativamente ao tema abordado, sei apenas o básico, aquilo que me foi dado a conhecer nas aulas.
Bom artigo para se começar a perceber como o trafego é tratado numa firewall Iptables.
Gostava de vissem com mais atenção o DROP/Reject visto que existem diferenças entre ambos.
Cumprimentos e Larguras
Interessante!
Fico aguardar o 3 artigo com alguns exemplos, por exemplo bloquear todas as portas expecto a porta 80 e a 22.
Tenho a dizer que estes vossos tutoriais de Iptables são muito bons para se começar a perceber esta solução de segurança que ao início parece complicada. Embora ande a ter uma cadeira na faculdade que abrange este assunto, é sempre bom rever alguns aspectos.
Continuem com o bom trabalho.
É uma ‘ferramenta’ poderosa!
Aconselho vivamente a que tenham no IPTABLES as seguintes intruções:
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -j ACCEPT -o lo
Estas instruções fazem com que o computador não fique bloqueado. Depois de terem isto, já se pode começar a “brincar” sem ter um amargo de boca. Mesmo que se cometa algum erro, a maquina continua a funcionar correctamente.
Viva José,
Na prática só estas a dar instruções para a interface loopback que aceita pacotes à entrada e à saida.
Viva Pedro,
É isso mesmo. 127.0.0.1, lo, loopback . A maioria dos processos (programas), tem que comunicar com outros processos (programas) no IP 127.0.0.1 (dentro da propria maquina) . Se estiver vedado/fechado, o computador vai parar. Inclusivamente, fica-se sem consola de sistema. Nada funciona, tudo pára. Imagine-se uma auto estrada em que fluem automoveis (vamos batizar de IP 127.0.0.1). Se não deixar-mos entrar nem sair os automoveis que circulam no IP 127.0.0.1, vai haver um engarrafamento homerico. Pára tudo. Aqueles que iam para o trabalho, páram. Aqueles que iam paca casa, páram também. Aqueles processos (programas) que esperavam receber os automoveis (pacotes com dados) do IP 127.0.0.1, bem podem ficar à espera sentados. Vão chegar no dia do São Nunca. Bem, pelo menos neste contexto é o que acontece. Tudo parado, paradinho.
Este tema é muito interessante, parabens pela iniciativa.
Só uma nota: a diferença entre o REJECT e o DROP é que o REJECT permite notificar o emissor, por exemplo:
iptables -A INPUT -p tcp –dport 23 -j REJECT –reject-with tcp-reset
E que tal usarem shorewall? Iptables tem algumas limitações em máquinas com pouca memória.
Esse não conheço. Queres fazer uma análise?
Abraço
PP
Shorewall é IPTables mas simplificado nada mais.
Por baixo está IPTables.
Quem tem limitações é a Shorewall sim nao o inverso.
Bom dia ,
Até o Pedro Pinto começar com o primeiro tutorial eu não estava a usar o iptables , e porquê , porque no meu inicio da aventura com o Linux dei-me mal , acabei por configurar tudo mal e bloqueie a maquina , desde aí que tinha quase um pavor de me meter a configurar esta potentissima ferramenta .
Com o primeiro tutorial decidi que era tempo de voltar a experimentar em uma das minhas maquinas de testes (agora já tenho duas) e voltei a encontrar a complexidade e dúvidas que sempre me assombraram , só que desta vez vou fazendo aos poucos e depois tentando verificar se cometi algum erro ou não , com este tutorial já fica explicado uma parte muito importante da configuração tinha sempre dúvidas de qual a opção a tomar .
Pedro excelente artigo e conseguiste que eu perdesse o medo de me aventurar .
Cumprimentos
Serva
Pedro,
REJECT: Rejeita o pacote sem notificar o emissor
Não será antes:
REJECT: Rejeita o pacote com notificação do emissor
Cumprimentos
Muito bom mesmo!
Vou esperar pelo próximo.
Ainda bem utilizo o windows, ainda dizem que linux é fácil.
Boas,
Novamente queiram desculpar se digo alguma alarvidade, mas no meu sistema uso a Firestarter…Estava com a ideia que não sendo uma firewall por si, funcionava configurando as ip tables que confesso são qs caracteres chineses par mim.
Será que estou minimamente seguro?
Hasta siempre.
Espero não estar a adiantar o final do artigo. Mas deixo aqui um script funcional bem simples para que quiser começar a brincar com o IPTABLES (não está bem comentado):
#!/bin/bash
IPT=”/usr/sbin/iptables”
#IPTS=”/usr/sbin/iptables-save”
#IPTR=”/usr/sbin/iptables-restore”
echo “Starting IPv4 firewall…”
$IPT -F
$IPT -X
$IPT -Z
$IPT -N TCP
$IPT -N UDP
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -m state –state INVALID -j DROP
$IPT -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p icmp -m icmp –icmp-type 8 -m state –state NEW -j ACCEPT
$IPT -A INPUT -p udp -m state –state NEW -j UDP
$IPT -A INPUT -p tcp –tcp-flags FIN,SYN,RST,ACK SYN -m state –state NEW -j TCP
$IPT -A INPUT -p udp -j REJECT –reject-with icmp-port-unreach
$IPT -A INPUT -p tcp -j REJECT –reject-with tcp-rst
$IPT -A INPUT -j REJECT –reject-with icmp-proto-unreach
$IPT -A OUTPUT -p icmp -m state –state INVALID -j DROP
# Portas TCP a abrir.
$IPT -A TCP -p tcp –dport PORTA -j ACCEPT
# Portas UDP a abrir.
$IPT -A UDP -p udp –dport PORTA -j ACCEPT
ATENÇÃO!!!
As variáveis são relativas as utiliadas no Arch Linux, em outras distros podem estar em:
/sbin ao invés de /usr/sbin