Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Firewall PF - Package Filter
Colaboração: Ali Faiez Taha
Data de Publicação: 17 de fevereiro de 2012
Nativo no Sistema Operacional OpenBSD e já portado para outros baseados em BSD, tais como FreeBSD, PCBSB, NetBSD e etc.
Permite fazer NAT, controle de banda, priorização de pacotes e etc.
A grande vantagem do PF, sobre outros tipos de sistemas de Firewall, é possibilidade de criação de macros ( que são variáveis, como em programas, definidas pelo usuário e que podem armazenar ips, interfaces, etc ), tabelas ( listagem de endereços que são filtrados por uma única regra ), scrub ( reprocessamento de pacotes para normalização e desfragmentação ), NAT e regras de filtragem que podem ser feitas de acordo com o modo em que chegam as interfaces de uma máquina.
Um bom tutorial sobre o PF: http://www.openbsd.org/faq/pf/pt/index.html
O objetivo desta dica é criar uma rede Intranet controlada através do Firewall PF. O Sistema Operacional utilizado é o FreeBSD 9.0
O servidor contém duas placas de rede, uma com IP A.B.C.D e a outra que controla a Intranet e com IP 192.168.0.X.
Nas distribuições *BSD o Kernel já está preparado para trabalhar com o PF.
Pode-se fazer alterações no Kernel do FreeBSD e efetuar configurações nos arquivos relacionados ao Firewall PF.
Configurações de Kernel
Editar o Kernel e adicionar o seguinte conteúdo
 device pf
 device pflog
 device pfsync 
 options ALTQ
 options ALTQ_CBQ # Class Bases Queuing (CBQ)
 options ALTQ_RED # Random Early Detection (RED)
 options ALTQ_RIO # RED In/Out
 options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
 options ALTQ_PRIQ # Priority Queuing (PRIQ)
 options ALTQ_NOPCC # Required for SMP build
Essa configuração permite que se tenha Firewall sincronizados (pfsync) e controle de uso de banda (ALTQ). Pode-se alterar as configurações para um firewall mais simples.
Siga o tutorial citado acima para fazer uma configuração de acordo com suas necessidades.
Depois do Kernel compilado e instalado, deve-se configurar o arquivo de inicialização (/etc/rc.conf) com os seguintes parâmetros:
 pf_enable="YES"
 pf_rules="/etc/pf.conf"
 pf_flags=""
 pflog_enable="YES"
 pflog_logfile="/var/log/pf/pflog"
 pflog_flags=""
