FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD - Filtragem Bsica com IPFW2 - StateFull - echo " |Default_policy_to_deny|"
 
08.07  
Inicio arrow Artigos arrow Filtragem Bsica com IPFW2 - StateFull - echo " |Default_policy_to_deny|"
Principal
Inicio
Noticias
Artigos
Regras da Lista
Assinar a Lista
Histrico da Lista
Forum
Keyserver
PC-BSD: Artigos
PC-BSD: Notcias
Galeria de Imagens
Contador Usurios FUG
FUGs Estaduais
Downloads
Enquetes
FAQ
Resumo do Site
Links
Pesquisar
Contato
Sobre a FUG-BR
RSS / Twitter
-
DOC-BR (FUG BR)
Introduo
Projeto DOC-BR
Handbook
FAQ Oficial
-
+ Noticias
Alertas de Seguranca
Alertas em Ports
BSD em Geral
DaemonNews (Ingles)
MyFreeBSD
Todas Categorias
-
Login
Nome de Usurio

Senha

Lembrar login
Esqueceu sua senha?
Sem conta? Crie uma


Filtragem Bsica com IPFW2 - StateFull - echo " |Default_policy_to_deny|" PDF Imprimir E-mail
Por Sebastiao Fidencio da Silva Pereira   
31/07/2007

   Quando pensamos em trabalhar com IPFW em modo StateFull, sabemos que o processo de filtragem feita pelo IPFW é bem criteriosa eu particulamente considero IPFW trabalhar em modo STATEFULL sendo inteligente e acho brilhante a maneira que ele gerencia as conexões geradas pelas regras automáticas(dinâmicas). Até porque esse estado análisa  camadas do protocolo TCP/IP que de fato se baseia no modelo OSI, desde o transporte até aplicação. Supomos que tenhamos um Servidor FreeBSD rodando como gateway de internet e firewall em uma empresa que tenha usuários que usam aplicações especifica tipo DPI, Sintegra, CNS, dentre outros.  O Dpto contábil usa um programa chamado DPI para transmitir informações para SEFAZ. Usa uma porta especifica. Vamos simular o processo de filtragem.

 Nosso Firewall terá 2 interface de rede

xl0 - > rede interna
Xl1 -> rede externa

           Internet

              Xl1  |-[Firewall] ->xl0 ----|

                                                   |----------------------------rede interna------------------------|

 

Supomos que minha máquina que usa DPI que está na rede interna esteja configurada com  endereço IP:

                       10.100.1.1/24 - Cliente (DPI)

                                                      

 

Processo de conexão TCP:

    No momento em que o usuário aciona do aplicativo então, a máquina Windows rodando o aplicativo win32 DPI,  cria uma porta Aleatória de onde partirá a conexão com cabeçalho TCP_SYN (Indicando inicio de uma conexão),  saindo pelo gateway padrão que de fato é o nosso firewall que está configurado na máquina do usuário que fez a riquisição,nesse momento o NAT faz a tradução do endereço mágico (10.100.1.1) para o endereço válido que está configurado na interface externa, caso você tenha uma ADSL

que esteja configurada como Bridge, então o endereço válido fornecido pelo ISP estará na interface externa, caso não esteja configurada em modo Bridge a ADSL, e sim como Router, ficará na interface Wan do Modem ADSL,  que fará a tradução dos endereços internos. Supomos que seja um link dedicado e a operadora te forneceu N endereços  e o endereço da tua interfaçe externa seja 200.252.18.10 com mask 255.255.255.192. Então o Alvo da conexão receberá os pacotes e retornará uma resposta.. Veja como fica as regras no IPFW.

#********************************************************************************# 

#O verdadeiro Shell -:) 

#!/bin/bash 

#Macros especificas

oif="xl1"

iif="xl0"

fwcmd=/bin/ipfw  

       #Liberando e negando trafego na interface virtual
       

        ${fwcmd} add 1 pass all from any to any via lo0
        ${fwcmd} add 2 deny all from any to 127.0.0.0/8
        ${fwcmd} add 3 deny ip from 127.0.0.0/8 to any

#Faz NAT(Network Address Translator- traduz qualquer coisa de qualquer origem para qualquer destino em qualquer porta e em qualquer tipo de protocolo)  na interface externa
       

      ${fwcmd} add 4 divert natd all from any to any via ${oif}

#Verifica o Estado das conexoes com a regra 40 e Mantém o estado das que está seguida da opção do IPFW keep-state, A regra 45 deixa passa o tráfego TCP das regras que detém o SETUP, permitindo que as conexões que tenham cabeçalho TCP_SYN, ou seja conexões que estão sendo iniciadas. 

        ${fwcmd} add 40 check-state
         ${fwcmd} add 45 pass tcp from any to any established

#Libera SSH    

    ${fwcmd} add 52 allow tcp from any to me dst-port 22 setup keep-state 

#Liberacao de Transmissao de DPI - Contabil

#veja que IP_CLIENTE_DPI é o ip de onde originou a conexão TCP e IP_SERVIDOR_DPI  é onde reside as informações que o cliente solicitou passando pelo NAT. e as portas 24001,21,20 são as portas que o CLIENTE_DPI conecta, ou seja o cliente quando inicia um conexão TCP ele cria uma porta de origem para atingir a porta destino que no caso é 24001,21,20, e nisso o nosso firewall se estiver politica fechada, trabalhando em modo StateFull, ele terá que conter regras que permitam passar o tráfego de saida e de entrada dos pacotes, para isso usamos o (keep-state) e o (Setup), Veja:

       Vamos ilustrar a conexão feita pelo cliente.

#Cliente : 10.100.1.1   (A porta de origem do cliente é escolhida pelo OS do cliente)

