O documento apresenta o filtro de pacotes PF do OpenBSD. Discute os objetivos do OpenBSD, as funcionalidades básicas do PF como filtragem, NAT e redirecionamento. Também aborda recursos avançados como âncoras, balanceamento de carga e marcação de pacotes. Referências para pesquisa sobre o PF e OpenBSD são fornecidas no final.
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