Isso diz que o Firewall PF está habilitado, indica o arquivo de configuração e os logs gerados pelo Firewall serão armazenados em (/var/log/pf/pflog)
O próximo passo é configurar o arquivo de controle do Firewall PF (/etc/pf.conf)
Exemplo de configuração
 # Rede INTRANET controlada 
 
 ext_if = "rl0"
 ext_addr = "A.B.C.D/32"
 int_if = "vr0"
 int_ip = "192.168.0.1/32"
 int_net = "192.168.0.0/24"
 portas_tcp = "{ 25, 80, 443, 8000, 50000 }"
 portas_udp = "{ 50000 }"
 popimap = "{ 110, 995, 143, 993 }"
 
 # Tabela contendo todos endereços IP atribuidos ao firewall
 table < private > const { 127/8, 192.168/16, 172.16/12, 10/8 }
 table < firewall > const { self }
 table < intranet > const { 192.168.0.0/24 }
 table < permitidos > const { A.B.C.D/32, E.F.G.H/32 } 
 table < rdesktop > const {A.B.C.D/32, E.F.G.H/32 } 
 table < scanners > persist file "/etc/scanners"
 
 # Regras para limites
 set limit { states 10000, frags 5000 }
 set optimization normal
 set block-policy drop
 set require-order yes
 set loginterface $ext_if
 set loginterface $int_if
 
 # Faz scrub em pacotes que chegam
 scrub all
 
 # Redireciona as conexões na porta 3189 para o IP 192.168.0.2
 nat on $ext_if from $int_net to any -> ($ext_if)
 rdr on $ext_if inet proto tcp from < rdesktop > to $ext_addr port 3389 -> 192.168.0.2 port 3389 
 
 # Define o política padrao - Libera tudo
 pass in all
 pass out all
 
 # Libera RDESKTOP para IPs permitidos
 pass in on $ext_if inet proto tcp from < rdesktop > to < permitidos > port 3389 
 
 # Bloqueio de "OS Fingerprinting" do nmap (opção -O), que tenta
 # descobrir o sistema operacional do host.
 # Bloqueia os pacotes TCP que tem flags que podem levar a
 # identificacao do SO.
 block in log quick proto tcp flags FUP/WEUAPRSF
 block in log quick proto tcp flags WEUAPRSF/WEUAPRSF
 block in log quick proto tcp flags SRAFU/WEUAPRSF
 block in log quick proto tcp flags /WEUAPRSF
 block in log quick proto tcp flags SR/SR
 block in log quick proto tcp flags SF/SF
 
 # Aceita tráfego em qualquer direção na interface de loopback 
 pass quick on lo0 all
 pass out quick on lo0 all
 
 # RFC1918
 block drop in quick on $ext_if from < private > to any
 block drop out quick on $ext_if from any to < private >
 
 # Início regras extras 
 # Bloqueia todos os pacotes de entrada mas permite o SSH.
 # Permite passar todos os pacotes de saída e faz os logs dos pacotes bloqueados.
 # Permite uma taxa de conexão 1/10, ou seja: 10 conexões por minutoi, e máximo de 10 conexões.
 
 block in log on $ext_if all
 
 pass in on $ext_if inet proto tcp from < rdesktop > to any port 3389 
 
 pass in on $ext_if proto tcp from any to $ext_if port 22 \
 flags S/SA (max-src-conn 10, max-src-conn-rate 1/10, \
 overload < scanners > flush global)
 
 # Bloqueia o acesso dos proibidos por excesso de tentativas de SSH
 block drop in log on $ext_if proto tcp from < scanners > to $ext_if port 22
 pass in on $ext_if proto tcp from any to $ext_if port $portas_tcp flags S/SA 
 pass in on $ext_if proto udp from any to $ext_if port $portas_udp 
 
 # traceroute
 pass in on $ext_if inet proto udp from any to any port 33433 >< 33626 
 pass in on $ext_if inet proto icmp all icmp-type echoreq
 #
 #regras de saída
 #
 pass out on $ext_if proto { tcp, udp, icmp } all 
 
 # Regras para segurar E-Mail interno só para o servidor.
 block out log on $int_if proto tcp from $int_net to any port 25
 pass out on $int_if proto tcp from $int_net to $int_ip port 25 
 block in log on $int_if proto tcp from any to any port smtp
 block out log on $int_if proto { tcp, udp } from $int_net to any port $popimap 
 
 # Fim das regras extras 
 
 # Ativa proteção contra SPOOF na interface interna
 antispoof quick for $int_if inet
 
 # Permite conexões ssh vindas apenas da rede interna, e se for 
 # de um computador confiável, 192.168.0.2. usa "block return" de 
 # forma que um TCP RST é enviado para derrubar conexões bloqueadas.
 # usa "quick" para que esta regra não seja invalidada por alguma 
 # regra "pass" abaixo.
 block return in quick on $int_if proto tcp from ! 192.168.0.2 to $int_if port ssh flags S/SA
 
 # Permite apenas os IPs permitidos a fazer conexão SSH
 pass in log on $ext_if proto tcp from < permitidos > to ! < firewall > \
 port ssh flags S/SA synproxy state
 
 # Limita em 10 conexões SSH simultaneas, vindas dos IPs autorizados
 pass in quick on $ext_if inet proto tcp from < permitidos > to $ext_addr \
 port 22 flags S/SA (max-src-states 10)
 pass in quick on $ext_if inet proto { tcp, udp } from < permitidos > to $ext_if \
 port 80 flags S/SA 
 
 # Permit incoming ICMP echo requests to this host
 pass in quick log-all on $ext_if inet proto icmp all icmp-type 8 code 0 
 
 # Libera NETBIOS apenas para a Intranet
 pass in log proto { tcp, udp } from < intranet > to < intranet > port { 137, 138, 139 }
 
 ### Bloqueia acesso externo para portas 137,138 e 139
 block out log proto { tcp, udp } from < intranet > to $ext_if port { 137, 138, 139 }