#Gateway padrão da LAN : 10.100.1.244

#IP_EXTERNO_FIREWALL: 200.252.18.10

#Gateway Padrão do FIREWALL: 200.252.18.11

#Não detalhar cada lugar onde a conexão passou, porque pode ser muitos roteadores...mas  vamos simular que saiu do cliente, passou pelo firewall, chegou no servidor alvo(SEfaz) o servidor retornou uma resposta para o firewall e o firewall devolveu ao cliente

    Cliente - 10.100.1.1:2119 --------> 10.100.1.244[firewall NAT ] 200.252.18.10:2985 ----> [200.221.2.45:24001]------->200.252.18.10:2985[firewall NAT]10.100.1.244--------------->10.100.1.1:2005 - Cliente

#Nisso o exemplo acima serve para as outras portas de destino tambem. 

        ${fwcmd} add 50001 allow log tcp from 10.100.1.1 to 200.221.2.45 dst-port 24001,21,20 in recv ${iif} setup keep-state


     

#o "in recv" diz para permitir os pacotes que estão entrando e estão sendo recebidos pela interface xl0 ->rede interna -> representada pela variavel ${iif}

 

${fwcmd} add 50002 allow log tcp from 200.221.2.45 24001,21,20 to 10.100.1.1 in recv ${oif} setup keep-state

#A regra acima garante somente o tráfego de retorno já que não tem tanta utilidade porque na regra 50001 já faz tudo. Então o firewall no momento em que o servidor 200.221.2.45 tenta responder a  conexão feita pelo cliente, o  IPFW checa se existe alguma regra que se enquadra na resposta vinda de 200.221.2.45 em direção a máquina do cliente interno , querendo entrar(in) pela interface externa(xl1) ser repassado pelo kernel pelo parâmentro ip_forwarding (gateway_enable=yes)para a interface interna(xl0) e em seguida chegar ao cliente na mesma porta em que foi originada a conexão no caso. 2119. Então nesse momente salve, salve. o keep-state e o setup colocado na regra 50001, faz com que o Mrs. IPFW entre em modo STATEFULL então é criada as famosas regras dinâmicas que mantém o tráfego de retorno até que seja finalizada a conexão pela flag FIN enviada pelo pacote TCP.

#Diz ao IPFW Fechar tudo, (Default Policy to Deny) 

${fwcmd} add 65000 drop log all from any to any via any

#Vejam o processo em que o IPFW permiti  a conexão feita pelo cliente

#********************************************************************************# 

 

#Vamos analisar os logs do firewall

#Por aqui da da pra ter uma noção

#Ipfw aceita o pacote tcp vindo de 10.100.1.1 no socket 2119 em destino a 200.221.2.45 no socket 24001 entrando via interface interna
Jul 31 12:17:04 NS1 kernel: ipfw: 50001 Accept TCP 10.100.1.1:2119 200.221.2.45:24001 in via xl0
 

#Ipfw aceita o pacote tcp vindo de 200.221.2.45 no socket 24001 em destino a 10.100.1.1 no socket 2119 entrando via interface externa

Jul 31 12:17:04 NS1 kernel: ipfw: 50001 Accept TCP 200.221.2.45:24001 10.100.1.1:2119 in via xl1
 

#Ipfw aceita o pacote tcp vindo de 200.2221.2.45 no socket 24001 em destino a 10.100.1.1 no socket 2119 saindo via interface interna dem direção a máquina cliente que originou a conexão.

Jul 31 12:17:04 NS1 kernel: ipfw: 50001 Accept TCP 200.221.2.45:24001 10.100.1.1:2119 out via xl0
  

#Vejam as brilhantes regras dinâmicas sendo criadas no momento da riquisição

digite=>  ipfw -a -d list 

00150   11    4152 (20s) STATE tcp 200.252.18.10 2985 <-> 200.221.2.45 24001
00150    3     526 (19s) STATE tcp 200.252.18.10 2303 <-> 200.221.2.45 24001
00150    3     524 (19s) STATE tcp 200.252.18.10 2304 <-> 200.221.2.45 24001

Vejam nas regras dinâmicas que, que responsabilidade de conectar no servidor para o cliente interno e do Gateway/NAT/Firewall, partindo de um endereço válido. observe a primeira regra dinâmica.

Pontos importantes a serem observados a primeira coluna indica o nº aleatório da regra dinâmica gerada pelo IPFW e a quarta coluna nos dá o tempo de vida da regra ... calculada pelo firewall de acordo com o tamanho do pacote..

Peço a todos que me ajudem a realizar uma contribuição que venha ter ultilidade para a comunidade FreeBSD.

 

se não ficou claro, as críticas são bem vindas

Sebastião Fidêncio da Silva Pereira

Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo

2007-07-31

Comentrios
Muito boa essa comunidade
Por Emerson Lopes em 17/10/2007 09:07:43
pow ae vlw, encontrei essa comu, e tirei algumas duvidas,,,,,vlw mesmo.
Por auditor em 12/03/2008 12:42:27
show =)


Comente!*
Nome:
E-mail
Homepage
Ttulo:
Comentrio:

Cdigo:* Code

ltima Atualizao ( 12/05/2008 )
 
< Anterior   Prximo >
FUG-BR - Espalhando BSD
Dicas Rpidas:

Para quem está cansado de instalar programs via linha de comando com o ports e compania, agoa exite o bpm - BSD Ports Manipulator

 






Wallpapers
Sua Opiniao
Online:
Ns temos 21 visitantes online


Devil Store - Sua loja BSD
FreeBSD Brasil LTDA

FUG-BR: Desde 1999, espalhando BSD pelo Brasil.