SlideShare uma empresa Scribd logo
1 de 17
PF: O Filtro de Pacotes do OpenBSD




                                              Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• OpenBSD
  o   Sobre o OpenBSD
  o   Objetivos do Projeto

• pf Básico
  o   Listas, Macros e Tabelas
  o   Filtragem de Pacotes
  o   NAT (Tradução do Endereço de Rede)
  o   Redirecionamento de Tráfego

• pf Avançado
  o   Âncoras
  o   Enfileiramento e Priorização de Tráfego
  o   Balanceamento de Carga
  o   Marcação de Pacotes

• Referências de Pesquisa
                                                                 Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                   Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Sobre o OpenBSD                                                                                     OpenBSD
  o   Baseado no 4.4BSD
  o   Códigos Fonte e Binário são Livres
  o   Multiplataforma

  o   Licenciamento do OpenBSD
        Universidade da California (Berkeley)
        Internet Systems Consortium (ISC)

  o   Appliances Comerciais
        Vantronix
        Syscall Network Solutions
        RTMX

  o   Equipe de Colaboradores
  o   Coordenado por Theo de Raadt



                                                                    Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                      Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Objetivos do Projeto                                                                            OpenBSD
  o   Promover a melhor plataforma de desenvolvimento possível
  o   Seguir e implementar padrões
        ANSI, POSIX, X/Open, …
  o   Lançar uma versão aproximadamente a cada seis meses
  o   Prover um bom sistema multiplataforma.
  o   Qualquer um pode usar para QUALQUER FIM, sem restrições
        Produtos Comerciais
        Hardware/Software para OpenBSD
        Máquinas com OpenBSD Pré-instalado
  o   Não deixar problemas sérios sem solução
  o   Tentar ser o sistema operacional #1 em segurança




                                                                Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                  Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Listas, Macros e Tabelas                                                                               pf Básico
  o   Primeiros Passos
        pfctl(8)
        /etc/rc.conf.local
        /etc/pf.conf

  o   Listas
        block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any
            block out on fxp0 from 192.168.0.1 to any
            block out on fxp0 from 10.5.32.6 to any
        pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }
            pass in on fxp0 from 10.0.0.0/8
            pass in on fxp0 from !10.1.2.3

  o   Múltiplas Listas
        block out on fxp0 proto { tcp udp } from { 192.168.0.1, 10.5.32.6 } 
         to any port { ssh telnet }



                                                                      Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                        Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Listas, Macros e Tabelas                                                                              pf Básico
  o   Macros
        ext_if="fxp0“
            block in on $ext_if from any to any

  o   Macros Expandidas
        friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"
        host1 = "192.168.1.1"
        host1 = "192.168.1.2"
             all_hosts = "{" $host1 $host2 "}“
  o   Tabelas
        table <goodguys> { 192.0.2.0/24 }
        table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }
        table <spammers> persist file "/etc/pf/tables/spammers“
            block in on fxp0 from { <rfc1918>, <spammers> } to any
            pass in on fxp0 from <goodguys> to any




                                                                     Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                       Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Filtragem de Pacotes                                                                                    pf Básico
  o   Sintaxe das Regras
        ação [direção] [log] [quick] [on interface] [família] [proto protocolo] 
         [from origem [port porta]] [to destino [port porta]] 
            [flags sinalizador/máscara] [estado]

  o   Exemplos
        pass in on $ext_if proto tcp to $web_server port www
        pass in on fxp0 proto tcp from any to any port ssh flags S/SA
        pass in on $ext_if proto tcp from any to $web_server port www 
          flags S/SA synproxy state

  o   Impressões Digitais de Sistemas Operacionais
        /etc/pf.os
        pass in on $ext_if from any os OpenBSD
        block in on $ext_if from any os "Windows 2000"




                                                                       Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                         Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• NAT (Tradução do Endereço de Rede)                                                                      pf Básico
  o   RFC1918
  o   /etc/sysctl.conf
        net.inet.ip.forwarding = 1
        net.inet6.ip6.forwarding = 1
  o   Sintaxe das Regras
        nat [pass] [log] on interface [família] from origem [port porta] 
         to destino [port porta] -> endereço externo [grupo] [porta]