Examine as regras e veja o que está sendo permitido e o que está sendo negado.
O serviço SMTP está bem controlado? Como ele está para a rede Interna?
E os controles de conexão SSH? Como estão?
Tem algum NAT rodando? Como identificar?
E a rede NetBIOS? Está controlada?
Outras configurações necessárias
Colocar no arquivo (/etc/sysctl.conf) o seguinte, para permitir redirecionamento de Pacotes IP:
 net.inet.ip.forwarding=1
Isso deve ser feito poiso Firewall PF vai trabalhar como roteador também.
Criar o diretório /var/log/pf e o arquivo /var/log/pf/pflog, onde serão armazenados os logs do Firewall.
Ajustar o recurso de Rotação de Logs no arquivo /etc/newsyslog.conf. Com a configuração abaixo será armazenado logs de 365 dias.
 /var/log/pf/pflog 600 365 100 @T00 JB /var/run/pflogd.pid
Comandos para controle do Firewall PF
O comando pfctl é essencial. Sua utilização é bastante simples e apresenta poucos argumentos de controle.
Alguns comandos úteis:
	Desabilitar o Firewall
	pfctl -d
	Habilitar o Firewall
	pfctl -e
	Ativar as regras do Firewall
	pfctl -f /etc/pf.conf
	Limpar as regras do Firewall
	/sbin/pfctl -F rules
	Lista as tabelas existentes
	pfctl -s Tables
	Lista o conteúdo de uma tabela
	pfctl -t permitdos -T show
	Adicionar um IP a uma tabela
	pfctl -t spammers -T add 218.70.0.0/16
	Elimina uma IP de uma tabela
	pfctl -t spammers -T delete 218.70.0.0/16
	Limpa as regras de NAT e recarrega o Firewall
	/sbin/pfctl -F nat && /sbin/pfctl -N /etc/pf.conf
	Limpa todas as regras de filtro e recarrega o Firewall
	/sbin/pfctl -F rules && /sbin/pfctl -R /etc/pf.conf
	Mostra informações dos filtros (estatísticas e contadores)
	pfctl -s info
	Mostra a lista atual de filtros de MAPs e redirecionamento e sessões ativas
	/sbin/pfctl -s state
	Estatísticas de cada regra individual
	/sbin/pfctl -s rules -v
	Mostra o uso da memória
	pfctl -s memory
	Mostra informações gerais
	pfctl -s info
	Mostra todas as informações do Firewall
	pfctl -s all
	Mais detalhes do comando pfctl
	man pfctl
	O arquivo /var/log/pf/pflog é um arquivo binário. Deve-se usar o tcpdump para examinar o seu conteúdo
	tcpdump -i pflog0
	Leitura dos logs de atividades do PF
	tcpdump -n -e -ttt -r /var/log/pf/pflog
Criar uma tabela a partir de um arquivo texto que contém uma lista de endereços IP que fazem SPAM: Acrescentar ao arquivo (/etc/pf.conf) o seguinte trecho:
 table persist file "/etc/spammers"
 block in on rl0 from to any
Comandos, aplicativos e Daemons para controle e análise de comportamento do Firewall PF:
Comando: pftop - Verifica tráfego de dados em tempo real pelo Firewall PF.
Aplicativo: pfstat - Coleta dados e gera gráficos estatísticos do Firewall PF.
Aplicativo: bandwidthd - Analisa a largura de banda usada pelos hosts da rede
Daemon: pflogd - Packet Filter logging daemon.
Aplicativo: pfflowd - Converte mensagens de Status do OpenBSD PF (envia via interface pfsync) para Datagramas Cisco NetFlow. Os datagramas podem ser enviados via UDP.
Comando: tcpdump - Utilizado para verificar os logs do Firewall PF e tráfego de rede.
Aplicativo: trafshow - Mostra o tráfego de rede.
Aplicativo: nload - Monitora o tráfego da rede, em tempo real.
Referências
Tabela comparativa dos diversos tipos de firewall existentes
Uma ferramenta gráfica que é excelente para a configuração de Firewalls: Firewall Builder

Mais conteúdos dessa disciplina