projetos | download | linux | privacidade | contato
 
  Produtos | Documentação | Suporte | Treinamento | Conectiva | Cases | Soluções | Parcerias | Imprensa | Oportunidades
Pesquise 
português 
english 
español

SUPORTE

->Suporte Estendido
->Centros de Serviços
->Técnicos Certificados
->Formulário de Suporte
->Abrangência do Suporte
->Acionando o Suporte
->Perguntas e Respostas
->Atualizações
->Livros, Guias e Manuais
->Hardware

    19.2. O que é e como funciona um firewall (básico)?

    Objetivos desse Documento:

    O objetivo principal desse documento é tentar elucidar os conceitos envolvidos e as técnicas utilizadas na construção de um firewall.

    Conceitos Iniciais

    O firewall no linux é feito através da filtragem de pacotes. O tamanho de cada pacote é definido de acordo com as características da sua rede, geralmente nas redes ethernet o tamanho é de 1500 bytes. Então se por exemplo for feito um download de um arquivo de 1 MB, o que realmente estará acontecendo é que o seu computador receberá vários pequenos pacotes (fragmentos) de 1500 bytes e no final irá agrupá-los para formar o arquivo original.

    Um pacote é composto por duas partes:

    Header (cabeçalho): é nessa parte do pacote que o firewall vai atuar, possui informações importantes como:



    • origem do pacote

    • destino do pacote

    • entre outras

    Body (corpo): é a parte que contêm os dados propriamente ditos.

    Como explicado anteriormente é importante conhecer esses conceitos sobre pacotes pois o firewall no linux irá atuar diretamente sobre eles fazendo a filtragem dos mesmos.



    1. Ferramentas Utilizadas

      Todo o controle de firewall (filtragem dos pacotes) é feito no kernel, porém algumas ferramentas são utilizadas para controlar essas regras (controlar essas características). Nos kernels das séries 2.0.x era utilizado o ipfwadm, porém o mesmo apresentava vários problemas e falhas então uma nova versão foi implementada que se chama ipchains e é utilizada atualmente nos kernels 2.2.x.

    2. IP Masquerading

      O masquerading funciona da seguinte forma, em uma rede, o servidor possui um ip válido na internet e um ip não válido que é o ip do servidor na rede interna. As demais máquinas da rede possuem, cada uma delas, ips não válidos na internet, sendo esses ips válidos apenas dentro da rede interna. Para que as máquinas da rede possam acessar a internet através do servidor, é preciso que o mesmo tenha ativado, e esteja funcionando, o IP masquerading. Como mostra a figura abaixo o servidor Linux possui dois IP's, um deles é um IP válido na internet "200.10.15.1" e outro é um IP frio, inválido para a internet "192.168.1.1". Os clientes da rede (Máquina 1....) possuem endereços IP's 192.168.1.X formando uma rede da classe C.

      Para que as máquinas da rede interna (192.168.1.X) possam acessar a internet através do servidor é necessário que o IP Masquerading esteja configurado e ativado.

          
          
                                      _  __  _
                                     | \/  \/ |
                                    / Internet \
                                    \_/\_/\_/\_/
                                         |
                                         |
                                         |     eth0 => 200.10.15.1
                                         |   /
                                         | /
                                     __________
                                    |          |
                                    | Firewall |  <-- Servidor
                                    |  System  |
                                    |__________|
                                         |\
                                         |  \
                                         |    eth1 => 192.168.1.1
          
                                         |   
                                         |
                   _____________________________________________
          
                  |                      |                      |
                  |                      |                      |
                  |                      |                      |
                  |                      |                      |
             _____________        _____________           _____________
            |             |      |             |         |             |
            |  Máquina 1  |      |  Máquina 2  |         |  Máquina 3  |
            |_____________|      |_____________|         |_____________|
              192.168.1.2          192.168.1.3             192.168.1.4
      


      Nesse caso temos um servidor com duas placas de rede, eth0 conectado na internet, e eth1 conectado na rede interna, e mais 3 máquinas na rede conectadas ao servidor para acessar a internet. Para que as máquinas internas da rede acessem a internet precisaremos ativar o IP masquerading no servidor. A primeira providência é habilitar o repasse (forwarding) de pacotes. Vamos criar um arquivo "firewall" localizado em /etc/rc.d/init.d que será responsável pelo gerenciamento do firewall e adicionar as configurações de firewall nele para que se torne automático no caso do servidor ser reiniciado:

      Primeiramente abra, com seu editor de textos preferido, o arquivo /etc/init.d/firewall, caso ele não exista, será criado.

              [root@localhost]# mcedit /etc/rc.d/init.d/firewall
      

      Em seguida adicione as seguintes linhas ao arquivo, elas serão responsáveis para que o firewall seja habilitado no ntsysv, que será usado para ativar ou desativar a inicialização automática do firewall no boot: OBS: As linhas marcadas com "*" não devem ser incluídas no arquivo.

           #! /bin/sh
           # Inicialização do firewall - ipchains
           # 
           # description: Firewall
           # chkconfig: 2345 80 30
           # processname: firewall
           # pidfile: /var/run/firewall.pid
          
           . /etc/rc.d/init.d/functions
           . /etc/sysconfig/network
           if [ ${NETWORKING} = "no" ]
           then
                   exit 0
           fi
          
           case "$1" in
             start)
                   gprintf "Iniciando o serviço de %s: " "Firewall"
                   echo
      


      Agora adicione as seguintes linhas para que todas as regras do firewall sejam "limpas", para que, dessa forma, comecemos a partir do início a configurar nossas regras de firewall:

      # Limpando todas as regras de firewall antes de começar

      ipchains -F input ipchains -F forward ipchains -F output ipchains -P input ACCEPT ipchains -P forward ACCEPT ipchains -P output ACCEPT

      A partir de agora vamos realmente começar a configuração do firewall, inclua essas linhas para que seja ativado o IP Masquerading no servidor e, dessa forma, as máquinas internas da rede estejam aptas a acessar a internet através do servidor:

      # Ativando repasse de pacotes

           echo 1 > /proc/sys/net/ipv4/ip_forward
      

      # Carregando módulos necessários ao IP Masquerading

           /sbin/modprobe ip_masq_ftp
           /sbin/modprobe ip_masq_quake
           /sbin/modprobe ip_masq_irc
           /sbin/modprobe ip_masq_user
           /sbin/modprobe ip_masq_raudio
      


      # Ativando o IP Masquerading

           ipchains -P forward DENY
           ipchains -A forward -s 192.168.1.0/24 -j MASQ
      


      Nesse ponto as máquinas da rede já estarão aptas a acessar a internet pois o servidor já estará fazendo o mascaramento de IPs. A partir de agora vamos começar a definir as regras de entrada do firewall, são aquelas que irão filtrar tudo que entra na rede vindo da internet. Vamos começar bloqueando todo os pacotes icmp e também igmp vindos da internet, isso evitará que sejam usados alguns tipos de scanports "contra" seu sistema, scanports servem para saber quais portas estão abertas no servidor para serem usadas em possíveis "ataques":

      # Configurando regras de entrada

      # Liberando acesso total ao servidor para a rede interna

           ipchains -A input -s 192.168.1.0/24 -d 192.168.1.1 -i eth1 -j ACCEPT
      

      # Bloqueando protocolos icmp vindos da internet

           ipchains -A input -l -p icmp -d 200.10.15.1 -i eth0 -j REJECT
      

      Vamos agora bloquear o acesso externo à serviços que utilizam protocolos udp e são necessários apenas à rede interna, como não sabemos quais os serviços o servidor estará rodando, pois isso depende da vontade do administrador, vamos especificar uma faixa de portas que cobre todos eles:

      # Bloqueando acesso externo à serviços udp internos

           ipchains -A input -l -p udp -d 200.10.15.1 :1023 -i eth0 -j REJECT
      

      Daqui em diante entra a parte mais importantes do firewall, as regras que filtram os serviços de protocolo tcp, mas as regras a serem inseridas a partir deste ponto depende dos serviços que estarão rodando e, principalmente, do uso que se deseja fazer deles. Aqui apresentaremos alguns exemplos, os quais devem ser adaptados, ou mesmo excluídos, dependendo da necessidade:

      Vamos supor que existam alguns serviços rodando no servidor, a título de exemplo, vamos assumir que todos eles são _apenas_ para uso das máquinas da rede interna, caso pretenda-se que algum serviço aceite conexões vindas da internet a regra para o mesmo deve ser omitida. As regras são apresentadas na mesma ordem em que os serviços serão, agora, listados, são eles: ftp, ssh, telnet, email (SMTP), servidor DNS, servidor www, email (POP3), portmapper, servidor proxy (squid) e servidor de irc.

      # Configurando regras de filtragem de protocolo tcp

      # ftp

           ipchains -A input -l -p tcp -d 200.10.15.1 21 -i eth0 -j REJECT
      

      # ssh

           ipchains -A input -l -p tcp -d 200.10.15.1 22 -i eth0 -j REJECT
           ipchains -A input -l -p udp -d 200.10.15.1 22 -i eth0 -j REJECT
      

      # telnet

           ipchains -A input -l -p tcp -d 200.10.15.1 23 -i eth0 -j REJECT
      

      # SMTP (email)

           ipchains -A input -l -p tcp -d 200.10.15.1 25 -i eth0 -j REJECT
      

      # Servidor DNS

           ipchains -A input -l -p udp -d 200.10.15.1 53 -i eth0 -j REJECT
           ipchains -A input -l -p tcp -d 200.10.15.1 53 -i eth0 -j REJECT
      

      # Servidor www

           ipchains -A input -l -p tcp -d 200.10.15.1 80 -i eth0 -j REJECT
      

      # POP3 (email)

           ipchains -A input -l -p tcp -d 200.10.15.1 110 -i eth0 -j REJECT
      

      # Portmapper

           ipchains -A input -l -p tcp -d 200.10.15.1 111 -i eth0 -j REJECT
      

      # Servidor proxy (squid)

           ipchains -A input -l -p tcp -d 200.10.15.1 3128 -i eth0 -j REJECT
           ipchains -A input -l -p udp -d 200.10.15.1 3128 -i eth0 -j REJECT
      

      # X11 (não retire essa linha)

           ipchains -A input -l -p tcp -d 200.10.15.1 6000 -i eth0 -j REJECT
      

      # Servidor de irc

           ipchains -A input -l -p tcp -d 200.10.15.1 6667 -i eth0 -j REJECT
           ipchains -A input -l -p udp -d 200.10.15.1 6667 -i eth0 -j REJECT
      

      Agora vamos definir as regras de saída, no caso, liberando acesso total da rede para a internet:

           ipchains -P output DENY
           ipchains -A output -s 192.168.1.0/24 -d 0.0.0.0/0 -j ACCEPT
      

      Pronto, as regras de firewall foram todas definidas, lembre-se para os serviços que não se deseja filtrar apenas omita as linhas correspondentes. Agora vamos finalizar nosso arquivo para que possamos utiliza-lo, adicione as seguintes linhas ao final do arquivo:

                   ;;
             stop)
                   gprintf "Parando o serviço de %s: " "Firewall"
                   echo
                   /sbin/ipchains --flush
                   ;;
                *)
                  gprintf "Uso: firewall (start|stop)"
                  echo
                  ;;
           esac
          
           exit 0
      


      Agora salve o arquivo pressionando F2 e saia do mcedit pressionando F10.

      Presisamos agora dar permissão de execução ao arquivo:

              [root@localhost]# cds
              [root@localhost]# chmod +x firewall
      


      Agora vamos ativá-lo para inicialização automática no boot da máquina:

              [root@localhost]# ntsysv
      

      Procure por firewall, ative-o pressionando a barra de espaço, pressione TAB para selecionar OK e pressione ENTER para sair.

      Agora toda vez que a máquina for reiniciada o firewall será automaticamente configurado, para ativá-lo agora execute:

              [root@localhost]# ./firewall start
      

      Pronto seu firewall já está configurado e funcionando, mas, lembre-se:

      Os IPs utilizados nesse exemplo devem ser substituídos pelos IPs utilizados em sua rede, bem comos os devices de rede (eth0, eth1), também devem ser substituídos de acordo com sua rede.

      Esse exemplo representa a criação de _um_ arquivo, todas as informações que se deseja utilizar devem ser incluídas no mesmo arquivo, e na mesma ordem apresentada.

      Agora vamos fazer um breve comentário a respeito das máquinas clientes, que também devem ser configuradas para que acessem a internet através do servidor.

      Configuração das Estações

      A configuração das estações de trabalho para utilizar o IP Masquerading é bastante simples tanto para estações Conectiva Linux quanto para estações Windows®.

      Para configurar a estação Conectiva Linux a fim de utilizar o servidor com o objetivo de conectar-se à Internet, execute os seguintes passos:

              [root@localhost]# linuxconf
      

      Vá para Ambiente de Rede->Tarefas do cliente->Roteamento e Roteadores:

      Selecione Padrões e informe o endereço de IP de seu servidor.

      Deixe a opção Ative o roteamento desativada.

      Saia do Linuxconf e ative a configuração.

              [root@localhost]# cds
      
              [root@localhost]# ./network stop
      
              [root@localhost]# ./network start
      

      Estações Windows®

      Para configurar uma estação Windows® para utilizar o servidor a fim de conectar-se à Internet, siga os seguintes passos:



      1. Vá para Iniciar->Configurações->Painel de Controle->Rede:

      2. Clique em TCP/IP e pressione o botão Propriedades.

      3. Clique em Configuração DNS

      4. Clique em Ativar DNS e digite o nome de sua máquina no campo Host e o domínio no campo Domínio. Especifique também o DNS do provedor onde você esta se conectando.

      5. Digite o endereço de IP de seu servidor em Ordem pesquisa servidor DNS e clique em Adicionar.

      6. Digite o nome do seu domínio em Ordem pesquisa sufixo domínio e clique em Adicionar.

      7. Clique em Gateway e informe o número ip do seu servidor.

      8. Clique em Ok e saia da configuração de rede. Você terá de reinicializar o computador. Para testar a configuração, tente acessar algum endereço da Internet após ter reinicializado a máquina.