• Redirecionamento de Tráfego
  o   Exemplos
        rdr on tl0 proto tcp from any to any port 80 -> 192.168.1.20
        rdr on $ext_if proto tcp from any to $ext_if port 80 -> $server port 80
        rdr on tl0 proto tcp from any to any port 5000:5500 -> 192.168.1.20 
         port 6000
        rdr on tl0 proto tcp from any to any port 5000:5500 -> 192.168.1.20 
         port 7000:*


                                                                       Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                         Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD




                                              Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Âncoras                                                                                       pf Avançado
   o   “loading”
         anchor goodguys
         load anchor goodguys:ssh from "/etc/anchor-goodguys-ssh"
   o   pfctl(8)

    # echo "pass in proto tcp from 192.0.2.3 to any port 22" | pfctl -a goodguys -f -
• pf.conf>> /etc/anchor-goodguys-www
    # cat
   o anchor "goodguys" {
    pass in proto tcp from 192.0.2.3 to any port 80
    pass in proto tcp from 192.0.2.4 to any port to port 22
     pass in proto tcp from 192.168.2.3 { 80 443 }
    #}
     pfctl -a goodguys -f /etc/anchor-goodguys-www




                                                                      Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                        Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Enfileiramento e Priorização                                                                pf Avançado
  o   Schedulers (Escalonadores)
        FIFO – First IN, First OUT
        CBQ – Class Based Queueing
        PRIQ – Priority Queueing

  o   Detecção do Tráfego Enfileirado
        RED – Random Early Detection

  o   Notificações de Congestionamento
        ECN – Explicit Congestion Notification
        RFC 3168

  o   ALTQ – Alternate Queueing
        OpenBSD 3.0
        OpenBSD 3.3 & pf




                                                                    Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                      Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Enfileiramento e Priorização                                                                 pf Avançado
  o   Sintaxes
        altq on interface escalonador bandwidth largura qlimit 
         limite tbrsize tamanho queue { filas }

        queue nome [on interface] bandwidth largura [priority prioridade] 
         [qlimit limite] escalonador ( opções ) { filas }

  o   Exemplo
        altq on fxp0 cbq bandwidth 2Mb queue { std, ssh, ftp }
        queue std bandwidth 50% cbq (default)
        queue ssh bandwidth 25% { ssh_login, ssh_bulk }
            queue ssh_login bandwidth 25% priority 4 cbq (ecn)
            queue ssh_bulk bandwidth 75% cbq (ecn)
        queue ftp bandwidth 500Kb priority 3 cbq (borrow red)




                                                                     Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                       Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Balanceamento de Carga                                                                          pf Avançado
  o   Entrada
        web_servers = "{ 10.0.0.10, 10.0.0.11, 10.0.0.13 }"
        rdr on $ext_if proto tcp from any to any port 80 -> 
         $web_servers round-robin sticky-address

  o   Saída
          lan_net = "192.168.0.0/24“
          int_if = "dc0”
          ext_if1 = "fxp0”
          ext_if2 = "fxp1“
          ext_gw1 = "68.146.224.1“
          ext_gw2 = "142.59.76.1“
          pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } 
           round-robin from $lan_net to any keep state




                                                                        Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                          Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Marcação de Pacotes                                                                          pf Avançado
  o   Atribuição de Etiquetas
        pass in on fxp0 all tag [etiqueta]
            pass in on $int_if all tag $int_tag_name keep state

  o   Exemplo
        pass in on $int_if tag INT_NET
        pass in quick on $int_if proto tcp to port 80 tag INT_NET_HTTP
        pass in quick on $int_if from 192.168.1.5




                                                                     Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                       Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
• Marcação de Pacotes                                                                           pf Avançado
  o    Verificação de Etiquetas
         pass out on $ext_if tagged INT_NET
         pass out on $ext_if ! tagged WIFI_NET

  o    Marcação de Quadros Ethernet
      # ifconfig bridge0 rule pass in on fxp0 src 00:DE:AD:BE:EF:00 tag
      USER1 in on fxp0 tagged USER1
          pass




                                                                      Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                        Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD
     • OpenBSD.org                                                                                                Referências de Pesquisa
             o     http://www.openbsd.org/faq/index.html
             o     http://www.openbsd.org/faq/pf/index.html
             o     http://www.openbsd.org/papers

     • The Book of PF, 2nd Edition
             o     http://nostarch.com/pf2.htm

     • Undeadly (OpenBSD Journal)
             o     http://www.undeadly.org

     • Google
             o     http://www.google.com/bsd




