IPtables - Trabalhando com Módulos

O objetivo do artigo, é mostrar como expandir o uso do IPtables usando módulos, para construir um Firewall bem elaborado e que
atenda às suas necessidades.

[ Hits: 90.748 ]

Por: Perfil removido em 02/03/2012


Trabalhando com os Módulos State e Connlimit



Módulo State

O módulo State é usado para analisar o estado dos pacotes de uma conexão. Com ele, podemos aplicar regras para proibir tráfego de dados inválidos ou permitir novas conexões, e isto é feito analisando os pacotes do trafego junto às flags TCP como SYN, ACK, FYN e etc.

Pode-se utilizar mais de um estado para análise na mesma regra separando os mesmo por vírgula. Depois de especificar a chamada do módulo "- m", devemos especificar assim como os outros, o nome do módulo que será usado "state".

As opções estão descritas abaixo:
  • NEW : Opção usada para analise de conexões que estão sendo iniciadas (novas conexões).
  • ESTABLISHED : Opção usada para análise de conexões já estabelecidas, pacotes de respostas.
  • RELATED : Opção usada para análise de pacotes de conexões existentes, como por exemplo, mensagem de erro.
  • INVALID : Está opção é utilizada quando queremos verificar quais pacotes são inválidos, ou seja, pacotes que não têm identificação com nenhuma conexão.

- Colocando em Prática

Regras aplicadas para exemplificar o uso do módulo, nestas regras, estou indicando que a interface eth0 está recebendo endereço da internet e que o endereço da rede interna é: 192.168.20.0/24.

# iptables -A OUTPUT -o eth0 -m state --state NEW -j ACCEPT
# iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "[pacotes invalidos]"
# iptables -A INPUT -m state --state INVALID -j DROP
# iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -i eth0 -m state --state NEW -j DROP


- Explicação das regras

I- A Primeira regra: Todo tráfego que está saindo pela interface eth0 que está conecta à internet, aceita novas conexões.

II- A Segunda regra: Estou registrando todos pacotes inválidos que passam pelas interfaces de rede, pois na regra não especifiquei a interface usada na regra, então vale para todas.

Caso queira verificar os Logs com mais clareza, poderá usar o artigo: FwLogWatch - Analisando Registros do IPtables

III- A Terceira regra: Completa a segunda bloqueando todo tráfego, que de conexões que tenham pacotes inválidos ou não identificados.

IV- A Quarta regra: Aceita todos os pacotes que entram pela interface eth0 (internet), porém, que já façam parte de uma conexão já iniciada.

V- Última regra: Bloqueia todo tráfego que entra pela interface eth0, que tente fazer novas conexões com a rede interna.

Estas regras acima, são muito boas para bloquear tráfego duvidoso. Dependendo da sua necessidade, as mesmas poderiam ser usadas em servidor que compartilha a conexão com a internet, mas, caso queria usar as mesmas no seu Firewall, veja bem onde coloca, pois algumas regras acima, podem fazer com outras regras não sejam executadas com sucesso.

Módulo Connlimit

Este módulo é muito interessante, pois o mesmo pode contar a quantidade de conexões e limitar o acesso depois que o limite é excedido para conexões paralelas.

As opções usadas pelo Módulo Connlimit são duas:
  • --connlimit-above : Está opção é usada para limitar a quantidade de conexões simultâneas.
  • --connlimit-mask : Opção usada para identificar uma rede.

- Colocando em Prática

Regras aplicadas com o Módulo Connlimit:

# iptables -A INPUT -tcp --dport 80 --syn -m connlimit --connlimit-above 30 -j DROP
# iptables -A OUTPUT -p tcp --sport 21 -m connlimit --connllimit-above 10 -j DROP


- Explicação das regras:

I- Primeira regra: É aplicada a um servidor WEB, fazendo com que a mesma limite em 30 conexões simultâneas, a partir que o limite for excedido, ou seja, já tiver 30 conexões estabelecidas, a 31 por diante será bloqueada.

II- Segunda regra: É aplicada a um servidor FTP, após o número de conexões simultâneas terem excedidos o limite de 10, a próxima será bloqueada.

