  Linux IPCHAINS-HOWTO
  Paul Russell, ipchains@rustcorp.com
  v1.0.7, 12 March 1999
  Traduo por Gleydson Mazioli da Silva, gleydson@linuxbr.com.br

  Este documento descreve como obter, instalar e configurar o avanado
  programa IP chains firewall para Linux, e muitas idias de como
  voc pode usa-lo.
  ______________________________________________________________________

  Tabela de contedo
























































  1. Introduo

     1.1 O que?
     1.2 Porque?
     1.3 Como?
     1.4 Onde?

  2. Bsico sobre Filtragem de pacotes

     2.1 O que?
     2.2 Porque?
     2.3 Como?
        2.3.1 Um Kernel com filtragem de pacotes
        2.3.2 ipchains
        2.3.3 Fazendo Regras Permanentes

  3. Estou confuso!  Roteamento, masquerading, portforwarding, ipautofw...

     3.1 Guia de trs linhas para Masquerading
     3.2 Promoo Gratuita: Regras Assista o Guarda
     3.3 Configurao de Firewalls simples
        3.3.1 Rede Privada: Proxies Tradicionais
        3.3.2 Rede Privada: Proxies Transparentes
        3.3.3 Rede Privada: Masquerading
        3.3.4 Rede Publica
        3.3.5 Servios Internos Limitados
     3.4 Mais informaes sobre Masquerading: David Ranch escreveu um novo HOWTO excelente sobre Masquerading, que foi um largo sobreposto deste howto.  Voc pode atualmente encontrar este HOWTO em

  4. IP Firewalling Chains

     4.1 Como pacotes atravessam os filtros
        4.1.1 Usando ipchains
        4.1.2 Operaes em uma Regra Simples
        4.1.3 Especificao de Filtragem
           4.1.3.1 Especificando Enderecos de Origem e Destino
           4.1.3.2 Especificando Inverso
           4.1.3.3 Especificando o Protocolo
              4.1.3.3.1 Especificando Portas UDP e TCP
              4.1.3.3.2 Especificando tipo de ICMP e Codigo
           4.1.3.4 Especificando a Interface
           4.1.3.5 Especificando somente pacotes TCP SYN
           4.1.3.6 Direcionando Fragmentos
         4.1.4 Efeitos do Lado de Filtragem
           4.1.4.1 Especificando um Alvo
           4.1.4.2 Registrando Pacotes
           4.1.4.3 Manipulando o tipo de servio
           4.1.4.4 Marcando um Pacotes
           4.1.4.5 Operaes em todo o chain
           4.1.4.6 Criando uma novo chain
           4.1.4.7 Deletando um chain
           4.1.4.8 Liberando um chain
           4.1.4.9 Listando um chain
           4.1.4.10 Resetando contadores (Zeroing) 
           4.1.4.11 Configurando o Policiamento
        4.1.5 Operaes em Masquerading
        4.1.6 Checando um Pacote Packet
        4.1.7 Multiplas Regras em uma and Watching What Happens
     4.2 Exemplos teis
        4.2.1 Usando ipchains-save
        4.2.2 Usando ipchains-restore

  5. Outros.

     5.1 Como organizar suas regras de Firewall
     5.2 O que no descartar no Filtro
        5.2.1 Pacotes ICMP
        5.2.2 Conexes TCP para DNS (nameservers)
        5.2.3 Pesadelos FTP 
     5.3 Descartando o Ping of Death
     5.4 Descartando Teardrop and Bonk
     5.5 Descartando Bombas de Fragmento (Fragment Bombs)
     5.6 Modificando Regras do Firewall
     5.7 Como configurar a proteo de IP Spoof?
     5.8 Projetos Avanados
        5.8.1 SPF: Stateful Packet Filtering
        5.8.2 Michael Hasenstein's ftp-data hack
     5.9 Avanos futuros

  6. Problemas Comuns

     6.1 ipchains -L Congela!
     6.2 Masquerading/Forwarding no funciona!
     6.3 -j REDIR no funciona!
     6.4 O uso de Coringas em Interfaces no funciona!
     6.5 TOS no funciona!
     6.6 ipautofw e ipportfw no funcionam!
     6.7 xosview esta com problema!
     6.8 Segmentation Fault com `-j REDIRECT'!
     6.9 Eu no posso configurar Timeouts em Masquerading!
     6.10 Eu desejo fazer Firewall em IPX!

  7. Um Exemplo Srio.

     7.1 O Arranjo
     7.2 Metas
     7.3 Antes da Filtragem de Pacotes
     7.4 Filtragem de Pacotes para Through Packets
        7.4.1 Set Up Jumps From forward Chain
        7.4.2 Define a icmp-acc Chain
        7.4.3 Bom (Interno) para DMZ (Servidores)
        7.4.4 Ruins (externos) para DMZ (servidores).
        7.4.5 Bom (internos) para Ruins (externos).
        7.4.6 DMZ para Good (internos).
        7.4.7 DMZ para Ruins (externos).
        7.4.8 Ruins (externos) para Bom (internos).
        7.4.9 Filtragem de Pacotes para sua prpria Mquina Linux
           7.4.9.1 M Interfaces (externas).
           7.4.9.2 Interface DMZ.
           7.4.9.3 Boa interface (interna).
     7.5 Finalmente

  8. Apndice: Diferenas entre ipchains e ipfwadm.

     8.1 Tabela de Referncia Rpida.
     8.2 Exemplos de comandos ipfwadm traduzidos

  9. Apndice: Usando o script ipfwadm-wrapper.

  10. Apndice: Agradecimentos.



  ______________________________________________________________________

  1.  Introduo

  Este  o Linux IPCHAINS-HOWTO; Veja "Onde?" para o ver site principal,
  que contm a ltima cpia. Voc tambm deve ler o Linux NET-3-HOWTO.
  O IP-Masquerading HOWTO, o PPP-HOWTO, o Ethernet-HOWTO e o Firewall
  HOWTO que podem ser uma leitura interessante. (Ento denovo a FAQ
  alt.fan.bigfoot).

  Se a filtragem de pacotes  passado para voc, leia a seo "Porque?",
  Seo "Como?" e verifique os ttulos na seo "IP Firewalling Chains".

  Se voc esta convertendo atravs do ipfwadm, leia a secao "Introduo",
  Seo "Como?", e os Apndices da seo "Diferenas entre ipchains
  e ipfwadm" e a seo "Usando o script ipfwadm-wrapper".


  1.1.  O que?

  O ipchains do Linux  uma regravao do codigo de firewall IPv4 do
  linux (que foi originalmente roubado do BSD) e uma regravao do
  ipfwadm, que foi uma regravao do ipfw dos BSD's, eu acho.  requerido
  para administrar os filtros de pacotes IP nos kernels do linux
  2.1.102 e superiores.


  1.2.  Por que?

  O antigo codigo do firewall do Linux no negociava com fragmentos,
  tinha contadores de 32 bits (no Intel no mnimo), no permitia
  especificao de outros protocolos seno TCP, UDP ou ICMS, no
  faziam grandes alteraes dinmicamente, no especificava regras
  contrrias, possuia alguns truques, e  dificil de gerenciar (
  podendo causar erros do usurio).


  1.3.  Como?

  Atualmente o cdigo est no kernel em desenvolvimento do 2.1.192.
  Para as sries do kernel 2.0, voc precisar fazer o download de um
  patch da pgina Internet. Se seu kernel 2.0  mais recente que o patch
  fornecido, o patch antigo serOK; esta parte dos kernels 2.0 
  razoavelmente estvel (eg. o patch do kernel 2.0.34 funciona perfeitamente
  com o kernel 2.0.35). Desde ento o patch 2.0  incompatvel com patches do
  ipportfw e ipautofw, eu no recomendo aplica-los a no ser que voc
  ralmente necessita da funcionalidade que o ipchains oferece.


  1.4.  Onde?

  A pgina oficial  The Linux IP Firewall Chains Page
  <http://www.rustcorp.com/linux/ipchains>

  L existe uma lista de discusso para relatar bugs, discusses,
  desenvolvimento e uso. Entre na lista de discusso enviando uma
  mensagem contendo a palavra "subscribe" para ipchains-request em
  rustcorp.com. Para enviar E-Mails para a lista use "ipchains" ao
  invs de "ipchains-request".


  2.  Bsico sobre a filtragem de pacotes

  2.1.  O que?

  Todo o trfego da rede  enviado em forma de pacotes. Por exemplo,
  copiando este pacote (digamos de 50k) pode fazer voc receber
  36 ou assim pacotes de 1460 bytes em cada um, (puxando nmeros
  ao acaso).


  O inicio de cada pacote diz onde ele esta indo, de onde vem,
  o tipo do pacote, e outros detalhes administrativos. Isto
  inicia o pacote e  chamado de cabealho (head). O resto do pacote
  que contm o dado atual sendo transmitido,  usualmente chamado
  de corpo (body).


  Alguns protocolos, como TCP, que  usado para o trafego na web, mail,
  e logins remotos, usam o conceito de "conexo" -- antes de qualquer
  pacote com os dados atuais serem enviados, vrios pacotes de
  configurao (com cabealhos especiais) so trocados dizendo "Eu
  desejo conectar", "OK" e "Obrigado". Ento os pacotes normais so
  trocados.

 
  Uma filtragem de pacotes  uma pea de software que olha no cabealho
  do pacote quando eles passam, e decide o destino de todo o pacote.
  Ele pode decidir negar o pacote (DENY - ie. descartar o pacote como se ele
  nunca tivesse o recebido), aceita o pacote (ACCEPT - ie. deixar o pacote seguir
  adiante), ou rejeitar o pacote (REJECT - como negar, mas avisa a origem do pacote
  sobre o acontecido).


  No Linux, a filtragem de pacotes  embutida no kernel, e aqui
  esto algumas coisas que ns podemos fazer com os pacotes, mas o
  principio geral  de olhar o cabealho dos pacotes e decidindo seu
  destino.


  2.2.  Por que?

  Controle. Segurana.  Vigilncia.



     Controle:
        quando voc est usando um computador linux para conectar sua
        rede interna a outra rede (digo, a Internet) voc tem a
        oportunidade de permitir certos tipos de trfego, e desativar
        outros. Por exemplo, o cabealho do pacote contm o endereo de
        destino do pacote, assim voc pode prevenir pacote de irem para
        certas partes de fora da rede. Como outro exemplo, eu uso o
        Netscape para acessar os arquivos Dilbert. L esto anncios
        da pgina doubleclick.net, e o Netscape desperdia partes
        do meu tempo copiando-a. Dizendo para o filtro de pacotes
        no permitir qualquer pacotes para ou de o endereo conhecido
        por doubleclick.net resolve este problema (l esto meios
        melhores de se fazer isto).

                                  
     Segurana:
        quando um computador linux  a nica coisa entre o caos da
        Internet e sua bonita e organizada rede,  maravilhoso
        conhecer como voc pode restringir o que vem batendo em sua
        porta. Por exemplo, voc pode permitir ir para fora de sua
        rede, mas voc pode estar preocupado com os conhecidos
        "Ping of Death" (ping da morte) que vem de computadores
        maliciosos de fora. Como outro exemplo, voc pode no desejar
        que pessoas de fora TELNETiando seu computador linux, embora
        mesmo que todas suas contas tenham senhas; talvez voc deseja
        (como muitas pessoas) ser um observador na Internet, e no um
        servidor (legando ou caso contrrio) -- simplesmente no deixe
        ningum conectar em seu computador, tendo filtros de pacotes
        rejeitando pacotes de entrada usado para iniciar conexes.

                                                                  
     Vigilncia:
        muitas vezes uma mquina mal configurada na rede local pode
        decidir enviar pacotes para fora da rede.  bom dizer
        ao filtro de pacotes para avisa-lo se alguma coisa de
        anormal ocorre; talvez voc pode fazer alguma coisa sobre
        isto, ou talvez voc est simplesmente curioso por natureza.

  2.3.  Como?

  2.3.1.  Um kernel com filtragem de pacotes


  Voc precisar de um kernel que tem o novo IP firewall chains nele.
  Voc pode ver ser o kernel que est executando tem isto instalado
  verificando pelo arquivo "/proc/net/ip_FWchains". Se ele existe,
  seu kernel tem o suporte.

  Caso contrrio, voc precisar compilar um kernel com o IP firewall
  chains. Primeiro copie o cdigo fonte do kernel que deseja. Se possui
  um kernel nmerado 2.1.102 ou maior, voc no precisar aplicar o
  patch (est na verso principal do kernel agora). Caso contrrio,
  aplique o patch da pgina web listada acima, e ajuste a configurao
  como detalhado abaixo. Se voc no sabe como fazer isto, sem pnico --
  leia o Kernel-HOWTO.


  As opes de configurao que precisa configurar para os kernels
  da srie 2.0 so:
                   
  ______________________________________________________________________
          CONFIG_EXPERIMENTAL=y
          CONFIG_FIREWALL=y
          CONFIG_IP_FIREWALL=y
          CONFIG_IP_FIREWALL_CHAINS=y
  ______________________________________________________________________



  Para os kernels da srie 2.1 ou 2.2:

  ______________________________________________________________________
          CONFIG_FIREWALL=y
          CONFIG_IP_FIREWALL=y
  ______________________________________________________________________




  A ferramenta ipchains fala com o kernel e diz a ele quais pacotes
  filtrar. A no ser que voc seja um programador, ou curioso demais,
  assim voc controlar a filtragem de pacotes.


  2.3.2.  ipchains

  A ferramenta ipchains insere ou deleta regras da seo de filtragem
  de pacotes do kernel. Isto quer dizer que qualquer coisa que voc
  configurar, ser perdida na reinicializao; veja "Fazendo Regras
  Permanentes" para como fazer as regras serem restauradas quando
  o Linux  iniciado.

  ipchains substitui ipfwadm, que foi usado pelo antigo cdigo
  de firewall de IP. H um conjunto de scripts teis disponveis
  no site ftp do ipchains:

  ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz
  <ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz>

  Este contm um script shell chamado ipfwadm-wrapper que permite 
  fazer a filtragem de pacotes como fez antes. Voc provavelmente no
  deve usar este script a no ser se deseje fazer um mtodo rpido
  de upgrade em um sistema que usa o ipfwadm (ele  lento, no checa
  argumentos, etc).
  Neste caso, voc no precisa muito deste HOWTO.

  Veja Apndice "Diferenas entre ipchains e ipfwadm" e Apndice
  "Usando o script ipfwadm-wrapper" para um assunto mais detalhado
  sobre ipfwadm.


  2.3.3.  Fazendo regras permanentes

  Sua configurao atual do firewall  armazenada no kernel, e assim
  ser perdida na reinicialziao. Eu recomendo usar os scripts
  "ipchains-save" e "ipchains-restore" para fazer estas regras
  permanentes. Para fazer isto, configure suas regras, ento execute
  (como root):



       # ipchains-save > /etc/ipchains.rules
       #




  Crie um script parecido com o seguinte:



       #! /bin/sh
       # Script para controlar a filtragem de pacotes.

       # Se no existir regras, no faz nada.
       [ -f /etc/ipchains.rules ] || exit 0

       case "$1" in
           start)
               echo -n "Ativando a filtragem de pacotes:"
               /sbin/ipchains-restore < /etc/ipchains.rules || exit 1
               echo 1 > /proc/sys/net/ipv4/ip_forward
               echo "."
               ;;
           stop)
               echo -n "Desativando a filtragem de pacotes:"
               echo 0 > /proc/sys/net/ipv4/ip_forward
               /sbin/ipchains -X
               /sbin/ipchains -F
               /sbin/ipchains -P input ACCEPT
               /sbin/ipchains -P output ACCEPT
               /sbin/ipchains -P forward ACCEPT
               echo "."
               ;;
           *)
               echo "Use: /etc/init.d/packetfilter {start|stop}"
               exit 1
               ;;
       esac

       exit 0




  Tenha certeza que isto est antes no processo de inicializao.
  No meu caso (Debian 2.1), eu fiz um link simblico chamado 'S39packetfilter'
  em meu diretrio "/etc/rcS.d" (isto ser executado antes de S40network).


  3.  Estou confuso!  Roteamento, masquerading, portforwarding, ipautofw...

  Este HOWTO  sobre filtragem de pacotes. Isto quer dizer decidindo
  que pacote ter permisso de passar ou no. No entanto, o Linux est
  sendo um parque de diverses para hackers, voc provavelmente desejar
  mais do que isso.

  Um problema  que a mesma ferramenta ("ipchains")  usada para controlar
  tanto o masquerading e transparend proxy, embora estejam nacionalmente
  separados da filtragem de pacotes (a implementao atual do Linux
  obscurece estes junto no naturalmente, deixando a impresso
  que eles foram descontinuados).


  Masquerading e proxying so discutidos em HOWTOs separados, e as
  caractersticas auto forwarding e port forwarding so controladas
  por ferramentas separadas, mas mesmo assim muitas pessoas me perguntam
  sobre elas, eu tambm vou incluir diversos cenrios comuns e indicar
  quando cada um deve ser aplicado. Os mritos de segurana de cada
  configurao no sero discutidos aqui.


  3.1.  Guia rpido de trs linhas para Masquerading

  Isto assume que sua interface externa  chamada "ppp0". Use ifconfig
  para acha-la, e ajuste ao guia.



       # ipchains -P forward DENY
       # ipchains -A forward -i ppp0 -j MASQ
       # echo 1 > /proc/sys/net/ipv4/ip_forward




  3.2.  Promoo Gratuita: Regras WatchGuard

  Voc pode comprar firewall separados. Um excelente  o WatchGuard
  FireBox. Ele  excelente porque eu gosto dele,  seguro,  baseado
  no Linux, e porque eles esto fundindo a manutano do ipchains
  tambm como um novo cdigo de firewall (almeijado para 2.3). Resumindo,
  WatchGuard est me pagando enquanto eu trabalho para voc. Assim
  por favor considere este material.

  http://www.watchguard.com <http://www.watchguard.com>


  3.3.  Configuraes de firewall simples

  Voc trabalha na littlecorp.com. Voc tem uma rede interna, e uma 
  conexo dialup (PPP) simples com a Internet (firewall.littlecorp.com 
  que  1.2.3.4). Voc usa Ethernet em sua rede local, e sua mquina 
  pessoal  chamada "myhost".


  Esta seo ilustrar os diferentes arranjos no qual so comuns.
  Leia com ateno porque cada um  sutilmente diferente.


  3.3.1.  Rede Privada: Proxies Tradicionais

  Neste cenrio, pacotes vindo da rede privada nunca atravessam para a
  Internet, e vice versa. O endereo IP da rede privada usam os
  endereos de acordo com o RFC1597 Private Network Allocations (ie.
  10.*.*.*, 172.16.*.* or 192.168.*.*).

  O nico meio de se conectar com a Internet  conectando com o firewall,
  que  a nica mquina na rede que conectam ambas. Voc executa um
  programa (no firewall) chamado proxy para fazer isto (h proxies para
  FTP, acesso Web, telnet, RealAudio, Usenet News e outros servios).
  Veja o Firewall HOWTO.

  Qualquer servio que voc deseja acessar na Internet deve estar no
  firewall (mas veja "Servios Internos Limitados" abaixo).


  Exemplo: Permitindo acesso web da rede privada para a Internet.

  1. A rede privada usa endereos 192.168.1.*, com myhost sendo
     192.168.1.100, e a interface do firewall firewall sendo designada
     192.168.1.1.

  2. Um proxy web (eg. "squid") est instalado e configurado no
     firewall, digo executando na porta 8080.

  3. Netscape na rede privada est configurado para usar a porta 8080
     do firewall como um proxy.

  4. DNS no precisa ser configurado na rede privada.

  5. DNS no precisa estar configurado no firewall.

  6. Sem rota padro (gateway) necessitando ser configurado na rede
     privada.


  Netscape em myhost l http://slashdot.org.

  1. Netscape conecta-se com o firewall na porta 8080, usando a porta
     1050 em myhost. Ele pergunta pela pgina internet "http://slashdot.org".

  2. O proxy procura o nome "slashdot.org", e obtm 207.218.152.131. Ele
     abre uma conexo com aquele endereo IP (usando a porta 1025 na
     interface externa do firewall), e pergunta ao servidor web
     (porta 80) pela pgina web.

  3. Como ele recebe a pgina web de sua prpria conexo com o servidor
     web, ele copia os dados para a conexo do Netscape.

  4. Netscape desenha a pgina.

  ie. Do ponto de vista de slashdot.org, a conexo  feita de
  1.2.3.4 (interface PPP do firewall) porta 1025 para 207.218.152.131
  (slashdot.org) porta 80. Do ponto de vista de myhost, a conexo 
  feita de 192.168.1.100 (myhost) porta 1050, para 192.168.1.1
  (interface Ethernet do firewall) porta 8080.



  3.3.2.  Rede Privada: Proxies Transparentes

  Neste cenrio, pacotes da rede privada nunca atravessam a Internet
  e vice versa. O endereo IP da rede privada deve ser escolhido
  de acordo com o RFC1597 Private Network Allocations (ie.
  10.*.*.*, 172.16.*.* or 192.168.*.*).

  O nico meio de conectar com a internet  conectando com o firewall,
  que  a nica mquina entre as duas redes e que conectam ambas.
  Voc executa um programa (no firewall) chamando um proxy transparente
  para fazer isto; o kernel envia pacotes de sada para o
  transparent proxy ao invs de envia-los adiante (ie. ele abastarda
  o roteamento).

  Proxyes transparentes querem dizer que o cliente no precisa saber que
  h um proxy envolvido.

  Qualquer servio que desejar acessar na Internet deve estar no firewall.
  (Mas veja "Servios Internos Limitados" abaixo).


  Exemplo: Permitindo acesso web da rede privada para a Internet.

  1. A rede privada usa endereos 192.168.1.*, com myhost sendo
     192.168.1.100, e a interface Ethernet do firewall sendo 192.168.1.1.

  2. Um proxy web transparente (eu acredito que existem patches para squid
     para permitir ele operar desta maneira, ou tente "transproxy") 
     instalado e configurado no firewall, digo executando na porta 8080.

  3. O kernel esta configurado para redirecionar conexo para a porta 80
     do proxy, usando ipchains.

  4. Netscape na rede privada est configurado para conectar diretamente.

  5. DNS precisa estar configurado na rede privada (ie. voc precisa
     executar um servidor DNS como um proxy no firewall).

  6. A rota default (gateway) precisa estar configurado na rede
     privada, para enviar pacotes para o firewall.

  Netscape em myhost l http://slashdot.org.

  1. Netscape localiza o nome "slashdot.org", e obtem 207.218.152.131.
     Ele abre uma conexo para aquele endereo IP, usando a porta local
     1050, e pergunta ao servidor web (porta 80) pela pgina web.

  2. Como os pacotes de myhost (porta 1050) para slashdot.org (porta 80)
     passam pelo firewall, eles so direcionados para proxy transparente
     aguardando na porta 8080. O proxy transparente abre uma conexo
     usando (usando a porta local 1025) com 207.218.152.131 porta 80
     (que  aqui onde os pacotes originais esto indo).

  3. Como o proxy recebe a pgina web de sua conexo com o servidor web,
     ele copia os dados para a conexo com o Netscape.

  4. Netscape desenha a pgina.

  ie. Do ponto de vista de slashdot.org, a conexo  feita de
  1.2.3.4 (interface PPP do firewall) porta 1025 para 207.218.152.131
  (slashdot.org) porta 80. Do ponto de vista de myhost, a conexo
   feita de 192.168.1.100 (myhost) porta 1050, para 207.218.152.131
  (slashdot.org) porta 80, mas ele est atualmente falando com o
  proxy transparente.
                     


  3.3.3.  Rede Privada: Masquerading

  Neste cenrio, pacotes da rede privada nunca atravessam a Internet
  sem um tratamento especial, e vice versa. O endereo Ip da rede privada
  devem ser escolhidos de acordo com o RFC1597 Private
  Network Allocations (ie. 10.*.*.*, 172.16.*.* or 192.168.*.*).

  Ao invs de usar um proxy, ns usamos facilidades especiais do kernel
  chamadas "masquerading". Masquerading regravam pacotes quando passam
  atravs do firewall, assim eles sempre parecem vir do prprio firewall.
  Ele ento re-escreve as respostas assim eles pareceram estar indo
  para o recipiente original.


  Masquerading possui mdulos separados para manipular protocolos
  "enganados", como FTP, RealAudio, Quake, etc. Para procolos realmente
  difceis de manipular, a facilidade "auto forwarding" pode manipular
  muitos destes configurando automticamente o forward de portas para
  configuraes de portas relacionadas:
  procure por "ipportfw" (kernels 2.0) ou "ipmasqadm" (kernels 2.1).


  Quaisquer servios que voc deseja acessar na Internet deve estar no
  firewall. (Mas veja "Servios Internos Limitados" abaixo).

  Exemplo: Permitindo acesso web da rede privada com a Internet.


  1. A rede privada possui endereos 192.168.1.*, com myhost sendo
     192.168.1.100, e a interface Ethernet do firewall sendo 192.168.1.1.

  2. O firewall  configurado para masquerade (mascarar) qualquer pacotes
     vindo da rede privada e indo para a porta 80 de um host da internet.

  3. Netscape est configurado para conectar diretamente.

  4. DNS deve ser configurado corretamente na rede privada.

  5. O firewall deve ser a rota default (gateway) para a rede privada.


  Netscape em myhost l http://slashdot.org.

  1. Netscape procura o nome "slashdot.org", e obtm 207.218.152.131. Ele
     ento abre uma conexo para aquele endereo IP, usando a porta local
     1050, e pergunta ao servidor web (porta 80) pela pgina web.

  2. Como os pacotes de myhost (porta 1050) para slashdot.org (porta 80)
     passam atravs do firewall, eles so regravados para virem da
     interface PPP do firewall, porta 65000. O firewall possui um
     endereo Internet vlido (1.2.3.4) assim responde pacote de
     www.linuxhq.com.

  3. Como pacotes de slashdot.org (porta 80) para firewall.littlecorp.com
     (port 65000) vem, eles so regravados para irem para myhost, porta
     1050. Esta  a mgica real do masquerading: ele relembra quando ele
     regravou pacotes enviados para regrar as respostas quando retornarem.

  4. Netscape desenha a pgina.

  ie. Do ponto de vista de slashdot.org, a conexo  feita de 1.2.3.4
  (interface PPP do firewall) porta 65000 para 207.218.152.131 (slashdot.org)
  porta 80. Do ponto de vista de myhost, a conexo  feita de 192.168.1.100
  (myhost) porta 1050, para 207.218.152.131 (slashdot.org) porta 80.



  3.3.4.  Rede Pblica

  Neste cenrio, sua rede pessoal  uma parte da Internet:
  pacotes pode seguir sem alteraes atravs de ambas as redes. O endereo
  IP da rede interna deve ser escolhido aplicando por um bloco de endereos
  IP, assim o resto da rede conhecer como obter pacotes para voc.
  Isto implica em uma conexo permanente.

  Neste cenrio, a filtragem de pacotes  usada para que pacotes podem
  ser direcionados entre sua rede e o resto da internet, eg. para
  restringir o resto da internet para somente acessar seus servidores
  web internos.

  Exemplo: Permitindo acesso web de sua rede privada para a Internet.

  1. Sua rede interna  configurada de acordo com os blocos de endereos
     IP que possui registrados, (digamos 1.2.3.*).

  2. O firewall est configurado para permitir qualquer trfego.

  3. Netscape est configurado para conectar diretamente.

  4. DNS deve estar configurado corretamente em sua rede.

  5. O firewall deve ser a rota padro (gateway) para sua rede privada.


  Netscape em myhost l http://slashdot.org.

  1. Netscape procura o nome "slashdot.org", e obtm 207.218.152.131.
     Ele ento abre uma conexo para aquele endereo IP, usando a
     porta local 1050, e pergunta do servidor web (porta 80) pela
     pgina web.

  2. Pacotes passam atravs do firewall, simplesmente como passam
     atravs de diversos firewalls entre voc e slashdot.org.

  3. Netscape desenha a pgina.

  ie.  Aqui existe somente uma conexo: de 1.2.3.100 (myhost) porta 1050,
  para 207.218.152.131 (slashdot.org) porta 80.


  3.3.5.  Servios Internos Limitados

  Existem alguns truques que voc pode usar para permitir a Internet
  acessar seus servios internos, em lugar de executar servios no
  firewall. Estes funcionaro com aproximao baseada em proxy ou
  masquerading para conexes externas.

  Uma simples aproximao  executar um "redirector", que  um poor-man's
  proxy que aguarda por uma conexo em uma determinada porta, e ento
  abre uma conexo em um porta e host fixo, e copia os dados entre as
  duas conexes. Um exemplo disto  o programa "redir". Do ponto de vista
  da Internet, a conexo  feita para seu firewall. Do ponto de vista
  de seu servidor interno, a coneo  feita da interface interna do
  firewall para o servidor.

  Outra aproximao (que requer um kernel 2.0 com patch para ipportfw,
  ou um kernel 2.1 ou superior)  usar um port forwarding no kernel.
  Isto faz o mesmo trabalho que o redir em um mtodo diferente: o kernel
  regrava os pacotes enquanto passam, alterando seus endereos de
  destino e portas para apontarem para hosts e portas internas. Do ponto
  de vista da da internet, a conexo  feita para seu firewall. Do ponto
  de vista de seu servidor interno, uma conexo  feita do host Internet 
  para o servidor.



  3.4.  David Ranch escreveu um excelente novo HOWTO em Masquerading,
  que tem uma larga quantidade de materiais com este HOWTO. Voc pode
  atualmente encontrar ete HOWTO em
  http://www.ecst.csuchico.edu/~dranch/LINUX/index-LINUX.html#ipmasq
  Mais detalhes sobre Masquerading

  Logo eu iria esperar que isto fosse encontrado em algum lugar do Projeto
  de documentao do Linux, em http://www.metalab.unc.edu/LDP
  <http://www.metalab.unc.edu/LDP>


  A pgina oficial do Masquerading est disponvel em

  http://ipmasq.cjb.net <http://ipmasq.cjb.net>



  4.  IP Firewalling Chains

  Esta seo descreve tudo o que voc realmente precisa saber para
  construir um filtro de pacotes que se encaixe em suas necessidades.


  4.1.  Como os pacotes atravessam os filtros

  O kernel inicia com trs listas de regras; estas listas so chamadas
  firewall chains ou simplesmente chains. Os trs chains so chamados
  input output e forward. Quando um pacote entra (digo, atravs da
  placa Ethernet) o kernel usa o chain de entrada e decide seu destino.
  Se ele sobrevive a este passo, ento o prximo passo do kernel 
  decidir onde enviar o pacote (isto  chamado roteamento). Se o seu
  destino for outra mquina, ele consultar o chain forward. Finalmente,
  antes de simplesmente o pacote ir para fora da rede, o kernel consulta
  o chain output.

  Um chain  uma lista de checagem de regras. Cada regra diz "se o cabealho
  do pacote parece com isto, ento aqui esta o que fazer com o pacote". Se
  a regra no confere com o pacote, ento a prxima regra no chain 
  consultada. Finalmente, se no existem mais regras a consultar, ento
  o kernel procura no policiamento do chains para decidir o que fazer.
  Em um sistema consciente em segurana, este policiamento normalmente
  diz ao kernel para rejeitar ou negar o pacote.

  Para fans da arte em ASCII, isto mostra o caminho completo do pacote
  entrando em uma mquina.










          ----------------------------------------------------------------
          |            ACEITAR/                             interface lo |
          v           REDIRECIONAR              _______                  |
  --> C --> S --> ______ --> D --> ~~~~~~~~ -->|forward|----> _______ -->
      h     a    |input |    e    {Routing }   |Chain  |     |output |ACEITAR
      e     n    |Chain |    m    {Decision}   |_______| --->|Chain  |
      c     i    |______|    a     ~~~~~~~~        |     | ->|_______|
      k     t       |        s       |             |     | |     |
      s     y       |        q       |             v     | |     |
      u     |       v        e       v           NEGAR/  | |     v
      m     |     NEGAR/     r  Processo Local REJEITAR  | |   NEGAR/
      |     v   REJEITAR     a       |                   | |  REJEITAR
      |   NEGAR              d       --------------------- |
      v                      e -----------------------------
     NEGAR


  Aqui est uma descrio passo a passo de cada estgio:


     Checksum:
        Este  um teste para verificar se o pacote no est corrompido
        de alguma forma. Se estiver, ele  negado.


     Sanity:
        Esta  atualmente um destas checagens de sanidade antes de
        cada chain firewall, mas o chain input  o mais importante.
        Muitos pacotes malformados podem deixar o cdigo de checagem
        de regras confuso, e estes so negados aqui (uma mensagem 
        mostrada no syslog se isto acontecer).


     input chain:
        Este  o primeiro chain firewall que ser testado contra o
        pacote. Se a deciso do chain no for NEGAR ou REJEITAR,
        o pacote passa.


     Demasquerade:
        Se o pacote  uma resposta de um pacote anterior do masquerade,
        (mascaramento) ele  desmascarado, e pula para o chain output.
        Se voc no usa o IP masquerading, voc pode ignorar esta parte
        no diagrama.


     Routing decision (deciso do roteamento):
        O campo de destino  examinado pelo cdigo de roteamento, para
        decidir se o pacote deve ir para um processo local (veja
        processos locais abaixo) ou direcionado (forward) para uma mquina
        remota (veja forward chains abaixo).


     Local process (processo local):
        Um processo sendo executado em uma mquina pode receber pacotes
        aps o passo de deciso do roteamento, e pode enviar pacotes
        (que vo pelo passo de deciso do reteamento, quando atravessam
        o chain output).


     interface lo:
        Se pacotes de um processo locai so desinados a um processo
        local, eles vo atravs do chain output com a interface
        configurada para "lo", ento retorna pelo chain input tambm
        com a interface "lo". A interface lo  normalmente chamada
        de interface loopback.

     local:
        Se o pacote no foi criado por um processo local, ento o
        chain forward  checado, caso contrrio o pacote vai atravs
        do chain output.

     forward chain:
        Este chain  usado para qualquer pacote que est tentando passar
        entre esta mquina para outra.

     output chain:
        Este chain  usado para todos os pacotes antes de serem enviados
        para fora.


  4.1.1.  Usando ipchains

  Primeiro, verifique se voc tem a verso do ipchains que este documento
  se refere:



       $ ipchains --version
       ipchains 1.3.9, 17-Mar-1999




  Note que eu recomendo 1.3.4 (que no possui opes longas, como "--sport"),
  ou 1.3.8 ou superior; estes so muito estveis.

  ipchains tem uma pgina de manual razoavelmente detalhada (man ipchains),
  e se voc precisa de mais detalhes em particularidades, voc deve checar
  a interface de programao (man 4 ipfw), ou o arquivo net/ipv4/ip_fw.c no
  cdigo fonte do kernel 2.1.x, que  (obviamente) autoritativo.

  Tambm existem um excelente guia de referncia rpida por Scott Bronson
  no pacote fonte, em ambas A4 e US Letter PosScript(TM).

  Existem diferentes outras coisas que voc pode fazer com ipchains.
  Primeiro operaes para gerenciar chains completos. Voc inicia com
  trs chains input, output e forward que voce no pode apagar.


  1. Criar um novo chain (-N).

  2. Deletar um chain vazio (-X).

  3. Alterar o policiamento de um chain embutido. (-P).

  4. Listar as regras em um chain (-L).

  5. Transportar (Flush) as regras fora do chain (-F).

  6. Zerar os contadores de pacote e byte em todas as regras no chain (-Z).

  Existem diversos meios de manipular regras dentro do chain:


  1. Adiciona uma nova regra no chain (-A).

  2. Insere uma nova na mesma posio no chain (-I).

  3. Substitui uma regra na mesma posio no chain (-R).

  4. Deleta uma regra na mesma posio no chain (-D).

  5. Deleta a primeira regra que confere no chain (-D).

  Existem poucas operaes para masquerading, que esto no ipchains que
   um bom lugar para coloca-las:


  1. Lista de conexes atuais do masquerade (-M -L).

  2. Configura os valores de tempo mximo (timeout) do masquerade (-M -S).
     (Mas veja "Eu no posso configurar tempo mximo no masquerade")

  O funo final (e talvez a mais til) permite a voc checar o que
  aconteceu com o dado pacote se ele atravessou o chain.


  4.1.2.  Operaes em uma regra Simples

  Este  o po-e-manteiga do ipchains; manipulando regras. Mas especificamente
  voc ira provavelmene usar os comandos append (-A) e delete (-D).
  os outros (-I para inserir e -R para substituir) so simples
  extenses nestes conceitos.

  Cada regra especifica uma cofigurao de condies em que o pacote
  se encontra, e o que fazer quando a encontra (um "alvo"). Por exemplo,
  voc pode desejar negar todos os pacotes ICMS vindo do endereo IP
  127.0.0.1. Assim neste caso nossas condies so que o protocolo deve
  ser ICMS e que o endereo de origem deve ser 127.0.0.1. Nosso alvo 
  "NEGAR".

  127.0.0.1  a interface "loopback", que voc tem mesmo se no
  possuir uma conexo real da rede. Voc pode usar o programa "ping"
  para gerar tais pacotes (ele simplesmente envia um ICMP tipo 8
  (echo request) com todos os hosts cooperativos que devem servialmente
  responder com o pacote ICMS tipo 0 (echo reply). Isto  til para
  testes.



       # ping -c 1 127.0.0.1
       PING 127.0.0.1 (127.0.0.1): 56 data bytes
       64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms

       --- 127.0.0.1 ping statistics ---
       1 packets transmitted, 1 packets received, 0% packet loss
       round-trip min/avg/max = 0.2/0.2/0.2 ms
       # ipchains -A input -s 127.0.0.1 -p icmp -j DENY
       # ping -c 1 127.0.0.1
       PING 127.0.0.1 (127.0.0.1): 56 data bytes

       --- 127.0.0.1 ping statistics ---
       1 packets transmitted, 0 packets received, 100% packet loss
       #



  Voc pode ver aqui que o primeiro ping se sucede( o "-c 1"que dizer
  para o ping enviar somente um pacote simples)

  Ento ns adicionamos (-A) um chain "input", uma regra especificando
  que para pacotes vindo de 127.0.0.1 ("-s 127.0.0.1") com o protocolo
  ICMS ("-p ICMS") devem ser negados ("-j DENY").

  Quando ns testamos nossa regra, usando o segundo ping, Existe uma
  pausa antes do programa aguardar a resposta que nunca vem.

  Ns podemos apagar uma regra em um dos dois meios. Primeiro
  ns conhecemos que esta  a nica regra no chain input, ns podemos
  usar um nmero para apagar, como em:


               # ipchains -D input 1
               #



  Para apagar a regra nmero 1 no chain input.


  O segundo meio  espelhar o comando -A, mas trocando o -A com -D.
  Isto  til quando voce tem um complexo conjunto de regras e voc no
  deseja conta-las para retirar a regra 37. Neste caso, ns podemos usar:


               # ipchains -D input -s 127.0.0.1 -p icmp -j DENY
               #




  A sintaxe de -D deve ter exatamente as mesmas opes que os comandos -A
  (ou -I ou -R). Se existem mltiplas regras idnticas no mesmo chain,
  somente a primeira ser apagada.


  4.1.3.  Especificaes de Filtragem

  Voc deve sempre usar "-p" para especificar um protocolo, e "-s" para
  especificar um endereo de origem, mas existem outras opes que ns
  podemos usar para especificar caractersticas do pacote. O que segue
   um compndio exaustivo.

                           
  4.1.3.1.  Especificando o endereo IP de origem e Destino

  Endereos IPs de origem (-s) e destino (-d) podem ser especificados
  em quatro meios. O meio mais comum  usar o nome completo, como "localhost"
  ou "www.linuxhq.com". O segundo mtodo  especificar o endereo IP
  como "127.0.0.1".

  O terceiro e quarto meio permite especificar um grupo de endereos
  IPs, como "199.95.207.0/24" ou "199.95.207.0/255.255.255.0".
  Estes dois especificam qualquer endereos IP de 192.95.207.0 para
  192.95.207.255 inclusive; os digitos depois da "/" dizem dizem que
  a parte do endereo IP  significante. "/32" ou "/255.255.255.255" 
  o padro (abrange todos os endereos IPs). Para especificar qualquer
  endereo IP, deve ser usado "/0", como no exemplo:



          # ipchains -A input -s 0/0 -j DENY
          #



  Isto  raramente usado, como o efeito acima  o mesmo como no 
  especificar a opo "-s".


  4.1.3.2.  Especificando Inverso

  Muitas opes, incluindo a "-s" e "-d" podem ter seus argumentos
  seguidos de "!" (que significa no) para atingirem endereos NO
  iguais ao especificado. Por exemplo, "-s ! localhost" atinge qualquer
  pacote menos de localhost.


  4.1.3.3.  Especificando o Protocolo

  O protocolo pode ser especificado com a opo "-p". O protocolo
  pode ser um nmero (se conhecer os valores numricos dos protocolos
  para IP) ou um nome para casos especiais de "TCP", "UDP" ou "ICMP".
  Caso especificar "tcp" tambm funcinar como "TCP".

  O nome do protcolo pode usar o prefixo "!", para inverter a regra,
  como "-p ! TCP".


  4.1.3.3.1.  Especificando portas UDP e TCP

  Para casos especiais onde um protocolo TCP ou UDP  especificado,
  existem argumentos extras indicando a porta TCP ou UDP, ou um
  (exclusivo) faixa de portas (mas veja "Dirigindo Fragmentos" abaixo).
   Uma faixa  representada pelo caracter ":", como "6000:6010", que
   abrange 11 nmeros de portas, de 6000 para 6010. Se o menor nmero
    omitido, o padro ser 0. Se o maior nmero for omitido, o padro
   ser 65535. Assim para especificar conexes TCP vindo de portas abaixo
   de 1024, a sintaxe deve ser como "-p TCP -s 0.0.0.0/0 :1023". Nmeros
   de portas podem ser especificadas por nomes, eg. "www".


  Note que a especificao de portas devem ser precedidas por uma "!",
  que inverte a regra. Assim para especificar qualquer pacote TCP menos
  uma pacote WWW, voc deve especificar

  -p TCP -d 0.0.0.0/0 ! www


   importante realizar aquela especificao


  -p TCP -d ! 192.168.1.1 www


   muito diferente de 

  -p TCP -d 192.168.1.1 ! www


  A primeira especifica qualquer pacote TCP para a porta WWW em qualquer
  mquina menos 192.168.1.1. O segundo especifica qualquer conexo
  TCP para qualquer porta em 192.168.1.1 menos a porta WWW.

  Finalmente, este caso significa no para a porta WWW e no para 
  192.168.1.1:

  -p TCP -d ! 192.168.1.1 ! www




  4.1.3.3.2.  Especificando tipo do ICMP Type e Code

  ICMP tambm permite um argumento opcional, mas como ICMP no possui
  portas, (ICMP possui tipo e cdigo) eles possuem diferentes significados.

  Voc pode especifica-los como nomes ICMP (use ipchains -h icmp para
  listar os nomes) aps a opo "-s", ou como um tipo e cdigo ICMP
  numrico, onde os tipos seguem a opco "-s" e o cdigo segue a opo
  "-d".

  Os nomes ICMP so razoavelmente logos: voc somente precisa usar
  bastante letras para fazer um nome se distinguir de outros.

  Aqui est um pequena tabela de alguns dos pacotes ICMP mais comuns:


       Nmero  Nome                     Requerido por

       0       echo-reply               ping
       3       destination-unreachable  Qualquer trfego TCP/UDP.
       5       redirect                 roteamente se no estiver executando um daemon de roteamento
       8       echo-request             ping
       11      time-exceeded            traceroute




  Note que os nomes ICMS no podem ser precedidos de "!" no momento.


  NO, NO, NO, bloqueie as mensagems ICMP do tipo 3! (Veja "Pacotes
  ICMP" abaixo)


  4.1.3.4.  Especificando a Interface

  A opo "-i" especifica o nome de uma interface para atingir. Uma
  interface  o dispositivo fsico onde o pacote vem, ou onde vai.
  Voc pode usar o comando ifconfig para listas as interfaces que
  esto em "up" (ie. trabalhando no momento).

  A interface para pacotes de entrada (ie. pacotes atravessando
  as regras de entrada)  considerada sendo uma interface onde eles vem.
  Lgicamente, a interface para pacotes enviados (pacotes atravessando
  as regras de sada)  a interface onde eles vo. A interface para pacotes
  atravessando os chains forward  tambm a interface onde eles sero
  enviados para fora; me parece uma deciso bastante arbitrria.

   perfeitamente legal especificar uma interface que atualmente no
  existe; a regra no atingir nada at que a interface seja iniciada.
  Isto  extremamente til para conexes PPP dialup (normalmente a
  interface ppp0).

  Como um caso especial, um nome de interface finalizando com um "+"
  atinge todas as interfaces (at mesmo se existem atualmente ou no)
  que comeam com aquele string. Por exemplo, para especificar uma regra
  que atinge todas as interfaces PPP, a opo "-i ppp+" pode ser usada.

  O nome da interface pode ser precedida por uma "!" para no atingir
  pacotes que NO conferem com a interface especificada.


  4.1.3.5.  Especificando somente pacotes TCP SYN

   muitas vezes til permitir conexes TCP em uma direo, mas no em
  outra. Por exemplo, voc pode desejar permitir conexes para uma
  servidor WWW externo, mas no conexes daquele servidor.

  Uma aproximao ingnua pode ser bloquear pacotes TCP vindo do
  servidor. Infelizmente, conexes TCP requerem pacotes indo em ambas
  direes para funcionarem corretamente.

  A soluo  bloquear somente os pacotes usados para requisitar uma
  conexo. Estes pacotes so chamados SYN (ok, tcnicamente
  eles so pacotes com a flag SYN configurada, e as flags FIN e ACK
  limpas, mas ns os chamamos de pacotes SYN). Desativando
  somente estes pacotes, ns podemos parar tentativas de conexes
  em seus rastros.

  A flag "-y"  usada para isto:  somente vlida para regras que
  especificam TCP como seu protocolo. Por exemplo, para especificar
  tentativas de conexo TCP de 192.168.1.1:

  -p TCP -s 192.168.1.1 -y



  Mais uma vez, esta opo pode ser invertida se for precedida de
  um "!", que diz que cada pacote sem ser a inicializao da conexo.


  4.1.3.6.  Dirigindo Fragmentos

  As vezes um pacote  muito largo para passar de uma s vez. Quando isto
  acontee, o pacote  dividido em framentos, e enviado como mltiplos
  pacotes. O outro lado remonta os fragmentos para reconstruir o
  pacote inteiro.


  O problema com fragmentos  que muitas das especificaess listadas
  acima (em particular, porta de origem, porta de destino, tipo ICMP,
  cdigo ICMP, ou opo TCP SYN) requerem que o kernel verifique no
  inicio do pacote, que  o nico que contm o primeiro fragmento.


  Se sua mquina  a nica conectada a uma rede externa, ento voc
  pode dizer para o kernel do linux para remontar todos os fragmentos
  dos pacotes que passam atravs dele, compilando o kernel com IP: always
  defragment (sempre desfragmentar) configurado para "Y". Isto ntidamente
  evita isto.
  

  Caso contrrio,  importante entender como os fragmentos so tratados
  pelas regras de filtragem. O primeiro fragmento  tratado
  como qualquer outro pacote. O segundo e os fragmentos seguintes no so.
  Assim uma regra -p TCP -s 192.168.1.1 www (especificando uma porta de
  origem de "www") nunca atingir um fragmento (do segundo em diante).
  Nem ser o oposto a regra -p TCP -s 192.168.1.1 ! www.


  No entanto, voc pode especificar uma regra especificamente para o
  segundo e outros fragmentos, usando a opo "-f". Obviamente,  ilegal
  especificar uma porta TCP ou UDP, tipo ICMP, cdigo ICMP ou a opo
  TCP SYN em tal regra de fragmento.

   tambm permitido especificar que uma regra que no se aplica ao 
  segundo e fragmentos seguintes, procedendo "-f" com  "!".

  Normalmente  considerado como seguro deixar o segundo e outros
  fragmentos atravessarem, desde que a filtragem afetar o primeiro
  fragmento, e assim previne a remontagem no computador de destino,
  porm, tem sido conhecido bugs para permitir o travamento de mquinas
  simplesmente enviando fragmentos.

  Nota para cabeas de rede: pacotes mal formados (TCP, UDP e pacotes
  ICMP muitos curtos para o cdigo de firewall ler as portas ou cdigo
  e tipo ICMP) so tratados como fragmentos tambm. Sometne fragmentos
  TCP iniciando na posio 8 so explicitamente derrubados pelo cdigo
  do firewall (uma mensagem aparecer no syslog se isto ocorrer).

  Como um exemplo, a seguinte regra derrubar quaisquer fragmentos
  indo para 192.168.1.1:




       # ipchains -A output -f -d 192.168.1.1 -j DENY
       #





  4.1.4.  Efeitos do Lado da Filtragem

  OK, agora ns conhecemos todos os mtodos que podemos atingir
  um pacote usando uma regra. Se um pacote confere com a regra, as
  seguintes coisas podem acontecer:


  1. O contador de byte para aquela regra  aumentado pelo tamando do
     pacote (cabealho e tudo).

  2. O contador de pacotes para aquela regra  incrementado.

  3. Se a regra o requisitar, o pacote  registrado.

  4. Se a regra o requisitar, o campo do pacote Type Of Service 
     alterado.

  5. Se a regra o requisitar, o pacote  marcado (no em kernels da srie
     2.0).

  6. O alvo da regra  examinado para decidir o que fazer com o
     prximo pacote.

  Para variedade, todos estas regras esto em ordem de importncia.


  4.1.4.1.  Especificando um alvo

  Um alvo diz ao kenrel o que fazer com um pacote que confere cum uma
  regra. ipchains usa "-j" (pense como "jump-to" - pular para) para a
  especificao do alvo. O nome do alvo deve ser menor que 8 letras, e
  case sensitive: "RETURN" e "return" so completamente diferentes.


  O caso mais simples  quando no h um alvo especificado. Este tipo de
  regra (muitas vezes chamado de uma regra de "contagem")  til para
  uma contagem simples de certos tipos de pacotes. Se esta regra confere
  ou no, o kernel simplesmente examina a prxima regra no chain. Por
  exemplo, para contar o nmero de pacotes de 192.168.1.1, ns podemos
  fazer isto:


       # ipchains -A input -s 192.168.1.1
       #




  (Usando "ipchains -L -v" ns podemos ver os contadores e bytes
  associados com cada regra).


  Existem seis alvos especiais. Os primeiros trs, ACCEPT, REJECT e
  DENY so muito simples. ACCEPT aceita o pacote, DENY bloqueia o
  pacote,  como se nunca o tivesse recebido. REJECT rejeita o pacote,
  mas (se ele no  um pacote ICMP) gera uma resposta ICMP para a
  origem para dizer que o destino est inalcanavel.


  A prxima, MASQ diz ao kernel mascarar (masquerade) o pacote. Para
  isto funcionar, seu kernel precisa estar compilado com IP Masquerading
  ativado. Para detalhes sobre isto, veja Masquerading_HOWTO e o
  apndice "Diferenas ente ipchains e ipfwadm". Este alvo  somente
  vlido para pacotes atravessando o chain forward.


  O alvo mais especial  REDIRECT que diz ao kernel para enviar um pacote
  para uma porta local em vez de onde tivesse vindo.
  Isto pode ser somente especificado por regras especificando TCP ou UDP
  como seus protocolos. Opcionalmente, uma porta (nome ou nmero) podem
  ser especificadas seguidas de "-j REDIRECT" que causar o redirecionamento
  do pacote para uma porta particular, at mesmo se for endereado para
  outra porta. Este alvo  somente vlido para pacotes atravessando
  a regra de entrada.

  O alvo final especial  RETURN que  idntico a cair fora do final
  da regra imediatamente. (Veja "Configurando o Policiamento" abaixo).

  Qualquer outro alvo indica uma regra definida pelo usurio (como
  descrita em "Operaes em todo o Chain" abaixo). O pacote comear
  atravessando as regras naquele chain. Se aquele chain no decide o
  destino do pacote, ento uma vez passam por aquele chain como
  finalizado, passar se resume na prxima regra no chain atual.

  Hora de mais arte ASCII. Considere dois (tolos) chains: input (o
  chain embutido) e Test (um chain definido pelo usurio).

           `input'                         `Test'
          ----------------------------    ----------------------------
          | Rule1: -p ICMP -j REJECT |    | Rule1: -s 192.168.1.1    |
          |--------------------------|    |--------------------------|
          | Rule2: -p TCP -j Test    |    | Rule2: -d 192.168.1.1    |
          |--------------------------|    ----------------------------
          | Rule3: -p UDP -j DENY    |
          ----------------------------



  Considerando um pacote TCP vindo de 192.168.1.1, indo para 1.2.3.4. Ele
  entra no chain input, e  testado na regra 1 - sem bater com a regra.
  A regra 2 bate, e seu alvo  Test, assim a prxima regra examinada 
  o inicio do teste. Regra 1 em test confere, mas no especifica um
  alvo, assim a prxima regra  examinada, Regra 2. Isto no confere,
  assim ns atingimos o final do chain. Ns retornamos ao chain de
  entrada, onde ns simplesmente examinamos a Regra 2, assim ns agora
  examinamos Regra3, que no confere.


  Assim o caminho do pacote :

                                  v    __________________________
           `input'                |   /    `Test'                v
          ------------------------|--/    -----------------------|----
          | Rule1                 | /|    | Rule1                |   |
          |-----------------------|/-|    |----------------------|---|
          | Rule2                 /  |    | Rule2                |   |
          |--------------------------|    -----------------------v----
          | Rule3                 /--+___________________________/
          ------------------------|---
                                  v




  Veja a seo "Como organizar suas regras de Firewall" para meios para
  usar regras definidas pelo usurios efetivamente.


  4.1.4.2.  Registrando pacotes

  Este  o lado do efeito que confere com uma regra que possui; voc pode
  ter o pacote que bateu com a regra registrado com a opo "-l". Voc
  normalmente no precisar disto para pacotes rotineiros, mas ela  uma
  caracterstica til se voc deseja verificar por eventos excepcionais.


  O kernel registra esta informao parecida como:



       Packet log: input DENY eth0 PROTO=17 192.168.2.1:53 192.168.1.1:1025
         L=34 S=0x00 I=18 F=0x0000 T=254



  Esta mensagem de registro  designada para ser concisa, e contm
  informaes tcnicas teis somente para gurus de rede, mas ela pode
  ser til para o resto de ns. Cada uma que dizer o seguinte:



  1. "input" este  o chain que contm a regra que confere com o pacote,
     causando a mensagem de registro.

  2. "DENY"  o que a regra disse fazer com o pacote. Se isto  "-"
     ento a regra no afetou o pacote (uma regra de registro).

  3. "eth0"  o nome da interface. Porque isto foi o chain de entrada, ela
     significa que o pacote veio de "eth0".

  4. "PROTO=17" significa que o pacote foi protocolo 17. Uma lista de
     nmeros de protocolos esta disponvel em "etc/prococols". Os mais
     comuns so 1 (ICMP), 6(TCP) e 17(UDP).

  5. "192.168.2.1" significa que o endereo IP de origem do pacote foi
     "192.168.2.1".

  6. ":53" significa que a porta de origem foi 53. Olhando em "/etc/services"
      verificado que esta  uma porta "domnio" (ie. esta  provavelmente
     a resposta do DNS). Para UDP e TCP, este nmero  a porta de origem.
     Para ICMP, ele  o tipo ICMP. Para outros, ele ser 65535.

  7. "192.168.0.1"  o IP de destino.

  8. ":1025" significa que a porta de destino foi 1025. Para UDP e TCP,
     este nmero  a porta de destino. Para ICMP, ele  o cdigo ICMP.
     Para outros, ele ser 65535.

  9. "L=34" significa que o pacote teve um total de 34 bytes.

  10. "S=0x00" campo que significa o tipo do servio (dividido por 4 para
     obter o tipo do servio com usado pelo ipchains).

  11.
     `I=18'  a identificao do IP.

  12. "F=0x0000"  os fragmentos 16-bits offset plus flags. Um valor
     iniciando com "0x4" ou "0x5" significa que o bit de fragmento no
     esta configurado. "0x2" ou "0x3" significa que o bit "mais fragmentos"
     esta configurado; espere mais fragmentos aps isto. O resto dos nmeros
     so o offset deste fragmento, dividido por 8.

  13.
     "T=254"  o tempo de vida do pacote. Um  subtrado deste valor
     para cada ciclo, e normalmente iniciam em 15 ou 255.

  14.
     "(#5)" este pode ser um nmero final em parnteses em kernels mais
     recentes (talvez aps 2.2.9). Este  um nmero de regra que causa
     o registro do pacotes.


  Em sistemas linux padres, esta sada do kernel  capturada por klogd
  (o daemon de registro do kernel) que o envia para o syslogd (o daemon
  de registro do sistema). O arquivo "/etc/syslog.conf" controla o
  funcionamento de syslogd, especificando um destino para cada facilidade
  (facility - em nosso caso, a facilidade  "kernel") e nvel (para ipchains,
  o nvel usado  "info").

  Por exemplo, meu (Debian) /dec/syslog.conf contm duas linhas que
  conferem "kern.info":
                         

  kern.*                          -/var/log/kern.log
  *.=info;*.=notice;*.=warn;\
          auth,authpriv.none;\
          cron,daemon.none;\
          mail,news.none          -/var/log/messages




  Estas significam que as mensagem so duplicadas em "/var/log/kern.log" e
  "/var/log/messages". Para mais detalhes, veja "man syslog.conf".


  4.1.4.3.  Manipulando o tipo do Servio

  Existem quatro bits raramente usados no cabealho IP, chamaos de
  bits de tipo do servio (TOS). Eles afetam o mtodo como os pacotes so
  tratados; os quatros bits so "Minima Espera", "Mximo processamento",
  "Mxima Confiabilidade" e "Mnimo Custo". Somente um destes bits 
  permitido ser configurado. Rob van Nieuwkerk, o autor do TOS-mangling
  code, colocou o que segue:

       Especialmente o "Minimo de Espera"  importante para mim. Eu
       deixo ele ligado para pacotes "interativos" em meu
       roteador (Linux). Eu uso um modem de 33k6. O linux
       inicializa pacotes em 3 meios. Deste meio eu tenho
       performance interativa aceitvel enquando fao downloads
       grandes ao mesmo tempo. (Ele pode at mesmo ser melhor se
       l no tiver tal bit no driver serial, mas a latencia 
       mantida agora por 1.5 segundos).


  Nota: Obviamente, voc tem o controle atravs de pacotes de entrada:
  voc pode somente controlar a prioridade dos pacotes deixando seu
  computador. Para negociar prioridades com o outro computador, um
  protocolo como RSVP (que no conheo nada sobre ele, no me pergunte
  sobre isto) deve ser usado.

  O uso mais comum  configurar telnet e conexes de controle FTP para
  o "Minima Espera" e dados FTP para "Mximo Processamento". Isto
  pode ser feito como segue:


       ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10
       ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10
       ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08


  A opo "-t" pede dois parmetros extras, ambos em hexadecimal. Estes
  permitem giros complexos dos bitos TOS: o primeira mascara  ANDed com
  o pacote atual TOS, e ento a segunda mscara  XORed com ele.
  Se isto  muito confuso, apenas use a seguinte tabela:


  TOS Name                Value           Typical Uses

  Minimum Delay           0x01 0x10       ftp, telnet
  Maximum Throughput      0x01 0x08       ftp-data
  Maximum Reliability     0x01 0x04       snmp
  Minimum Cost            0x01 0x02       nntp



  Andi Klenn foi ao ponto fora dos seguintes (tambm editado para
  postaridade):

       Talvez ele pode ser til para incluir uma referncia para
       de ifconfig para a discusso sobre bits TOS. O tamanho do
       dispositivo padro  afinado para placas ethernet, em
       modems ele  muito grande e faz os 3 agendamentos das bandas
       (que possui canais baseados no TOS) funcionarem subtimamente.
        uma boa idia configura-lo para um valor entre 4-10 no modem
       ou simples canal b para links ISDN: em dispositivos empacotados
        necessrio um grande canal.
       Este  uma problema 2.0 e no 2.1, mas em 2.1 ele  um opo
       do ifconfig (com nettools recentes), enquanto em 2.0 ele requer
       patches fontes nos controladores de dispositivos para alterar.

  Assim, para ver mximos beneficios da manipulao TOS para links
  de modems PPP, faa "ifconfig $1 txqueuelen" em seu /etc/ppp/ip-up script.
  O nmero usado depende da velocidade do modem e da quantidade de
  buffer no modem; aqui configuraes que Andi me passou denovo:

       O melhor valor para dadas configuraes precisam ser testadas.
       Se os canais so muito pequenos em um roteador ento os pacotes
       sero derrubados. Tambm  claro que um obtm o benefcio at
       mesmo sem regravao TOS, apenas aquela regravao TOS ajuda
       obter benefcios para programas no coperativos (mas todos os
       programas padres do linux so coperativos).



  4.1.4.4.  Marcando um Pacote

  Isto permite complexas e poderosas interaes com Alexey Kuznetsov's
  nova Qualidade de implementaes de Servio, tambm como forwarding
  baseado em marcas em kernels da srie 2.1. Esta opo  no entanto
  ignorada em kernels da srie 2.0.


  4.1.4.5.  Operaes em todo o chain

  Uma caracterstica muito til do ipchains  a abilidade de agrupar
  regras relacionadas em chains. Voc pode chamar chains do que 
  quiser, desde que no sejam nomes utilizados pelos chains embutidos
  (input, output e forward) ou os alvos (MASQ, REDIRECT, ACCEPT, DENY,
  REJECT ou RETURN). Eu sugiro evitar totalmente identificaes em
  maisculas, porque que eu posso usar estas para futura extenso. O nome
  do chain pode ser maior que 8 caracteres.



  4.1.4.6.  Criando um novo chain

  Vou criar um novo chain. Porque eu sou como um imaginador da mesma
  categoria, eu chamarei isto de test.



  # ipchains -N test
  #




   muito simples. Agora voc pode colocar regras nele como detalhado acima.


  4.1.4.7.  Apagando um chain

  Apagar um chain tambm  simples.



       # ipchains -X test
       #



  Porque "-X"? Bem, todas as boas letras foram usadas.

  Existem um par de restries para apagar chains: elas devem ser vazias
  (veja "Limpando um Chain" abaixo) e eles no devem ser o alvo
  de qualquer regra. Voc no pode deletar qualquer destes trs chains
  embutidos.


  4.1.4.8.  Limpando um Chain

  Existe um mtodo simples de esvaziar todas as regras fora do chain, usando
  o comando "-F".



               # ipchains -F forward
               #




  Se voc no especificar um chain, ento todos os chains sero limpos.


  4.1.4.9.  Listando um chain

  Voc pode listar todas as regras em um chain usando o comando "-L".



       # ipchains -L input
       Chain input (refcnt = 1): (policy ACCEPT)
       target     prot opt    source                destination           ports
       ACCEPT     icmp -----  anywhere              anywhere              any
       # ipchains -L test
       Chain test (refcnt = 0):
       target     prot opt    source                destination           ports
       DENY       icmp -----  localnet/24           anywhere              any
       #



  O "refcnt" listado para test  o nmero de regras que tem test como
  seu alvo. Este pode ser zero (e o chain ser vazio) antes deste chain
  ser apagado.

  Se o nome do chain  omitido, todos os chains so listados.

  Existem trs opes que podem acompanhar "-L". A "-n" (numrica)
  opo  muito til porque ela previne ipchains de tentar localizar
  endereos IP, que (se voc esta usando DNS como muitas pessoas)
  causa larga espera se seu DNS se no estiver configurado corretamente,
  ou se voc filtrar suas requisies DNS. Ele faz as portas serem listadas
  como nmeros ao invs de nomes.

  A opo "-v" mostra os detalhes das regras, como o pacote e contadores
  de byes, as mscaras TOS, a interface, e a marca do pacote. Caso contrrio
  estes valores so omitidos. Por exemplo:



       # ipchains -v -L input
       Chain input (refcnt = 1): (policy ACCEPT)
        pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports
          10   840 ACCEPT     icmp ----- 0xFF 0x00  lo                    anywhere              anywhere              any




  Note que o pacote e o contador do byte so mostrados usando os sufixos
  "K", "M" ou "G" para 100, 1,000,000 e 1,000,000,000 respectivamente.
  Usando a opo "-x" (nmeros expandidos) so mostrados nmeros completos,
  no discutirei como eles so grandes.


  4.1.4.10.  Resetando (Zerando) Contadores

  Isto  til para permitir resetar os contadores. Isto pode ser feito com
  a opo "-Z" (zero counters). Por exemplo:



       # ipchains -v -L input
       Chain input (refcnt = 1): (policy ACCEPT)
        pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports
          10   840 ACCEPT     icmp ----- 0xFF 0x00  lo                    anywhere              anywhere              any
       # ipchains -Z input
       # ipchains -v -L input
       Chain input (refcnt = 1): (policy ACCEPT)
        pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports
           0     0 ACCEPT     icmp ----- 0xFF 0x00  lo                    anywhere              anywhere              any
       #




  O problema disto  que muitas vezes voc precisa conhecer os valores
  do contador imediatamente antes dele ser resetado. No exemplo acima,
  muitos pacotes pode passar entre os comandos "-L" e "-Z".
  Por esta razo, voc pode usar "-L" e "-Z" juntos, para
  resetar os contadores enquando os l. Infelizmene, se voc fizer isto,
  voc no poder operar em um chain simples: voc ter que listar e zerar
  todos os chains imediatamente.
       # ipchains -L -v -Z
       Chain input (policy ACCEPT):
        pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports
          10   840 ACCEPT     icmp ----- 0xFF 0x00  lo                    anywhere              anywhere              any

       Chain forward (refcnt = 1): (policy ACCEPT)
       Chain output (refcnt = 1): (policy ACCEPT)
       Chain test (refcnt = 0):
           0     0 DENY       icmp ----- 0xFF 0x00  ppp0                  localnet/24           anywhere              any
       # ipchains -L -v
       Chain input (policy ACCEPT):
        pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports
          10   840 ACCEPT     icmp ----- 0xFF 0x00  lo                    anywhere              anywhere              any

       Chain forward (refcnt = 1): (policy ACCEPT)
       Chain output (refcnt = 1): (policy ACCEPT)
       Chain test (refcnt = 0):
           0     0 DENY       icmp ----- 0xFF 0x00  ppp0                  localnet/24           anywhere              any
       #





  4.1.4.11.  Configurando o Policiamento

  Ns mostramos o que acontece quando um pacote atinge o final do
  chain de entrada embutido quando ns discutimos como um pacote anda
  atravs dos chains em "Especificando um Alvo" acima. Neste caso, o
  policiamento do chain determina o destino do pacote. Somente chains
  embutidos (input output e forward) tem policiamento, porque se um
  pacote cai no final de um chain definido pelo usurio, a passagem 
  resumida no chain anterior.


  O policiamento pode ser qualquer dos primeiros quatro alvos especiais:
  ACCEPT, DENY, REJECT, MASQ. MASQ  somente vlido para o chain "forward".

   tambm importante notar que o alvo RETURN em uma regra em um dos
  chains embutidos  til para acertar o policiamento de um chain
  quando o pacote se encaixa em uma regra.


  4.1.5.  Operaes em Masquerading

  Existem diversos parmetros que voc pode usar para IP Masquerading. Eles
  esto empacotados com ipchains porque no compensa fazer uma ferramenta
  separada para eles (no entanto isto pode mudar).

  O comando IP Masquerading  "-M", e ele pode ser combinado com "-L"
  para listar conexes Masquerade atuais, ou "-S" para configurar
  parmetros masquerade.

  O comando "-L" pode ser acompanhado por "-n" (mostar nmeros ao invs
  de nomes dos hosts e nomes das portas) ou "-v" (mostra deltas em
  nmeros sequenciais para conexo masquerade, apenas em caso de
  preocupao).

  O comando "-S" deve ser seguido de trs valores de timeout, cada um
  em segundos: para sees TCP, para sees TCP aps um pacote FIN, e
  para pacotes UDP. Se voc no desejar alterar um destes valores,
  simplesmente passe um valor "0".


  Os valores padres esto listados em
  `/usr/src/linux/include/net/ip_masq.h', atualmente 15 minutos, 2
  minutos e 5 minutes respectivamente.


  O valor mais comum para ser alterado  o primeiro, para FTP (veja
  "Pesadelos FTP" abaixo).

  Note os problemas com as configuraes de timeout listados em "Eu no
  posso configurar timeouts em masquerade!".


  4.1.6.  Checando um Pacote

  Muitas vezes voc deseja ver o que esta acontecendo quando um certo
  pacote entra em sua mquina, tal como para verificar seus chains de
  entrada. ipchains tem o comando "-C" para permitir isto, usando
  exatamente as mesmas rotinas que o kernel usa para diagnosticar
  pacotes reais.
                
  Voc especifica que chain testar o pacote seguido do argumento "-C"
  com seu nome. Considerando que o kernel sempre inicia atravessando
  os chains input, output e forward, voc est permitido o inicio
  da travessia em qualquer chain para fins de testes.


  Os detalhes do "pacote" so especificados usando a mesma sintaxe
  usada para expecificar regras do firewall. Em particular, um protocolo
  ("-p"), endereo de origem ("-s"), endereo de destino ("-d") e
  interface ("-i") so compulsrios. Se o protoclo  TCP ou UDP, ento
  uma porta simples de origem e destino devem ser especificadas, e um
  tipo ICMP e um cdigo devem ser especificados para o protocolo ICMP
  (a no ser que a opo "-f"  espeficada para indicar uma regra de
  fragmento, em tal caso estas opes so ilegais).

  Se o protocolo  TCP (e a opo "-f" no  especificada), a opo
  "-y" deve ser especificada, para indicar que o pacote test deve
  ter o bit SYN ajustado.

  Aqui est um exemplo de teste de um pacote TCP SYN de 192.168.1.1 porta
  60000 para 192.168.1.2 porta www, vindo na interface eth0, entrando
  no chain "input". Isto  uma clssica inicializao de conexo WWW.



       # ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www
       packet accepted
       #





  4.1.7.  Multiplas Regras at Once and Watching What Happens

  Muitas vezes uma simples linha de comando pode resultar em mltiplas
  regras sendo afetadas. Isto  feito em duas maneiras. Primeiro, se
  voc especificar um hostname que resolve (usando DNS) mltiplos endereos
  IPs, ipchains pode atuar como se voc tivesse digitado mltiplos comandos
  com cada combinao de endereos.

  Assim se o hostname "www.foo.com" resolve trs endereos IPs, e o
  hostname "www.bar.com" resolve dois endereos IPs, ento o comando
  "ipchains -A input -j reject -s www.bar.com -d www.foo.com" acumula
  seis regras para o chain de entrada.

  O outro meio de ter o ipchains fazendo mltiplas aes  usar a
  opo bidirecional ("-b"). Esta opo faz o ipchains se comportar como
  se voc tivesse digitado o comando duas vezes, a segunda vez com os
  argumentos "-s"  e "-d" invertidos. Assim, para evitar forwarding
  para ou de 192.168.1.1, voc deve fazer o seguinte:



       # ipchains -b -A forward -j reject -s 192.168.1.1
       #




  Pessoalmente, eu no gosto muito da opo "-b"; se voc deseja
  convenincia, veja "Usando ipchains-save" abaixo.


  A opo -b pode ser usada com insert ("-I"), delete ("-D") (mas no
  com variaes que pegam regras numricas), comando append ("-A") e
  comando check ("-C").


  Outra opo til  "-v" (verbose) que mostra exatamente o que o
  ipchains est fazendo com seus comandos. Isto  til se voc est
  negociando com comandos que podem afetar multiplas regras. Por exemplo,
  aqui ns checamos a ao dos fragmentos entre 192.68.1.1 e 192.168.1.2.



       # ipchains -v -b -C input -p tcp -f -s 192.168.1.1 -d 192.168.1.2 -i lo
         tcp opt   ---f- tos 0xFF 0x00  via lo    192.168.1.1  -> 192.168.1.2    * ->   *
       packet accepted
         tcp opt   ---f- tos 0xFF 0x00  via lo    192.168.1.2  -> 192.168.1.1    * ->   *
       packet accepted
       #





  4.2.  Exemplos teis

  Eu tenho uma conexo dialup PPP (-i ppp0). Eu pego news (-p TCP -s
  news.virtual.net.au nntp) e mail (-p TCP -s mail.virtual.net.au pop-3)
  a toda hora que disco. Eu uso o mtodo FTP da Debian para atualizar
  minha mquina regularmente (-p TCP -y -s ftp.debian.org.au ftp-data).
  Eu surfo na WEB atravs do meu proxy ISP enquando isto est sendo
  feito (-p TCP -d proxy.virtual.net.au 8080), mas odeio os anncios
  de doubleclick.net dos arquivos Dilbert (-p TCP -y -d 199.95.207.0/24 e
  -p TCP -y -d 199.95.208.0/24).


  Eu no noto pessoas tentando entrar pelo ftp em minha mquina enquando
  eu estou online (-p TCP -d $LOCALIP ftp), mas no desejo qualquer um
  de fora pretendendo ter um endereo IP de minha rede interna (-s 192.168.1.0/24).
  Isto  normalmente chamado de IP spoofing, e aqui est um belo meio de
  proteger voc dele em kernels 2.1.x e superiores: veja "Como eu
  configuro a proteo IP spoof?".


  A configurao  razoavelmente simples, porque existem atualmente
  nenhuma outra mquina na minha rede interna.

  Eu no desejo que nenhum processo local (ie. Netscape, linx etc...) se 
  conecte em doubleclick.net:



       # ipchains -A output -d 199.95.207.0/24 -j REJECT
       # ipchains -A output -d 199.95.208.0/24 -j REJECT
       #




  Agora eu desejo configurar prioridades em varios pacotes de sada (no
  existe muitos motivos de se fazer isto em pacotes que entram). Desde
  que eu tenho diversos nmeros destas regras,  sensato colocar todas elas
  em um simples chain, chamado ppp-out.



       # ipchains -N ppp-out
       # ipchains -A output -i ppp0 -j ppp-out
       #




  Minimo de espera para trfego WEB e telnet.



       # ipchains -A ppp-out -p TCP -d proxy.virtual.net.au 8080 -t 0x01 0x10
       # ipchains -A ppp-out -p TCP -d 0.0.0.0 telnet -t 0x01 0x10
       #




  Baixo custo para dados ftp, nntp, pop-3:



       # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 ftp-data -t 0x01 0x02
       # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 nntp -t 0x01 0x02
       # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 pop-3 -t 0x01 0x02
       #




  Existem algumas restries em pacotes vindo da inteface ppp0:
  deixe criar um chain chamado "ppp-in"




  # ipchains -N ppp-in
  # ipchains -A input -i ppp0 -j ppp-in
  #




  Agora, nenhum pacote vindo de ppp0 deve reivindicar um endereo de
  origem de 192.168.1.*, assim ns registramos e negamos todos eles:



       # ipchains -A ppp-in -s 192.168.1.0/24 -l -j DENY
       #




  Eu permito pacotes UDP para DNS (eu executo um programa de cache de
  nomes que redireciona todas as requisies para 203.29.16.1, assim
  eu espero respostas DNS somente dele), entrada FTP, e somente retorno
  de dados ftp(ftp-data) (que deve somente estar indo para uma porta
  acima de 1023, e no as portas X11 em torno de 6000).



       # ipchains -A ppp-in -p UDP -s 203.29.16.1 -d $LOCALIP dns -j ACCEPT
       # ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 1024:5999 -j ACCEPT
       # ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 6010: -j ACCEPT
       # ipchains -A ppp-in -p TCP -d $LOCALIP ftp -j ACCEPT
       #




  Finalmente, pacotes local-para-local esto OK:



       # ipchains -A input -i lo -j ACCEPT
       #




  Agora, meu policiamento padro no chain de entrada  DENY, assim
  qualquer outra coisa  derrubada:



       # ipchains -P input DENY
       #




  NOTA: Eu no configurei meus chains nesta ordem, como os pacotes
  podem ir atravs da minha configurao. Seguramente  normalmente
  feito o DENY (bloqueio) primeiro, ento inseridas as regras.  claro,
  se suas regras requerem chamadas DNS para resolver nomes de hosts,
  voc ter problemas.


  4.2.1.  Usando ipchains-save

  Configurar regras de firewall simplesmente do jeito que desejar, e ento
  tente se lembrar dos comandos que usou assim voc pode estar na prxima
  hora em pane.

  Assim ipchains-save  um script que l sua configurao atual dos chains
  e salva em um arquivo. No momento eu mantenho seu suspense sobre o que
  o ipchains-restore faz.

  ipchains-save pode salvar uma simples regra, ou todas as regras (se
  nenhum nome de regra  especificada). A nica opo atualmente permitida
   "-v" que mostra as regras (para stderr) quando so salvas. O
  policiamento do chain  tambm salvo para as regras input, output e 
  forward.



       # ipchains-save > my_firewall
       Saving `input'.
       Saving `output'.
       Saving `forward'.
       Saving `ppp-in'.
       Saving `ppp-out'.
       #





  4.2.2.  Usando ipchains-restore

  ipchains-restore restaura chains que foram salvos com ipchains-save.
  Ele pode usar duas opes "-v" que descreve cada resgra sendo includa,
  e "-f" que fora a limpeza de regras definidas pelo usurio se
  elas existem, como descrito abaixo.


  Se uma regra definida pelo usurio  encontrada em input, ipchains-restore
  checa se aquele chain realmente existe. Se existir, ento voc ser
  perguntado se os chains devem ser limpos (limpeza de todas as regras)
  ou se a restaurao deste chain deve ser ignorada. Se voc especificar
  "-f" na linha de comando, voc no ser perguntado; a regra ser limpa.


  Por exemplo:



       # ipchains-restore < my_firewall
       Restoring `input'.
       Restoring `output'.
       Restoring `forward'.
       Restoring `ppp-in'.
       Chain `ppp-in' already exists. Skip or flush? [S/f]? s
       Skipping `ppp-in'.
       Restoring `ppp-out'.
       Chain `ppp-out' already exists. Skip or flush? [S/f]? f
       Flushing `ppp-out'.
       #





  5.  Diversos

  Esta seo contm todas as informaes e FAQs que eu pude colocar dentro
  da estrutura do arquivo abaixo.


  5.1.  Como organizar suas regras de firewall

  Esta questo requer muita concentrao. Voc pode tentar organiza-las
  para melhorar a velocidade (minimizar o nmeros de checagem de
  regras para os pacotes mais comuns) ou para diminuir o gerenciamento.

  Se voc tiver um link intermitente, digamos PPP, voc pode desejar
  configurar a primeira regra do chain de entrada para "-i ppp0 -j DENY"
  na inicializao, ento tendo qualquer coisa como esta em seu script
  ip-up:



       # Re-create the `ppp-in' chain.
       ipchains-restore -f < ppp-in.firewall

       # Replace DENY rule with jump to ppp-handling chain.
       ipchains -R input 1 -i ppp0 -j ppp-in




  Seu script ip-down deve se parecer com isto:



       ipchains -R input 1 -i ppp0 -j DENY






  5.2.  O que no filtrar

  Existem muitas coisa que voc deve estar atento antes de iniciar
  a filtragem de tudo o que no desejar.


  5.2.1.  Pacotes ICMP

  Pacotes ICMP so usados (entre outras coisas) para indicar falhas de
  outros protocolos (tal como TCP e UDP). Pacotes "destination-unreachable"
  em particular. Bloqueando estes pacotes significa que voc nunca
  obter erros "Host unreachable" ou "No route to host"; qualquer
  conexo simplesmente aguardar por uma resposta que nunca vir.
  Isto  irritante, mas raramente fatal.

  Um problema pior  o papel de pacotes ICMP em na descoberta MTU.
  Todas as boas implementaes TCP (incluindo o Linux) usa a descoberta
  MTU para tentar entender qual pacote grande que pode ir para um destino
  sem ser fragmentado (fragmentao diminui a performance, especialmente
  quando fragmentos ocasionais so perdidos). Descoberta MTU funciona
  enviando pacotes com o bit "Don't Fragment" ajustado, e ento enviando
  pacotes pequenos se ele obter um pacote ICMP indicando "Fragmentao
  necessria mas DF ajustado" ("fragmentao necessria"). Este  um tipo
  de pacote "destination-unreachable", e se ele nunca  recebido, o host
  local no reduzir o MTU, e a performance ser abismal ou no existente.
  Note que  comum ele bloquear todas as mensagens de redirecionamento
  ICMP (tipo 5); estas podem ser usados para manipular roteamento (embora
  boas stacks IP tem protees), e assim so frequentemente vistas como
  ligeiramente ariscadas.


  5.2.2.  Conexes TCP para DNS (servidores de nomes)

  Se estiver tentando bloquear conexes TCP de sada, se lembre que
  DNS nem sempre usa UDP; se a resposta do servidor excede, 512 bytes,
  o cliente usa uma conexo TCP (ainda indo para o nmero de porta 53)
  para obter a resposta.

  Isto pode ser uma armadilha porque DNS sempre "trabalha principalmente" 
  se voc bloquear tais transferncias TCP; voc pode experimentar esperas
  longas e estranhas ou outros problemas DNS ocasionais se voc o fizer.

  Se suas requisies DNS sempre so direcionadas para a mesma origem
  externa (ou diretamente usando a linha nameserver em /etc/resolv.conf
  ou usando um servidor de nomes cache no modo forward), ento voc
  precisar somente permitir conexes TCP para a porta domnio naquele
  servidor de nomes da porta de domnio local (se usando um servidor
  de nomes cache) ou de uma porta alta (>1023) se estiver usando
  /etc/resolv.conf.


  5.2.3.  Pesadelos FTP

  O problema clssico de filtragem de pacotes  o FTP. FTP tem dois modos;
  um  o tradicional que  chamado modo ativo e o mais recente  chamado
  de modo passivo. Navegadores Web normalmente usam o modo passivo, mas
  programas FTP de linha de comando normalmente usam o modo ativo.


  No modo ativo, quando o computador remoto tenta enviar um arquivo (ou
  at mesmo o resultado de um comando ls ou dir) ele tenta abrir uma
  conexo TCP com a mquina local. Isto significa que voc no pode
  filtrar estas conexes TCP sem bloquear o FTP ativo.

  Se voc tem a opo de usar o modo passivo, ento bem; modo passivo
  faz as conexes de dados de cliente para servidor, at mesmo para
  dados de entrada. Caso contrrio,  recomendado que voc somente permita
  conexes TCP para portas acima de 1024 e no entre 6000 e 6010 (6000
   usada pelo X-Window).


  5.3.  Filtrando o Ping of Death (ping da morte)

  Computadores Linux so agora imunes aos famosos Ping of Death, que
  envolve o envio de grandes pacotes ICMP ilegais que sobrecarrega
  os buffers na pilha TCP no receptor e causa destruio.

  Se voc est protegendo computadores que podem ser vulnerveis, voc
  deve simplesmente bloquear fragmentos ICMP. Pacotes normais ICMP
  no so grandes o bastante para requerer fragmentao, assim voc
  no deve bloquear nada exceto grandes pings. Eu tenho ouvido (no
  confirmados) relatos que muitos sistemas requerem somente o ltimo
  fragmento de um pacote ICMP acima de seu tamanho para o corromper,
  assim bloquear somente o primeiro fragmento no  recomendado.

  Sobre os programas exploit e tenho sempre visto que todos usam ICMP,
  no existem razes que fragmentos TCP ou UDP (ou um protocolo
  desconhecido) possa ser usado neste ataque, assim bloqueando
  fragmentos ICMP  somente uma soluo temporria.


  5.4.  Filtrando o Teardrop e Bonk

  Teardrop e Bonk so dois ataques (principalmente sobre mquinas Microsoft
  Windows NT) que confiam em fragmentos sobrepostos. Tendo seu roteador
  Linux fazendo desfragmentao, ou no permitindo todos os fragmentos
  para suas mquinas vulnerveis so as outras opes.


  5.5.  Filtrando Bombas de Fragmento

  Algumas pilhas TCP so comentadas por ter problemas negociando com
  grandes nmeros de fragmentos de pacotes quando eles no recebem
  todos os fragmentos. Linux no tem este problema. Voc pode filtrar
  fora fragmentos (que podem interromper legitimos usurios) ou compilar
  seu kernel com "IP: always defragment" ajustado para "Y" (somente se
  seu computador linux  o roteador para estes pacotes).


  5.6.  Modificando regras do firewall

  Existem alguns assuntos cronometrados envolvidos em alterar regras
  do firewall. Se voc no  cuidadoso, voc pode deixar pacotes
  passarem enquanto estiver fazendo suas alteraes. Uma soluo
  simplssima  fazer o seguinte:



       # ipchains -I input 1 -j DENY
       # ipchains -I output 1 -j DENY
       # ipchains -I forward 1 -j DENY

       ... faz alteraes ...

       # ipchains -D input 1
       # ipchains -D output 1
       # ipchains -D forward 1
       #



  Isto bloqueia todos os pacotes durante as alteraes.

  Se suas alteraes so restritas para um chain simples, voc deve
  criar um novo chain com novas regras, e ento trocar ("-R") a
  regra que aponta para o antigo chain para a nova que aponta para o
  novo chain: ento voc pode apagar o antigo chain. Esta substituio
  ocorrer atomicamente.


  5.7.  Como eu configuro a proteo IP Spoof?

  IP spoofing  uma tcnica onde um host envia pacotes que parecem
  ser de outro host. Desde que a filtragem de pacotes faz decises
  baseadas no endereo de origem, IP spoofing  usado para filtros
  de pacotes bobos. Ele  tambm usado para ocultar a identidade
  de atacantes usando ataques SYN, Teardrop, Ping of Death e outros
  (no se preocupe se no sabe o que eles fazem).

  O melhor meio para proteger de IP spoofing  chamado Verificao
  do endereo de Origem, e  feito pelo cdigo de roteamento, e no
  o firewall completamente. Procure por um arquivo chamado
  /proc/sys/net/ipv4/conf/all/rp_filter. Se ele existe, ento
  ligando a Verificao do Endereo de Origem (Source Address Verification)
  em cada inicializao  a soluo certa para voc. Para fazer isto,
  insira as seguintes linhas em qualquer lugar de seus scripts init, antes
  de qualquer placa de rede ser inicializada:



       # This is the best method: turn on Source Address Verification and get
       # spoof protection on all current and future interfaces.
       if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
         echo -n "Setting up IP spoofing protection..."
         for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
             echo 1 > $f
         done
         echo "done."
       else
         echo PROBLEMS SETTING UP IP SPOOFING PROTECTION.  BE WORRIED.
         echo "CONTROL-D will exit from this shell and continue system startup."
         echo
         # Start a single user shell on the console
         /sbin/sulogin $CONSOLE
       fi




  Se voc no puder fazer isto, voc pode inserir manualmente regras para
  proteger cada interface. Isto requer conhecimento de cada interface.
  Os kernels 2.1 automticamente rejeitam pacotes dizendo vir de
  endereos 127.* (reservados para a interfaceloopback local, lo).


  Por exemplo, digamos que temos trs interfaces, eth0, eth1 e ppp0. Ns
  podemos usar ifconfig para nos dizer o endereo e netmask das interfaces.
  Digamos eth0 foi ligada a rede 192.168.1.0 com a netmasq 255.255.255.0,
  eth1 foi ligada a rede 10.0.0.0 com a netmask 255.0.0.0, e ppp0 conectado
  com a internet (onde qualquer endereo exceto endereos IP privados
  so permitodos), ns devemos inserir as seguintes regras:



       # ipchains -A input -i eth0 -s ! 192.168.1.0/255.255.255.0 -j DENY
       # ipchains -A input -i ! eth0 -s 192.168.1.0/255.255.255.0 -j DENY
       # ipchains -A input -i eth1 -s ! 10.0.0.0/255.0.0.0 -j DENY
       # ipchains -A input -i ! eth1 -s 10.0.0.0/255.0.0.0 -j DENY
       #




  Esta idia no  to boa como a Verificao do endereo de origem,
  porque se sua rede muda, voc deve mudar suas regras de firewall
  para prevenila.

  Se voc est executando um kernel da srie 2.0, voc pode desejar
  proteger a interface loopback tambm, usando uma regra como esta:



       # ipchains -A input -i ! lo -s 127.0.0.0/255.0.0.0 -j DENY
       #



  5.8.  Projetos Avanados

  Existe uma livraria userspace que eu escrevi que est incluida com
  a distribuio fonte chamada "libfw". Ela usa a abilidade de IP
  chains 1.3 e acima para copiar pacotes para userspace (usando a opo
  de configurao IP_FIREWALL_NETLINK).

  Os valores marcados pode ser usados para especificar os parmetros
  da qualidade do servio para pacotes, ou para especificar como
  os pacotes devem ser redirecionados para as portas. Eu nunca usei isto,
  mas se quiser escrever sobre ele, me contacte.


  Coisas tal como inspees stateful (eu prefiro o termo
  firewall dinmico) pode ser implementado no userspace usando esta
  biblioteca. Outras idias bonitas incluem o controle de pacotes
  em uma base por-usurio fazendo uma procura emum daemos userspace.
  Isto pode ser muito fcil.


  5.8.1.  SPF: Condio para Filtragem de Pacotes (Stateful Packet Filtering)

  ftp://ftp.interlinx.bc.ca/pub/spf <ftp://ftp.interlinx.bc.ca/pub/spf>
  no site Brian Murrell;s SPF projeto, que faz conexo localizada
  no userspace. Ele inclui segurana significativa para sites de
  baixa largura de banda.

  Existe uma documentao pequena presente, mas aqui est uma mensagem
  para a mailing list onde Brian respondeu muitas questes:



       > I believe it does exactly what I want: Installing a temporary
       > "backward"-rule to let packets in as a response to an
       > outgoing request.

       Yup, that is exactly what it does.  The more protocols it
       understands, the more "backward" rules it gets right.  Right
       now it has support for (from memory, please excuse any errors
       or omissions) FTP (both active and passive, in and out), some
       RealAudio, traceroute, ICMP and basic ICQ (inbound from the ICQ
       servers, and direct TCP connections, but alas the secondary
       direct TCP connections for things like file transfer, etc. are
       not there yet)

       > Is it a replacement for ipchains or a supplement?

       It is a supplement.  Think of ipchains as the engine to allow
       and prevent packets from travelling across a Linux box.  SPF is
       the driver, constantly monitoring traffic and telling ipchains
       how to change it's policies to reflect the changes in traffic
       patterns.





  5.8.2.  Michael Hasenstein's ftp-data hack

  Michael Hasenstein da SuSE escreveu um patch para o kernel que incluir
  localizaes de conexes para o ipchains. Ele est atualmente localizado em:
  http://www.csn.tu-chemnitz.de/~mha/patch.ftp-data-2.gz
  <http://www.csn.tu-chemnitz.de/~mha/patch.ftp-data-2.gz>

  
  5.9.  Avanos Futuros

  Firewalling e NAT esto sendo redesenhados para 2.3. Planos e
  discusses esto disponveis nos arquivos netdev, e na lista
  ipchains-dev. Estes avanos devem limpar muitos assuntos
  de usabilidade (realmente, firewall e masquerade no deve ser
  difcil), e permitir o crescimento de firewalls mais flexveis.


  6.  Problemas comuns


  6.1.  ipchains -L Trava!

  Voc est provavelmente bloqueando chamada DNS; e eventualmente o
  time out. Tente usar a opo "-n" (nmerico) com ipchains, que
  no mostra nomes.



  6.2.  Masquerading/Forwarding no funciona!

  Certifique-se que o forward de pacotes est ativado (em kernels
  recentes  desativado por padro, dizendo que pacotes nunca tentam
  atravessar o chain "forward"). Voc pode alterar isto (como root)
  digitando:



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




  Se isto funciona para voc, coloque isto em algum lugar em seus
  scripts de inicializao assim ele ser ativado toda hora; voc
  deve configurar seu firewall antes de executar este comando,
  caso contrrio existe uma oportunidade de pacotes escaparem.



  6.3.  -j REDIR no funciona!

  Voc deve permitir pacotes forward (veja acima) para o redirecionamento
  funcionar; caso contrrio o cdigo de roteamento bloqueia o pacote. Assim
  se voc est simplesmente usando o redirecionamento, e no tem qualquer
  forward, voc dever estar atento a isto.

  Note que REDIR (sendo no chain input) no afeta conexes de um
  processo local.


  6.4.  Coringas nas Interfaces no funcinam!

  Existe um bug nas verses 2.1.102 e 2.1.103 do kernel (e alguns
  patches antigos que produzi) que fazem comandos ipchains falharem
  ao especificar uma inteface com coringas (tal como -i ppp+).


  Isto est corrigido nos kernels mais recentes, e no patch 2.0.34 do
  web site. Voc pode tambm pode corrigir alterando o fonte do kernel
  alterando a linha 63 ou assim em include/linu/ip_fw.h


       #define IP_FW_F_MASK    0x002F  /* All possible flag bits mask   */





  Isto deve ser lido como ``0x003F''.  Corrija isto e recompile o kernel.


  6.5.  TOS no funciona!

  Isto foi meu erro: configurando o campo tipo do servio no
  configurava atualmente o tipo do servio nos kernels verses
  2.1.102 entre 2.1.111. Este problema foi corrigido em 2.1.112.


  6.6.  ipautofw e ipportfw no funcionam!

  Para 2.0.x, isto  verdade; Eu no tenho tempo para criar e manter um patch
  gigantesco para ipchains e ipautofw/ipportfw.


  Para 2.1.x, copia Juan Ciarlante's ipmasqadm de

  <url url="http://juanjox.linuxhq.com/"
          name="http://juanjox.linuxhq.com/">


  e use-o exetamente como usaria como ipautofw ou ipportfw, exceto
  ao invs de ipportfw voc digita ipmasqadm portfw, e ao invs de
  ipautofw voc deve digitar ipmasqadm autofw.


  6.7.  xosview est quebrado!

  Atualize para a verso 1.6.0 ou superior, que no requerem qualquer
  regra de firewall para kernels 2.1.x. Isto parece ter quebrado
  denovo no lanamento 1.6.1; por favor fale sobre o erro para o autor
  (este erro no  meu).


  6.8.  Falta de Segmentao com "-j REDIRECT"!

  Este foi um bug no ipchains verso 1.3.3.  Por favor atualize.



  6.9.  Eu no posso configurar tempo limite no masquerade!

  Verdadeiro (para kernels 2.1.x) at 2.1.123. Em 2.1.124, tentando
  configurar o tempo limite no masquerading causava uma chamada no
  kernel (altere return para ret = na linha
  1328 de net/ipv4/ip_fw.c). Em 2.1.125, funciona corretamente.


  6.10.  Eu desejo proteger IPX!

  Assim como outros, eu vejo. Meu cdigo somente cobre IP, infelizmente.
  Do lado bom, todos os ganchos esto l para IPX! Voc apenas precisa
  re-escrever o cdigo; Eu ficaria feliz em ajudar onde for possvel.


  7.  Um exemplo Srio.

  Este exemplo foi extrado de Michael Neuling e meu tutorial
  LinuxWorld em Maro de 1999; este no  o nico meio de resolver
  o dado problema, mas ele  provavelmente o mais simples. Eu espero
  que voc ache ele informativo.



  7.1.  O arranjo


    Rede interna em Masquerade (vrios sistemas opearacionais), que ns
     chamamos "GOOD".

    Servidores expostos em uma rede separada (chamada "DMZ" para
     Zona Delimitada).

    Conexo PPP para a Internet (chamada "BAD").




          Rede Externa (BAD)
                  |
                  |
              ppp0|
           ---------------
           | 192.84.219.1|             Servidor de Rede (DMZ)
           |             |eth0
           |             |----------------------------------------------
           |             |192.84.219.250 |             |              |
           |             |               |             |              |
           |192.168.1.250|               |             |              |
           ---------------          --------       -------        -------
                  | eth1            | SMTP |       | DNS |        | WWW |
                  |                 --------       -------        -------
                  |              192.84.219.128  192.84.219.129  192.84.218.130
                  |
          Rede Interna (GOOD)





  7.2.  Metas


  Filtragem de Pacotes:

      PING em qualquer rede
        Isto  realmente til para dizer se uma mquina est desativada.


      TRACEROUTE em qualquer rede
        Mais uma vez, til para diagnsticos.


      Acesso DNS
        Para fazer ping e DNS mais teis.



  Dentro do DMZ:


  Servidor de Mail

    SMTP para externo


    Aceitar SMTP da rede interna e externa

    Aceitar POP-3 da rede interna

  Servidor de Nomes

    Enviar DNS para externa

    Aceitar DNS da rede interna, externa e computador de filtragem de pacotes


  Servidor Web

    Aceitar HTTP da rede interna e externa

    Acesso Rsync da rede interna


  Interna:

     Permitir WWW, ftp, traceroute, ssh para rede externa
        Existem coisas razoavelmente padres para permitir: muitos lugares
        iniciam permitindo mquinas internas fazer apenas tudo, mas
        aqui ns estamos sendo restritivos.


      Permitir SMTP para o Servidor Mail 
        Obviamente, ns desejamos enviar emais para fora.


      Permitir POP-3 para o Servidor de Mail
        Isto  como eles lero seus Emails.


      Permitor DNS para o servidor de nomes
        Eles precisam ser capazes de procurar nomes externos para WWW,
        ftp, traceroute e ssh.


      Permitir rsync para o servidor Web
        Isto  como eles sincronizam o servidor web externo com o
        interno.


      Permitir WWW para o Servidor WEB
        Obviamente, eles devem ser capazes de conectar para servidoes
        web externos.


      Permitir ping para o computador de filtragem de pacotes
        Isto  uma coisa corts para permitir: Isto significa que ns
        podemos testar se o firewall est operando (assim ns no
        teremos culpa de um site externos est quebrado).



  7.3.  Antes da Filtragem de pacotes


    Anti-spoofing

     Desde que ns no temos qualquer roteamento asimtrico, ns podemos
     simplesmente ligar anti-spoofing para todas as interfaces.


       # for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
       #





    Configurando regras de filtragem para NEGAR tudo:


     Ns ainda permitimos trfego no loopback local, mas bloqueamos
     qualquer outra coisa.




       # ipchains -A input -i ! lo -j DENY
       # ipchains -A output -i ! lo -j DENY
       # ipchains -A forward -j DENY
       #





    Configurando Interfaces

     Isto  normalmente concludo com os scripts de inicializao.
     Tenha certeza que os passos acima esto concludos antes das
     interfaces serem configuradas, para prevenir vazamentos de pacotes
     antes que as regras sejam definidas.


    Inserir mdulos masquerade por-protocolo.

     Ns precisamos inserir o mdulo masquerade para FTP, assim que
     o FTP ativo e passivo "apenas trabalhe" na rede interna.




       # insmod ip_masq_ftp
       #





  7.4.  Filtragem de pacotes por pacotes

  Com masquerading,  melhor filtrar no chain forward.

  Divida o chain forward em vrios chains de usurios dependendo
  das interfaces de origem/destino; Isto quebra o problema
  em pedaos menores.



       ipchains -N good-dmz
       ipchains -N bad-dmz
       ipchains -N good-bad
       ipchains -N dmz-good
       ipchains -N dmz-bad
       ipchains -N bad-good


  Aceitar (accept) erros simples ICMSs  uma coisa comum a fazer, assim
  ns criamos um chain para ele.



       ipchains -N icmp-acc





  7.4.1.  Configurando pulos para o chain forward

  Infelizmente, ns somente conhecemos (no chain forward) a interface
  de sada. Assim, entender que interface o pacote est vindo, ns
  usamos o endereo de origem (o anti-spoofing previne falsificao
  de endereo).

  Note que ns registramos qualquer coisa que no confira com qualquer
  um destes (obviamente, isto nunca deveria acontecer).



       ipchains -A forward -s 192.168.1.0/24 -i eth0 -j good-dmz
       ipchains -A forward -s 192.168.1.0/24 -i ppp0 -j good-bad
       ipchains -A forward -s 192.84.219.0/24 -i ppp0 -j dmz-bad
       ipchains -A forward -s 192.84.219.0/24 -i eth1 -j dmz-good
       ipchains -A forward -i eth0 -j bad-dmz
       ipchains -A forward -i eth1 -j bad-good
       ipchains -A forward -j DENY -l





  7.4.2.  Defina o chain icmp-acc 

  Pacote que so somente um dos erros ICMPs so aceitos, caso contrrio,
  o controle passar ao chain chamado anteriormente.




       ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
       ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
       ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
       ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT





  7.4.3.  GOOD (Interno) para DMZ (Servidores)

  Restries Internas:

    Permitir WWW, ftp, traceroute, ssh para servidores externos

    Permitir SMTP para o Servidor de Mail

    Permitir POP-3 para o servidor de Mail

    Permitir DNS para o servidor de Nomes

    Permitir rsync para o servidor Web

    Permitir WWW para o servidor Web

    Permitir ping para o computador de filtragem de pacotes.

  Pode fazer o masquerading da rede interna em DMZ, mas aqui ns
  no faremos. Desde nenhum na rede interna deveria tentar fazer
  coisas maldosas, ns registramos qualquer pacote que foi negado.




       ipchains -A good-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT
       ipchains -A good-dmz -p tcp -d 192.84.219.128 pop-3 -j ACCEPT
       ipchains -A good-dmz -p udp -d 192.84.219.129 domain -j ACCEPT
       ipchains -A good-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT
       ipchains -A good-dmz -p tcp -d 192.84.218.130 www -j ACCEPT
       ipchains -A good-dmz -p tcp -d 192.84.218.130 rsync -j ACCEPT
       ipchains -A good-dmz -p icmp -j icmp-acc
       ipchains -A good-dmz -j DENY -l






  7.4.4.  Bad (externo) para DMZ (servidores).



  Restries DMZ:

    Servidor de Mail

    SMTP para externo

    Aceitar SMTP da rede interna e externa

    Aceitar POP-3 da rede interna


    Servidores de nomes

    Enviar DNS para a rede externa

    Aceitar DNS da rede interna, externa e computador de filtragem de pacotes


    Servidor Web

    Aceitar HTTP da rede interna e externa

    Acesso Rsync da rede interna


    Ns permitimos coisas da rede externa para DMZ.

    No registrar violaes, como elas podem acontecer.









  ipchains -A bad-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT
  ipchains -A bad-dmz -p udp -d 192.84.219.129 domain -j ACCEPT
  ipchains -A bad-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT
  ipchains -A bad-dmz -p tcp -d 192.84.218.130 www -j ACCEPT
  ipchains -A bad-dmz -p icmp -j icmp-acc
  ipchains -A bad-dmz -j DENY





  7.4.5.  Good (interna) para Bad (externa).


    Restries Internas:

    Permitir WWW, ftp, traceroute, ssh para a rede externa

    Permitir SMTP para o servidor de Mail

    Permitir POP-3 para servidores de Mail

    Permitir DNS para o Servidor de nomes

    Permitir rsync para o servidor Web

    Permitir WWW para o Servidor Web

    Permitir ping para o computador de filtragem de pacotes

    Muitas pessoas permitem qualquer coisa da rede interna para a externa,
     ento adicionamos restries. Ns estamos sendo facistas.

    Log de violaes.

    FTP passivo dirigido pelo mdulo masquerade.



       ipchains -A good-bad -p tcp --dport www -j MASQ
       ipchains -A good-bad -p tcp --dport ssh -j MASQ
       ipchains -A good-bad -p udp --dport 33434:33500 -j MASQ
       ipchains -A good-bad -p tcp --dport ftp --j MASQ
       ipchains -A good-bad -p icmp --icmp-type ping -j MASQ
       ipchains -A good-bad -j REJECT -l





  7.4.6.  DMZ para Good (intena).



    Restries Internas:

    Permitir WWW, ftp, traceroute, ssh para a rede externa

    Permitir SMTP para o servidor de Mail

    Permitir POP-3 para o servidor de Mail

    Permitir DNS para o servidor de nomes

    Permitir rsync para o servidor Web

    Permitir WWW para o servidor Web

    Permitir ping para o computador de filtragem


     Se ns estamos fazendo o masquerade da rede interna para a DMZ,
     simplesmente recusamos qualquer outro pacote vindo de outro
     meio. Permitindo somente pacote que so partes de uma conexo
     estabelecida.



       ipchains -A dmz-good -p tcp ! -y -s 192.84.219.128 smtp -j ACCEPT
       ipchains -A dmz-good -p udp -s 192.84.219.129 domain -j ACCEPT
       ipchains -A dmz-good -p tcp ! -y -s 192.84.219.129 domain -j ACCEPT
       ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
       ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 rsync -j ACCEPT
       ipchains -A dmz-good -p icmp -j icmp-acc
       ipchains -A dmz-bad -j DENY -l





  7.4.7.  DMZ para bad (externa).



    Restries DMZ:

    Servidor de Mail

    SMTP para rede externa

    Aceitar SMTP da rede interna e externa

    Aceitar POP-3 da rede interna


    Servidor de Nomes

    Enviar DNS para a rede Externa

    Aceitar DNS da rede interna, externa e computador de filtragem de pacotes


    Servidor Web

    Aceitar HTTP da rede interna e externa

    Acesso Rsync da rede interna 


  


       ipchains -A dmz-bad -p tcp -s 192.84.219.128 smtp -j ACCEPT
       ipchains -A dmz-bad -p udp -s 192.84.219.129 domain -j ACCEPT
       ipchains -A dmz-bad -p tcp -s 192.84.219.129 domain -j ACCEPT
       ipchains -A dmz-bad -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
       ipchains -A dmz-bad -p icmp -j icmp-acc
       ipchains -A dmz-bad -j DENY -l





  7.4.8.  Bad (externa) para Good (interna).



    Ns no permitimos nada (no-masquerade) da rede externa para a rede
     interna.

       ipchains -A bad-good -j REJECT





  7.4.9.  Filtragem de pacote para a prpria mquina Linux


     
    Se ns desejamos usar filtragem de pacotes em pacotes vindo da prpria
     mquina, ns precisamos fazer a filtragem no chain de entrada. Ns
     criamos um chain para cada interface de destino:


       ipchains -N bad-if
       ipchains -N dmz-if
       ipchains -N good-if





    Criamos saltos para elas:



       ipchains -A input -d 192.84.219.1 -j bad-if
       ipchains -A input -d 192.84.219.250 -j dmz-if
       ipchains -A input -d 192.168.1.250 -j good-if





  7.4.9.1.  Bad (externa) interface.



    Computador de Filtragem de Pacotes:

    PING em qualquer rede

    TRACEROUTE em qualquer rede

    Acesso DNS


    Interface Externa tambm recebe respostas para pacotes masquerade,
     e erros ICMP para eles e respostas PING.








  ipchains -A bad-if -i ! ppp0 -j DENY -l
  ipchains -A bad-if -p TCP --dport 61000:65096 -j ACCEPT
  ipchains -A bad-if -p UDP --dport 61000:65096 -j ACCEPT
  ipchains -A bad-if -p ICMP --icmp-type pong -j ACCEPT
  ipchains -A bad-if -j icmp-acc
  ipchains -A bad-if -j DENY





  7.4.9.2.  Interface DMZ.



    Restries do computador de filtragem de pacotes:

    PING em qualquer rede

    TRACEROUTE em qualquer rede 

    Acesso DNS


    A interface DMZ recebe respostas DNS, respostas ping e erros ICMP.



       ipchains -A dmz-if -i ! eth0 -j DENY
       ipchains -A dmz-if -p TCP ! -y -s 192.84.219.129 53 -j ACCEPT
       ipchains -A dmz-if -p UDP -s 192.84.219.129 53 -j ACCEPT
       ipchains -A dmz-if -p ICMP --icmp-type pong -j ACCEPT
       ipchains -A dmz-if -j icmp-acc
       ipchains -A dmz-if -j DENY -l





  7.4.9.3.  Good (interna) Interface.



    Restries do computador de filtragem de pacotes:

    PING em qualquer rede

    TRACEROUTE em qualquer rede

    Acesso DNS

    Restries Internas:

    Permitir WWW, ftp, traceroute, ssh para external

    Permitir SMTP para o servidor de Mail

    Prmitir POP-3 para o servidor de Mail

    Permitir DNS para o servidor de Nomes

    Permitir rsync para o servidor Web

    Permitir WWW para o servidor Web

    Permiir ping para o computador de filtragem de pacotes


    Interface interna recebe pings, respostas ping e erros ICMP.



       ipchains -A good-if -i ! eth1 -j DENY
       ipchains -A good-if -p ICMP --icmp-type ping -j ACCEPT
       ipchains -A good-if -p ICMP --icmp-type pong -j ACCEPT
       ipchains -A good-if -j icmp-acc
       ipchains -A good-if -j DENY -l





  7.5. Finalmente


    Apaga-se as regras bloqueadas:


       ipchains -D input 1
       ipchains -D forward 1
       ipchains -D output 1





  8.  Apendice: Diferenas entre ipchains e ipfwadm

  Algumas destas alteraes so resultados de alteraes no kernel, e
  alguns resultados do ipchains sendo diferente de ipfwadm.



  1. Muitos argumentos foram remapeados: maisculas agora indicam um comando,
     e minsculas indicam uma opo.

  2. Chains arbitrrios so suportados, assim at mesmo chains embutidos
     tem nomes completos ao invs de opes.(eg. "input" ao invs de "-I").

  3. A opo "-k" foi retirada: use "! -y".

  4. A opo "-b"  atualmente insere/junta/apaga duas regras, em lugar de
     uma simples regra "bidirecional".

  5. A opo "-b" foi passada para "-C" para fazer duas checagens (uma em cada
     direo).

  6. A opo "-x" para "-l" foi substituida por "-v".

  7. Multiplas portas de origem e destino no so mais suportadas.
     Esperanosamente sendo capaz de negar faixa de portas ser um
     pouco feito para aquilo.

  8. Interfaces podem somente ser especificadas por nome (no endereo).  A semntica
     antiga ser silenciosamente alterada nos kernels srie 2.1 de qualquer
     maneira.

  9. Fragmentos so examinadas, e no permitidos atravs do chain.

  10.
     chains de contas foram praticamente apagados.

  11.
     Protocolos arbitrrios sobre IP foram testados.

  12.
     O antigo procedimento da conferncia SYN e ACK (que foi anteriormente
     ignorada para pacotes no-TCP) foi alterado; a opo SYN no 
     vlida para regras no especficas TCP.

  13.
     Contadores so agora de 64 bits em mquinas de 32 bits.

  14.
     Opes inversas so agora suportadas.

  15.
     Cdigos ICMP so agora suportados.

  16.
     Interfaces curingas so agora suportadas.

  17.
     Manipulaes TOS possuem agora checagem de sanidade: O antido cdigo
     do kernel possuem agora checagem de sanidade: Ipchains agora retorna
     um erro neste caso, tambm para outros casos ilegais.


  8.1.  Tabela de referncia rpida.

  [ Argumentos de comandos so em MAISTULAS, e argumentos de opes so
    em minsculas ]

  Uma coisa a notar, masquerade  especificado por "-j MASQ"; 
  completamente diferente de "-j ACCEPT", e no  tratado meramente
  como efeito de um lado, ao contrrio do que ipfwadm faz.


  ================================================================
  | ipfwadm      | ipchains              | Notes
  ----------------------------------------------------------------
  | -A [both]    | -N acct               | Cria um chain "acct" e tem
  |              |& -I 1 input -j acct   | pacotes de sada e entrada
  |              |& -I 1 output -j acct  | atravessando-o.
  |              |& acct                 |
  ----------------------------------------------------------------
  | -A in        | input                 | Uma regra sem alvo
  ----------------------------------------------------------------
  | -A out       | output                | Uma regra sem alvo
  ----------------------------------------------------------------
  | -F           | forward               | Use isto como [chain].
  ----------------------------------------------------------------
  | -I           | input                 | Use isto como [chain].
  ----------------------------------------------------------------
  | -O           | output                | Use isto como [chain].
  ----------------------------------------------------------------
  | -M -l        | -M -L                 |
  ----------------------------------------------------------------
  | -M -s        | -M -S                 |
  ----------------------------------------------------------------
  | -a policy    | -A [chain] -j POLICY  | (mas veja -r e -m).
  ----------------------------------------------------------------
  | -d policy    | -D [chain] -j POLICY  | (mas veja -r e -m).
  ----------------------------------------------------------------
  | -i policy    | -I 1 [chain] -j POLICY| (mas veja -r e -m).
  ----------------------------------------------------------------
  | -l           | -L                    |
  ----------------------------------------------------------------
  | -z           | -Z                    |
  ----------------------------------------------------------------
  | -f           | -F                    |
  ----------------------------------------------------------------
  | -p           | -P                    |
  ----------------------------------------------------------------
  | -c           | -C                    |
  ----------------------------------------------------------------
  | -P           | -p                    |
  ----------------------------------------------------------------
  | -S           | -s                    | S pega uma porta de uma
  |              |                       | faixa, no mltiplas portas.
  ----------------------------------------------------------------
  | -D           | -d                    | S pega uma porta de uma
  |              |                       | faixa, no mltiplas portas.
  ----------------------------------------------------------------
  | -V           | <none>                | Use -i [nome].
  ----------------------------------------------------------------
  | -W           | -i                    |
  ----------------------------------------------------------------
  | -b           | -b                    | Agora atualmente faz 2 regras.
  ----------------------------------------------------------------
  | -e           | -v                    |
  ----------------------------------------------------------------
  | -k           | ! -y                  | No funciona ao menos que
  |              |                       | -p tcp seja tambm especificado.
  ----------------------------------------------------------------
  | -m           | -j MASQ               |
  ----------------------------------------------------------------
  | -n           | -n                    |
  ----------------------------------------------------------------
  | -o           | -l                    |
  ----------------------------------------------------------------
  | -r [redirpt] | -j REDIRECT [redirpt] |
  ----------------------------------------------------------------
  | -t           | -t                    |
  ----------------------------------------------------------------
  | -v           | -v                    |
  ----------------------------------------------------------------
  | -x           | -x                    |
  ----------------------------------------------------------------
  | -y           | -y                    | No funciona ao menos que
  |              |                       | -p tcp tambm seja especificado.
  ----------------------------------------------------------------




  8.2.  Exemplos de comandos ipfwadm traduzidos

  Antigo comando: ipfwadm -F  -p deny

  Novo comando: ipchains -P forward DENY


  Antigo comando: ipfwadm -F -a m -S 192.168.0.0/24 -D 0.0.0.0/0

  Novo comando: ipchains -A forward -j MASQ -s 192.168.0.0/24 -d
  0.0.0.0/0


  Antigo comando: ipfwadm -I -a accept -V 10.1.2.1 -S 10.0.0.0/8 -D
  0.0.0.0/0

  Novo comando: ipchains -A input -j ACCEPT -i eth0 -s 10.0.0.0/8 -d
  0.0.0.0/0

  (Note que no existe equivalente para especificar interfaces por
  endereo: use o nome da interface.  Nesta mquina, 10.1.2.1
  corresponde a eth0).


  9.  Apndice: Usando o script ipfwadm-wrapper.

  O shell script ipfwadm-wrapper deve ser um plug-in de substituio
  do ipfwadm para compatibilidade com ipfwadm 2.3a.

  A nica caracterstica que foi realmente alterada foi a opo "-V". Quando
  esta  usada, uma alerta  dado. Se a opo "-W" tambm  usada, a
  opo "-V"  ignorada. Caso contrrio, os scripts tentam encontrar
  o nome da interface associada com aquele endereo, usando ifconfig. Se
  aquilo falha (tas como uma interface desativada) ento ele sair com
  uma mensagem de erro.

  Este alerta pode ser retirado alterando "-V" para "-W", ou
  direcionando a sada padro do script para /dev/null.

  Se voc puder encontrar qualquer erro neste script, ou qualquer
  alterao entre o ipfwadm e este script, por favor envie um bug para
  mim: envie um e-mail para ipchains@rustcorp.cm com "BUG-REPORT" no
  assunto. Por favor liste sua verso antiga do ipfwadm (ipfwadm -h), sua
  verso do ipchains (ipchains --version), a verso do script ipfwadm
  wrapper (ipfwadm-wrapper --version). Envie tambm a sada do ipchains-save.
  Agradeo antecipadamente.

  Misture ipchains com este script ipfwadm-wrapper por seu prprio risco.


  10.  Apndice: Agradecimentos.

  Muitos gradecimentos para Michael Neuling, quem escreveu a
  primeira parte do cdigo do IP chains enquanto trabalhava para mim.
  Apologias pblicas para misturar estas idias resultantes, enquanto
  Alan Cox props mais tarde e eu comeei finalmente a implementar, tendo
  visto o erro de meus modos.

  Obrigado a Alan Cox por seu suporte tcnico por E-Mail de 24 Horas,
  e encorajamento.


  Agradecimento a todos os autores do cdigo ipfw e ipfwadm, especialmetne
  Jos Vos. Se levantando nos ombros de gigantes e tudo mais... Isto tambm
  se aplica a Linus Torvalds e todos os hackers de kernel e do userspace.


  Agradecimentos aos diligentes testadores de verses beta e caadores
  de bugs, especialmente  Jordan Mendelson, Shaw Carruthers, Kevin Moule, 
  Dr. Liviu Daia, Helmut Adams, Franck Sicard, Kevin Littlejohn, Matt 
  Kemner, John D. Hardin, Alexey Kuznetsov, Leos Bitto, Jim Kunzman, 
  Gerard Gerritsen, Serge Sivkov, Andrew Burgess, Steve Schmidtke, 
  Richard Offer, Bernhard Weisshuhn, Larry Auton, Ambrose Li, Pavel Krauz, 
  Steve Chadsey, Francesco Potorti` and Alain Knaff.