Algumas das imagens utilizadas nesta apresentação foram copiadas do exemplar em formato PDF do livro “The Book of PF”, escrito por Peter Hansteen;
O diagrama de exemplo para CARP e pfsync foi copiado do paper “Introduction to PF”, de Ryan McBride, disponível no sítio oficial do projeto OpenBSD.

                                                                                                                        Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                                                                                          Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
PF: O Filtro de Pacotes do OpenBSD




                                              Workshop de Tecnologia em Comunicação de Dados – WTCD 2011
                Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam

Mais conteúdo relacionado

Mais procurados

Administração de servidores Linux
Administração de servidores LinuxAdministração de servidores Linux
Administração de servidores LinuxJoão Sá
 
FreeBsd com Alta Disponibilidade
FreeBsd com Alta DisponibilidadeFreeBsd com Alta Disponibilidade
FreeBsd com Alta DisponibilidadeBoteco 4Linux
 
Apresentando o FreeBSD
Apresentando o FreeBSDApresentando o FreeBSD
Apresentando o FreeBSDflisolmaringa
 
Introdução ao OpenSolaris
Introdução ao OpenSolarisIntrodução ao OpenSolaris
Introdução ao OpenSolarisguest830f1
 
Free BSD - Beatriz Monteiro e Fabio da Costa
Free BSD - Beatriz Monteiro e Fabio da CostaFree BSD - Beatriz Monteiro e Fabio da Costa
Free BSD - Beatriz Monteiro e Fabio da CostaAnderson Favaro
 
FreeBSD para leigos
FreeBSD para leigosFreeBSD para leigos
FreeBSD para leigosPedro Neto
 
Ubuntu 8.04 LTS 2008
Ubuntu 8.04 LTS 2008Ubuntu 8.04 LTS 2008
Ubuntu 8.04 LTS 2008SergioSouza
 
Debian 6: Instalação e Hardening
Debian 6: Instalação e HardeningDebian 6: Instalação e Hardening
Debian 6: Instalação e HardeningBruna Griebeler
 
Implatação de Sistemas de Segurança com Linux
Implatação de Sistemas de Segurança com LinuxImplatação de Sistemas de Segurança com Linux
Implatação de Sistemas de Segurança com LinuxAlvaro Gomes
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxeliezer
 

Mais procurados (18)

Servidores linux
Servidores linuxServidores linux
Servidores linux
 
Administração de servidores Linux
Administração de servidores LinuxAdministração de servidores Linux
Administração de servidores Linux
 
Por que FreeBSD?
Por que FreeBSD?Por que FreeBSD?
Por que FreeBSD?
 
FreeBsd com Alta Disponibilidade
FreeBsd com Alta DisponibilidadeFreeBsd com Alta Disponibilidade
FreeBsd com Alta Disponibilidade
 
Apresentando o FreeBSD
Apresentando o FreeBSDApresentando o FreeBSD
Apresentando o FreeBSD
 
Introdução ao OpenSolaris
Introdução ao OpenSolarisIntrodução ao OpenSolaris
Introdução ao OpenSolaris
 
Free BSD - Beatriz Monteiro e Fabio da Costa
Free BSD - Beatriz Monteiro e Fabio da CostaFree BSD - Beatriz Monteiro e Fabio da Costa
Free BSD - Beatriz Monteiro e Fabio da Costa
 
Free bsd
Free bsdFree bsd
Free bsd
 
FreeBSD para leigos
FreeBSD para leigosFreeBSD para leigos
FreeBSD para leigos
 
FreeBSD
FreeBSDFreeBSD
FreeBSD
 
Ubuntu 8.04 LTS 2008
Ubuntu 8.04 LTS 2008Ubuntu 8.04 LTS 2008
Ubuntu 8.04 LTS 2008
 
Debian 6: Instalação e Hardening
Debian 6: Instalação e HardeningDebian 6: Instalação e Hardening
Debian 6: Instalação e Hardening
 
Administração de Redes Linux - I
Administração de Redes Linux - IAdministração de Redes Linux - I
Administração de Redes Linux - I
 
Segurança no Linux
Segurança no LinuxSegurança no Linux
Segurança no Linux
 
Implatação de Sistemas de Segurança com Linux
Implatação de Sistemas de Segurança com LinuxImplatação de Sistemas de Segurança com Linux
Implatação de Sistemas de Segurança com Linux
 
Ipv6
Ipv6Ipv6
Ipv6
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 
Asterisk
AsteriskAsterisk
Asterisk
 

Semelhante a PF: Filtragem e Segurança com OpenBSD

5 - segurança - firewall
5  - segurança - firewall5  - segurança - firewall
5 - segurança - firewallAndre Peres
 
Firewall em Linux
Firewall em LinuxFirewall em Linux
Firewall em Linuxguest4e5ab
 
Mini Curso - Pen Test - Univem
Mini Curso - Pen Test - UnivemMini Curso - Pen Test - Univem
Mini Curso - Pen Test - Univemevandrovv
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestEdson Celio
 
Ferramentas de ataques
Ferramentas de ataquesFerramentas de ataques
Ferramentas de ataquesCarlos Veiga
 
Sistemas operacionais 14
Sistemas operacionais 14Sistemas operacionais 14
Sistemas operacionais 14Nauber Gois
 
Ferramentas GPL para a segurança de Redes de Computadores - Vanderlei Pollon
Ferramentas GPL para a segurança de Redes de Computadores - Vanderlei PollonFerramentas GPL para a segurança de Redes de Computadores - Vanderlei Pollon
Ferramentas GPL para a segurança de Redes de Computadores - Vanderlei PollonTchelinux
 
IPTables na prática
IPTables na práticaIPTables na prática
IPTables na práticaaptans
 
62282591 senai-curso-avancado-redes
62282591 senai-curso-avancado-redes62282591 senai-curso-avancado-redes
62282591 senai-curso-avancado-redesMarco Guimarães
 
Conceito Ethernet Sniffer em Visual Studio C#
Conceito Ethernet Sniffer em Visual Studio C#Conceito Ethernet Sniffer em Visual Studio C#
Conceito Ethernet Sniffer em Visual Studio C#Max Jeison Prass
 

Semelhante a PF: Filtragem e Segurança com OpenBSD (20)

5 - segurança - firewall
5  - segurança - firewall5  - segurança - firewall
5 - segurança - firewall
 
Redes de computador
Redes de computadorRedes de computador
Redes de computador
 
Netfilter + Iptables
Netfilter + IptablesNetfilter + Iptables
Netfilter + Iptables
 
Firewall em Linux
Firewall em LinuxFirewall em Linux
Firewall em Linux
 
Mini Curso - Pen Test - Univem
Mini Curso - Pen Test - UnivemMini Curso - Pen Test - Univem
Mini Curso - Pen Test - Univem
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentest
 
Glossário de Termos Técnicos em Redes de Computadores
Glossário de Termos Técnicos em Redes de ComputadoresGlossário de Termos Técnicos em Redes de Computadores
Glossário de Termos Técnicos em Redes de Computadores
 
Ferramentas de ataques
Ferramentas de ataquesFerramentas de ataques
Ferramentas de ataques
 
Sistemas operacionais 14
Sistemas operacionais 14Sistemas operacionais 14
Sistemas operacionais 14
 
Unidade3 roteiro
Unidade3 roteiroUnidade3 roteiro
Unidade3 roteiro
 
Skype
SkypeSkype
Skype
 
Unidade 2.2.1 nmap
Unidade 2.2.1 nmapUnidade 2.2.1 nmap
Unidade 2.2.1 nmap
 
Ferramentas GPL para a segurança de Redes de Computadores - Vanderlei Pollon
Ferramentas GPL para a segurança de Redes de Computadores - Vanderlei PollonFerramentas GPL para a segurança de Redes de Computadores - Vanderlei Pollon
Ferramentas GPL para a segurança de Redes de Computadores - Vanderlei Pollon
 
Unidade 2.3 firewall
Unidade 2.3   firewallUnidade 2.3   firewall
Unidade 2.3 firewall
 
IPTables na prática
IPTables na práticaIPTables na prática
IPTables na prática
 
62282591 senai-curso-avancado-redes
62282591 senai-curso-avancado-redes62282591 senai-curso-avancado-redes
62282591 senai-curso-avancado-redes
 
Conceito Ethernet Sniffer em Visual Studio C#
Conceito Ethernet Sniffer em Visual Studio C#Conceito Ethernet Sniffer em Visual Studio C#
Conceito Ethernet Sniffer em Visual Studio C#
 
R&C 0502 07 2
R&C 0502 07 2R&C 0502 07 2
R&C 0502 07 2
 
R&C 0502 07 2
R&C 0502 07 2R&C 0502 07 2
R&C 0502 07 2
 
Aula 05
Aula 05Aula 05
Aula 05
 

PF: Filtragem e Segurança com OpenBSD

  • 1. PF: O Filtro de Pacotes do OpenBSD Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 2. PF: O Filtro de Pacotes do OpenBSD • OpenBSD o Sobre o OpenBSD o Objetivos do Projeto • pf Básico o Listas, Macros e Tabelas o Filtragem de Pacotes o NAT (Tradução do Endereço de Rede) o Redirecionamento de Tráfego • pf Avançado o Âncoras o Enfileiramento e Priorização de Tráfego o Balanceamento de Carga o Marcação de Pacotes • Referências de Pesquisa Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 3. PF: O Filtro de Pacotes do OpenBSD • Sobre o OpenBSD OpenBSD o Baseado no 4.4BSD o Códigos Fonte e Binário são Livres o Multiplataforma o Licenciamento do OpenBSD  Universidade da California (Berkeley)  Internet Systems Consortium (ISC) o Appliances Comerciais  Vantronix  Syscall Network Solutions  RTMX o Equipe de Colaboradores o Coordenado por Theo de Raadt Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 4. PF: O Filtro de Pacotes do OpenBSD • Objetivos do Projeto OpenBSD o Promover a melhor plataforma de desenvolvimento possível o Seguir e implementar padrões  ANSI, POSIX, X/Open, … o Lançar uma versão aproximadamente a cada seis meses o Prover um bom sistema multiplataforma. o Qualquer um pode usar para QUALQUER FIM, sem restrições  Produtos Comerciais  Hardware/Software para OpenBSD  Máquinas com OpenBSD Pré-instalado o Não deixar problemas sérios sem solução o Tentar ser o sistema operacional #1 em segurança Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 5. PF: O Filtro de Pacotes do OpenBSD • Listas, Macros e Tabelas pf Básico o Primeiros Passos  pfctl(8)  /etc/rc.conf.local  /etc/pf.conf o Listas  block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any  block out on fxp0 from 192.168.0.1 to any  block out on fxp0 from 10.5.32.6 to any  pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }  pass in on fxp0 from 10.0.0.0/8  pass in on fxp0 from !10.1.2.3 o Múltiplas Listas  block out on fxp0 proto { tcp udp } from { 192.168.0.1, 10.5.32.6 } to any port { ssh telnet } Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 6. PF: O Filtro de Pacotes do OpenBSD • Listas, Macros e Tabelas pf Básico o Macros  ext_if="fxp0“  block in on $ext_if from any to any o Macros Expandidas  friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"  host1 = "192.168.1.1"  host1 = "192.168.1.2"  all_hosts = "{" $host1 $host2 "}“ o Tabelas  table <goodguys> { 192.0.2.0/24 }  table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }  table <spammers> persist file "/etc/pf/tables/spammers“  block in on fxp0 from { <rfc1918>, <spammers> } to any  pass in on fxp0 from <goodguys> to any Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 7. PF: O Filtro de Pacotes do OpenBSD • Filtragem de Pacotes pf Básico o Sintaxe das Regras  ação [direção] [log] [quick] [on interface] [família] [proto protocolo] [from origem [port porta]] [to destino [port porta]] [flags sinalizador/máscara] [estado] o Exemplos  pass in on $ext_if proto tcp to $web_server port www  pass in on fxp0 proto tcp from any to any port ssh flags S/SA  pass in on $ext_if proto tcp from any to $web_server port www flags S/SA synproxy state o Impressões Digitais de Sistemas Operacionais  /etc/pf.os  pass in on $ext_if from any os OpenBSD  block in on $ext_if from any os "Windows 2000" Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 8. PF: O Filtro de Pacotes do OpenBSD • NAT (Tradução do Endereço de Rede) pf Básico o RFC1918 o /etc/sysctl.conf  net.inet.ip.forwarding = 1  net.inet6.ip6.forwarding = 1 o Sintaxe das Regras  nat [pass] [log] on interface [família] from origem [port porta] to destino [port porta] -> endereço externo [grupo] [porta] • Redirecionamento de Tráfego o Exemplos  rdr on tl0 proto tcp from any to any port 80 -> 192.168.1.20  rdr on $ext_if proto tcp from any to $ext_if port 80 -> $server port 80  rdr on tl0 proto tcp from any to any port 5000:5500 -> 192.168.1.20 port 6000  rdr on tl0 proto tcp from any to any port 5000:5500 -> 192.168.1.20 port 7000:* Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 9. PF: O Filtro de Pacotes do OpenBSD Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 10. PF: O Filtro de Pacotes do OpenBSD • Âncoras pf Avançado o “loading”  anchor goodguys  load anchor goodguys:ssh from "/etc/anchor-goodguys-ssh" o pfctl(8) # echo "pass in proto tcp from 192.0.2.3 to any port 22" | pfctl -a goodguys -f - • pf.conf>> /etc/anchor-goodguys-www # cat o anchor "goodguys" { pass in proto tcp from 192.0.2.3 to any port 80 pass in proto tcp from 192.0.2.4 to any port to port 22 pass in proto tcp from 192.168.2.3 { 80 443 } #} pfctl -a goodguys -f /etc/anchor-goodguys-www Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 11. PF: O Filtro de Pacotes do OpenBSD • Enfileiramento e Priorização pf Avançado o Schedulers (Escalonadores)  FIFO – First IN, First OUT  CBQ – Class Based Queueing  PRIQ – Priority Queueing o Detecção do Tráfego Enfileirado  RED – Random Early Detection o Notificações de Congestionamento  ECN – Explicit Congestion Notification  RFC 3168 o ALTQ – Alternate Queueing  OpenBSD 3.0  OpenBSD 3.3 & pf Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 12. PF: O Filtro de Pacotes do OpenBSD • Enfileiramento e Priorização pf Avançado o Sintaxes  altq on interface escalonador bandwidth largura qlimit limite tbrsize tamanho queue { filas }  queue nome [on interface] bandwidth largura [priority prioridade] [qlimit limite] escalonador ( opções ) { filas } o Exemplo  altq on fxp0 cbq bandwidth 2Mb queue { std, ssh, ftp }  queue std bandwidth 50% cbq (default)  queue ssh bandwidth 25% { ssh_login, ssh_bulk }  queue ssh_login bandwidth 25% priority 4 cbq (ecn)  queue ssh_bulk bandwidth 75% cbq (ecn)  queue ftp bandwidth 500Kb priority 3 cbq (borrow red) Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 13. PF: O Filtro de Pacotes do OpenBSD • Balanceamento de Carga pf Avançado o Entrada  web_servers = "{ 10.0.0.10, 10.0.0.11, 10.0.0.13 }"  rdr on $ext_if proto tcp from any to any port 80 -> $web_servers round-robin sticky-address o Saída  lan_net = "192.168.0.0/24“  int_if = "dc0”  ext_if1 = "fxp0”  ext_if2 = "fxp1“  ext_gw1 = "68.146.224.1“  ext_gw2 = "142.59.76.1“  pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin from $lan_net to any keep state Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 14. PF: O Filtro de Pacotes do OpenBSD • Marcação de Pacotes pf Avançado o Atribuição de Etiquetas  pass in on fxp0 all tag [etiqueta]  pass in on $int_if all tag $int_tag_name keep state o Exemplo  pass in on $int_if tag INT_NET  pass in quick on $int_if proto tcp to port 80 tag INT_NET_HTTP  pass in quick on $int_if from 192.168.1.5 Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 15. PF: O Filtro de Pacotes do OpenBSD • Marcação de Pacotes pf Avançado o Verificação de Etiquetas  pass out on $ext_if tagged INT_NET  pass out on $ext_if ! tagged WIFI_NET o Marcação de Quadros Ethernet # ifconfig bridge0 rule pass in on fxp0 src 00:DE:AD:BE:EF:00 tag USER1 in on fxp0 tagged USER1  pass Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 16. PF: O Filtro de Pacotes do OpenBSD • OpenBSD.org Referências de Pesquisa o http://www.openbsd.org/faq/index.html o http://www.openbsd.org/faq/pf/index.html o http://www.openbsd.org/papers • The Book of PF, 2nd Edition o http://nostarch.com/pf2.htm • Undeadly (OpenBSD Journal) o http://www.undeadly.org • Google o http://www.google.com/bsd Algumas das imagens utilizadas nesta apresentação foram copiadas do exemplar em formato PDF do livro “The Book of PF”, escrito por Peter Hansteen; O diagrama de exemplo para CARP e pfsync foi copiado do paper “Introduction to PF”, de Ryan McBride, disponível no sítio oficial do projeto OpenBSD. Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam
  • 17. PF: O Filtro de Pacotes do OpenBSD Workshop de Tecnologia em Comunicação de Dados – WTCD 2011 Segurança de Redes de Computadores usando PF: O Filtro de Pacotes do OpenBSD – Vinícius Zavam