Para a próxima regra, tenho o seguinte cenário para explicar as regras aplicadas:
  • Rede A : 192.168.10.0/24
  • Interface da rede interna: eth0
  • Interface da rede externa: eth1
  • Rede B : 192.168.20.0/24

Onde Micros da rede B, acessam o Micro 192.168.10.248 da rede A, via SSH.

Regras executadas:

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to 192.168.10.248:22
# iptables -A FORWARD -p tcp -o eth1 -d 192.168.10.248 --dport 22 -m connlimit --connlimit-above 2 -j DROP


- Explicação sobre as regras:

Nas regras acima, primeiro é feito um redirecionamento de pacotes da rede B para rede A, os pacotes que chegam à porta 22 do Host da rede A que faz o redirecionamento, são encaminhados para a porta 22 do Host de destino 192.168.10.248 da rede A.

Na segunda regra, é feito o limite de duas conexões simultâneas para o Host de destino da rede A, assim, quando já estiver duas conexões feitas, a terceira será bloqueada, pois o limite de conexões simultâneas foi excedido.
Página anterior     Próxima página

Páginas do artigo
   1. Introdução e Definição
   2. Trabalhando com os Módulos MAC e Owner
   3. Trabalhando com os Módulos String e IPrange
   4. Trabalhando com os Módulos Quota e Multiport
   5. Trabalhando com os Módulos State e Connlimit
   6. Trabalhando com os Módulos Time e Limit
   7. Trabalhando com o Módulo Recent
   8. Trabalhando com o Módulo Recent - Parte II
Outros artigos deste autor

Montando uma rede GSM

Instalando pacotes no Ubuntu e distros Debian-like

Bootsplash no Slackware - HowTo

Dynamic libraries com libtool

Configurando Velox no Kurumin

Leitura recomendada

Port Forward mais completo: caçando o fantasma da rede interna

Firewall Linux - Roteamento avançado usando iproute2 e iptables (load balance)

Gerenciando regras de Iptables com Firewall Builder (parte 2)

Instalação do Layer7 no Debian Etch

Como bloquear o Ultrasurf - solução definitiva (iptables + Fail2ban)

  
Comentários
[1] Comentário enviado por joão vous em 02/03/2012 - 20:28h

ipad 2 ele é bloqueado pela apple só que desbloquei usando o cydi
ele ficou meio lento
depois usei um emulador do windows para camuflar a rede do sistema!!!

[2] Comentário enviado por removido em 02/03/2012 - 20:36h

olá amigo joão vous,

Não entendi nada....

[3] Comentário enviado por rodrigom em 03/03/2012 - 01:38h

Boa noite;

Meu amigo, gostei muito do artigo muito bom mesmo.

Obrigado pelo conhecimento passado.

[4] Comentário enviado por hardmaster2009 em 04/03/2012 - 18:03h

Que topido rico !!! que coisa mai linda !! muito bom mesmo !!

[5] Comentário enviado por silent-man em 05/03/2012 - 08:50h

acho que o comentário da seguinte regra está errado

# iptables -A INPUT -p tcp -m string --algo bm --string "orkut" -j DROP

[]s

[6] Comentário enviado por removido em 05/03/2012 - 14:29h

Olá,

Obrigado pelos comentários

Obrigado pela observação amigo silent-man, já foi feita a correção.

abraço..

[7] Comentário enviado por xjc em 05/03/2012 - 15:16h

cara massa esse seu post muito útil vou salvar para posterior consultas. abraços

[8] Comentário enviado por ricardoolonca em 06/03/2012 - 12:17h

Parabéns, excelente artigo!

Estou escrevendo uma série de artigos sobre rede e vou começar a falar de firewall e iptables. Estava a procura de uma documentação sobre esse módulos e o teu artigo veio em ótima hora. Peço tua permissão para citá-lo em meu artigo.

Nota 10 e favorito.

[9] Comentário enviado por removido em 06/03/2012 - 12:28h

Permissão concedida,

é da série de artigo sobre TCP/IP ?

abraço..

[10] Comentário enviado por ricardoolonca em 06/03/2012 - 14:06h

Isso mesmo.

Acabei de fazer um sobre portas TCP/UDP. Nele comento sobre o netstat, nmap, telnet, essas coisas. Achei conveniente explicar esses conceitos antes de falar de firewall. Esse artigo está para ser publicado.

O próximo da série vai ser sobre firewall, mostrando conceitos e parâmetros do iptables. Um dos tópicos seria sobre módulos, mas você já me adiantou um lado.

Obrigado.

[11] Comentário enviado por rodrigom em 06/03/2012 - 16:41h



"maionesebr", quais são seus artigos pode passar os links..



Muito obrigado.

[12] Comentário enviado por ricardoolonca em 09/03/2012 - 13:55h

rodrigom,

segue o link dos meus artigos. (tem um que ainda não foi publicado).

http://www.vivaolinux.com.br/artigos/userview.php?login=maionesebr

[13] Comentário enviado por rodrigom em 09/03/2012 - 17:22h

"maionesebr", já havia lido seus artigos são muito bons, é sempre bom rever..


Abraço.

[14] Comentário enviado por phrich em 29/06/2012 - 12:36h

Bom artigo!

[15] Comentário enviado por marcelohcm em 23/08/2012 - 08:37h

como faço pra bloquear o facebook numa rede?
no caso tenho duas redes, uma liberada e a outra bloqueada...

[16] Comentário enviado por removido em 23/08/2012 - 09:25h

Recomendo para isso o squid. Mas se quer bloquear o facebook usando o IPtables pode dá uma pouquinho mais de trabalho, veja os dois links abaixo, sendo que o primeiro é uma dica aqui da VOL e o segundo é uma resposta de um tópico aqui mesmo da VOL, realmente funciona em ambas dicas:

http://www.vivaolinux.com.br/dica/Bloquear-Facebook-e-Youtube-por-HTTPS/

ou assim:

http://www.vivaolinux.com.br/topico/netfilter-iptables/BLOQUEAR-FACE?pagina=5&num_por_pagina=12

Nesse ultimo link leia a resposta número 50.

[17] Comentário enviado por sthenno em 07/06/2013 - 13:19h

muito útil mesmo o módulo state.
Posso iniciar um download e bloquear depois qualquer tentativa de início de outro sem interromper o primeiro download corrente usando a opção NEW.

[18] Comentário enviado por patrickpfp em 19/06/2013 - 11:25h

Ótimo tutorial!!!

Mas quando eu coloco essa regra:

iptables -A FORWARD -m string --algo bm --string "facebook" -m time --timestart 12:00 --timestop 13:00 -j ACCEPT


esse erro me retorna:

No chain/target/match by that name.



Poderia me ajudar?

vlw



[19] Comentário enviado por removido em 19/06/2013 - 17:07h


[18] Comentário enviado por patrickpfp em 19/06/2013 - 11:25h:

Ótimo tutorial!!!

Mas quando eu coloco essa regra:

iptables -A FORWARD -m string --algo bm --string "facebook" -m time --timestart 12:00 --timestop 13:00 -j ACCEPT

esse erro me retorna:

No chain/target/match by that name.


Poderia me ajudar?

vlw




Qual é a versão e a distro que está usando para aplicar essas regras ? pois apliquei as regras no debian e rodou.

[20] Comentário enviado por px em 10/10/2013 - 16:53h

Esse seu artigo é uma verdadeira enciclopédia sobre iptables! excelente mesmo, nota 10!

[21] Comentário enviado por ftubao em 06/03/2015 - 22:12h

Boa noite a todos !!!!

Eu estava muito feliz por achar este artigo pois na minha cabeça eu ia
resolver meu problema com o facebook aqui no trabalho, para implantar
( não saco muito de Linux ) mandei um e-mail para um " amigo" ultratop em
informática para saber sobre como eu ia colocar o algoritmo, mas, ele me
falou o seguinte;

" Cara, isso provavelmente não vai funcionar. Você nunca vai conseguir
fazer o "match" da srting porque a comunicação se dá via HTTPS. É
impossível "

Pergunto, é isso mesmo ?

[22] Comentário enviado por wagnerfs em 25/03/2015 - 00:28h

Que artigo maravilhoso! Bem explicado e elucidativo. Parabéns por compartilhar o conhecimento.

_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts