{"id":1245,"date":"2026-06-24T18:08:19","date_gmt":"2026-06-24T21:08:19","guid":{"rendered":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/"},"modified":"2026-06-24T18:08:19","modified_gmt":"2026-06-24T21:08:19","slug":"aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd","status":"publish","type":"post","link":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/","title":{"rendered":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD"},"content":{"rendered":"<p><strong>PF Firewall<\/strong> \u00e9, sem exagero, um dos componentes mais impressionantes do ecossistema FreeBSD. Originalmente desenvolvido para o OpenBSD e posteriormente portado e aprimorado para o FreeBSD, o PF (Packet Filter) evoluiu de um simples filtro de pacotes para um sistema completo de firewall stateful com capacidade de NAT, redirecionamento de tr\u00e1fego, balanceamento de carga, QoS (Quality of Service) via ALTQ e gerenciamento din\u00e2mico de regras atrav\u00e9s de \u00e2ncoras (anchors). Em nossos projetos na JRT Technology Solutions, utilizamos o <strong>PF Firewall<\/strong> diariamente como a primeira linha de defesa em servidores de produ\u00e7\u00e3o, appliances de seguran\u00e7a e gateways corporativos \u2014 e ap\u00f3s esta aula, voc\u00ea ter\u00e1 dom\u00ednio suficiente para fazer o mesmo em seus ambientes.<\/p>\n<p>O que torna o <strong>PF Firewall<\/strong> verdadeiramente especial \u00e9 sua sintaxe elegante e leg\u00edvel, que se afasta do pesadelo de iptables que muitos administradores Linux conhecem. Em vez de cadeias e tabelas separadas, o PF trabalha com um \u00fanico arquivo de configura\u00e7\u00e3o (<strong>\/etc\/pf.conf<\/strong>) onde as regras s\u00e3o avaliadas sequencialmente \u2014 a \u00faltima regra que corresponde ao pacote \u00e9 a que prevalece. Essa abordagem, combinada com a capacidade de usar listas (lists), macros, tabelas e fun\u00e7\u00f5es de redirecionamento, permite construir pol\u00edticas de firewall complexas que permanecem compreens\u00edveis e manten\u00edveis mesmo em ambientes com centenas de regras.<\/p>\n<p>Nesta aula, voc\u00ea partir\u00e1 do zero absoluto em <strong>PF Firewall<\/strong> at\u00e9 a constru\u00e7\u00e3o de um conjunto de regras funcional e seguro para um servidor t\u00edpico. Vamos cobrir desde a ativa\u00e7\u00e3o do m\u00f3dulo no kernel, passando pela sintaxe fundamental, cria\u00e7\u00e3o de regras de filtragem stateful, configura\u00e7\u00e3o de NAT e redirecionamento de portas, at\u00e9 t\u00e9cnicas avan\u00e7adas como uso de tabelas para bloqueio din\u00e2mico e cria\u00e7\u00e3o de \u00e2ncoras para gerenciamento modular. Cada comando ser\u00e1 mostrado na \u00edntegra, cada arquivo de configura\u00e7\u00e3o ser\u00e1 exibido por completo e cada sa\u00edda de verifica\u00e7\u00e3o ser\u00e1 documentada \u2014 sem resumos, sem atalhos, sem &#8220;etc.&#8221;.<\/p>\n<p>Ao final desta aula, voc\u00ea ser\u00e1 capaz de proteger um servidor FreeBSD com regras de firewall que filtram tr\u00e1fego por interface, protocolo, porta, endere\u00e7o IP de origem e destino, al\u00e9m de implementar NAT para redes internas, redirecionar portas para servi\u00e7os em containers ou jails, e criar listas din\u00e2micas de bloqueio para mitigar ataques de for\u00e7a bruta em tempo real. Tamb\u00e9m aprender\u00e1 a depurar problemas de conectividade usando as ferramentas nativas do PF como <strong>pfctl<\/strong> e a interpretar os logs do <strong>pflog<\/strong>. Prepare seu terminal, pois esta ser\u00e1 uma aula intensiva e 100% pr\u00e1tica \u2014 o tipo de conte\u00fado que transforma um administrador de sistemas comum em um especialista em seguran\u00e7a de redes com FreeBSD.<\/p>\n<h3>O que voc\u00ea vai aprender nesta aula<\/h3>\n<ul>\n<li>Compreender a arquitetura e a filosofia de design do <strong>PF Firewall<\/strong> no FreeBSD<\/li>\n<li>Ativar o m\u00f3dulo PF no kernel e configurar a inicializa\u00e7\u00e3o autom\u00e1tica via <strong>\/etc\/rc.conf<\/strong><\/li>\n<li>Dominar a sintaxe fundamental de regras: filtragem por interface, protocolo, endere\u00e7o, porta, dire\u00e7\u00e3o e estado<\/li>\n<li>Criar e utilizar <strong>macros<\/strong> e <strong>listas<\/strong> para tornar o <strong>\/etc\/pf.conf<\/strong> limpo e reutiliz\u00e1vel<\/li>\n<li>Construir regras stateful robustas com <strong>keep state<\/strong>, <strong>modulate state<\/strong> e <strong>synproxy state<\/strong><\/li>\n<li>Implementar NAT de sa\u00edda (<strong>nat-to<\/strong>) e redirecionamento de portas (<strong>rdr-to<\/strong>) para cen\u00e1rios reais<\/li>\n<li>Trabalhar com <strong>tabelas<\/strong> para bloqueio din\u00e2mico de endere\u00e7os IP sem recarregar o firewall<\/li>\n<li>Utilizar <strong>\u00e2ncoras (anchors)<\/strong> para gerenciar conjuntos de regras de forma modular e program\u00e1tica<\/li>\n<li>Habilitar e analisar logs detalhados de tr\u00e1fego com <strong>pflog<\/strong> e <strong>tcpdump<\/strong><\/li>\n<li>Testar, depurar e otimizar configura\u00e7\u00f5es usando <strong>pfctl -nf<\/strong>, <strong>pfctl -sr<\/strong> e <strong>pfctl -ss<\/strong><\/li>\n<\/ul>\n<h3>Pr\u00e9-requisitos e Ambiente<\/h3>\n<p>Para executar todos os procedimentos desta aula, voc\u00ea precisar\u00e1 de um sistema FreeBSD 13.2 ou superior instalado e funcionando \u2014 recomendamos a vers\u00e3o 14.0 ou 14.1, que s\u00e3o as vers\u00f5es est\u00e1veis mais recentes \u00e0 data desta publica\u00e7\u00e3o. O sistema pode ser uma m\u00e1quina f\u00edsica, uma VM no bhyve, VirtualBox ou VMware, ou at\u00e9 mesmo uma inst\u00e2ncia em nuvem (AWS, Azure, Vultr) desde que voc\u00ea tenha acesso root. \u00c9 essencial que o Kernel Generic padr\u00e3o esteja em uso, pois ele j\u00e1 inclui o suporte a PF compilado estaticamente ou como m\u00f3dulo carreg\u00e1vel \u2014 n\u00e3o \u00e9 necess\u00e1rio recompilar o kernel, ao contr\u00e1rio do que alguns tutoriais antigos sugerem.<\/p>\n<p>Voc\u00ea tamb\u00e9m precisar\u00e1 de familiaridade b\u00e1sica com o FreeBSD, incluindo navega\u00e7\u00e3o no sistema de arquivos, edi\u00e7\u00e3o de arquivos de configura\u00e7\u00e3o (usaremos <strong>vi<\/strong> e <strong>ee<\/strong> como exemplos), manipula\u00e7\u00e3o de servi\u00e7os via <strong>service<\/strong> e <strong>sysrc<\/strong>, e compreens\u00e3o dos conceitos de rede como endere\u00e7amento IP, m\u00e1scaras de sub-rede, portas TCP\/UDP e diferen\u00e7a entre tr\u00e1fego de entrada (inbound) e sa\u00edda (outbound). Se voc\u00ea concluiu as aulas anteriores deste curso, especialmente a Aula 08 sobre <strong>Jails<\/strong> e a Aula 10 sobre <strong>Rede e Interfaces<\/strong>, estar\u00e1 perfeitamente preparado. Para os testes de conectividade, tenha acesso SSH ao servidor e, idealmente, um segundo host na mesma rede para simular tr\u00e1fego externo.<\/p>\n<p>Nossos especialistas da JRT Technology Solutions recomendam fortemente que voc\u00ea N\u00c3O execute estes procedimentos diretamente em produ\u00e7\u00e3o sem antes test\u00e1-los em um ambiente de laborat\u00f3rio ou homologa\u00e7\u00e3o. O <strong>PF Firewall<\/strong> \u00e9 extremamente poderoso, e uma regra mal posicionada pode derrubar sua conectividade SSH em um piscar de olhos \u2014 felizmente, voc\u00ea aprender\u00e1 t\u00e9cnicas para evitar esse tipo de incidente, incluindo o uso de regras tempor\u00e1rias com timeout e o comando m\u00e1gico <strong>pfctl -nf<\/strong> para valida\u00e7\u00e3o sint\u00e1tica antes da aplica\u00e7\u00e3o.<\/p>\n<table>\n<caption><strong>Tabela 1 \u2014 Ambiente de refer\u00eancia para esta aula<\/strong><\/caption>\n<thead>\n<tr>\n<th>Componente<\/th>\n<th>Especifica\u00e7\u00e3o<\/th>\n<th>Observa\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Sistema Operacional<\/td>\n<td>FreeBSD 14.1-RELEASE<\/td>\n<td>Kernel GEN\u00c9RICO com suporte a PF<\/td>\n<\/tr>\n<tr>\n<td>Interface Prim\u00e1ria<\/td>\n<td>em0 \u2014 IP 192.168.1.100\/24<\/td>\n<td>Conectada \u00e0 rede local<\/td>\n<\/tr>\n<tr>\n<td>Interface Secund\u00e1ria<\/td>\n<td>em1 \u2014 IP 10.0.0.1\/24<\/td>\n<td>Rede interna para testes de NAT<\/td>\n<\/tr>\n<tr>\n<td>Servi\u00e7os em Execu\u00e7\u00e3o<\/td>\n<td>SSH (porta 22), HTTP (porta 80)<\/td>\n<td>Usaremos para testes de filtro<\/td>\n<\/tr>\n<tr>\n<td>Editor de Texto<\/td>\n<td>vi ou ee<\/td>\n<td>\u00c0 sua escolha<\/td>\n<\/tr>\n<tr>\n<td>Acesso<\/td>\n<td>Root ou sudo<\/td>\n<td>Todos os comandos exigem privil\u00e9gios<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>A Hist\u00f3ria e a Filosofia do PF Firewall no FreeBSD<\/h3>\n<p>O <strong>PF Firewall<\/strong> nasceu no projeto OpenBSD em 2001, criado por Daniel Hartmeier como substituto do IPFilter (ipf) de Darren Reed, ap\u00f3s um desentendimento sobre licenciamento que tornou o ipf invi\u00e1vel para a distribui\u00e7\u00e3o. O nome &#8220;PF&#8221; \u00e9 uma abrevia\u00e7\u00e3o direta de <strong>Packet Filter<\/strong>, refletindo sua miss\u00e3o original: filtrar pacotes de rede de forma eficiente, segura e com sintaxe compreens\u00edvel. O FreeBSD importou o c\u00f3digo do PF do OpenBSD 3.5 em 2004 e, desde ent\u00e3o, mant\u00e9m sua pr\u00f3pria \u00e1rvore de desenvolvimento com melhorias espec\u00edficas \u2014 notadamente no suporte a m\u00faltiplas CPUs (SMP), integra\u00e7\u00e3o com VIMAGE para virtualiza\u00e7\u00e3o de pilha de rede e otimiza\u00e7\u00f5es para as syscalls nativas do sistema.<\/p>\n<p>Filosoficamente, o <strong>PF Firewall<\/strong> segue o princ\u00edpio Unix de &#8220;fa\u00e7a uma coisa e fa\u00e7a-a bem&#8221;, mas expande esse conceito para abranger todo o pipeline de processamento de pacotes. Em vez de separar filtragem, NAT e shaping em ferramentas distintas (como acontece no Linux com iptables + conntrack + tc), o PF unifica todas essas fun\u00e7\u00f5es em um \u00fanico subsistema coeso. Isso significa que uma \u00fanica regra pode, simultaneamente, filtrar um pacote, manter seu estado, traduzir seu endere\u00e7o e encaix\u00e1-lo em uma fila de QoS \u2014 tudo declarado de forma linear e audit\u00e1vel. Essa coes\u00e3o reduz drasticamente a superf\u00edcie de bugs e facilita a auditoria de seguran\u00e7a, um dos motivos pelos quais o OpenBSD e o FreeBSD s\u00e3o amplamente utilizados em firewalls e appliances de seguran\u00e7a.<\/p>\n<p>Outro aspecto fundamental da filosofia do <strong>PF Firewall<\/strong> \u00e9 o conceito de <strong>&#8220;\u00faltima regra que corresponde vence&#8221;<\/strong> (last matching rule wins). Diferentemente de outros firewalls onde a primeira regra que casa com o pacote encerra a avalia\u00e7\u00e3o, no PF todas as regras s\u00e3o avaliadas em ordem, e a \u00faltima que der match \u00e9 a aplicada \u2014 a menos que a palavra-chave <strong>quick<\/strong> seja utilizada, que interrompe a avalia\u00e7\u00e3o imediatamente. Essa caracter\u00edstica pode parecer contraintuitiva \u00e0 primeira vista, mas permite construir pol\u00edticas extremamente flex\u00edveis com regras gerais seguidas de exce\u00e7\u00f5es espec\u00edficas. Ao longo desta aula, voc\u00ea internalizar\u00e1 esse comportamento atrav\u00e9s de exemplos pr\u00e1ticos que demonstram tanto o uso do quick quanto a avalia\u00e7\u00e3o sequencial completa.<\/p>\n<p>Vale destacar tamb\u00e9m a influ\u00eancia do PF no mundo al\u00e9m dos BSDs: o pfSense, uma das distribui\u00e7\u00f5es de firewall mais populares do planeta, \u00e9 constru\u00eddo inteiramente sobre o FreeBSD e utiliza o <strong>PF Firewall<\/strong> como engine de filtragem. O OPNsense, seu fork igualmente popular, segue o mesmo caminho. At\u00e9 mesmo a Apple integrou o PF ao macOS e ao iOS como firewall de host, embora com uma interface de configura\u00e7\u00e3o limitada. Em suma, ao dominar o PF no FreeBSD, voc\u00ea est\u00e1 adquirindo conhecimento transfer\u00edvel para uma vasta gama de plataformas e cen\u00e1rios profissionais. Na JRT Technology Solutions, frequentemente reutilizamos conjuntos de regras PF entre appliances FreeBSD, servidores de borda e at\u00e9 mesmo em testes de penetra\u00e7\u00e3o para criar ambientes controlados de rede.<\/p>\n<h3>Sintaxe Fundamental do PF Firewall \u2014 Regras, Listas e Macros<\/h3>\n<p>Antes de escrever uma \u00fanica linha de configura\u00e7\u00e3o, \u00e9 crucial entender a anatomia de uma regra no <strong>PF Firewall<\/strong>. A estrutura b\u00e1sica segue o formato: <strong>a\u00e7\u00e3o dire\u00e7\u00e3o [log] [quick] [on interface] [af] [proto protocolo] from origem [port porta_origem] to destino [port porta_destino] [flags] [state]<\/strong>. Embora pare\u00e7a intimidadora descrita assim, na pr\u00e1tica ela flui naturalmente como uma senten\u00e7a em ingl\u00eas estruturado. Por exemplo: <strong>block in on em0 proto tcp from any to 192.168.1.100 port 22<\/strong> \u2014 essa regra bloqueia tr\u00e1fego TCP de entrada na interface em0, de qualquer origem, destinado ao IP 192.168.1.100 na porta 22 (SSH). A a\u00e7\u00e3o pode ser <strong>pass<\/strong> (permitir) ou <strong>block<\/strong> (bloquear), com variantes como <strong>block drop<\/strong> (descarta silenciosamente) e <strong>block return<\/strong> (responde com RST para TCP ou ICMP unreachable para UDP).<\/p>\n<p>O <strong>PF Firewall<\/strong> oferece tr\u00eas constru\u00e7\u00f5es que elevam sua legibilidade e manutenibilidade a outro patamar: <strong>macros<\/strong>, <strong>listas<\/strong> e <strong>tabelas<\/strong>. As macros s\u00e3o simples substitui\u00e7\u00f5es de texto definidas no topo do arquivo \u2014 por exemplo, <strong>ext_if = &#8220;em0&#8221;<\/strong> permite que voc\u00ea use <strong>$ext_if<\/strong> em todas as regras, facilitando a adapta\u00e7\u00e3o da configura\u00e7\u00e3o a hardware diferente. As listas (definidas entre chaves <strong>{ }<\/strong>) permitem agrupar m\u00faltiplos valores em uma \u00fanica express\u00e3o, como <strong>proto { tcp, udp }<\/strong> ou <strong>port { 22, 80, 443 }<\/strong>. J\u00e1 as tabelas s\u00e3o estruturas de dados em mem\u00f3ria otimizadas para busca r\u00e1pida de endere\u00e7os IP, ideais para armazenar milhares de entradas \u2014 como listas de bloqueio \u2014 sem penalizar o desempenho do firewall.<\/p>\n<p>O tratamento de estado (stateful inspection) \u00e9 outro pilar do <strong>PF Firewall<\/strong>. Por padr\u00e3o, regras <strong>pass<\/strong> n\u00e3o mant\u00eam estado, o que significa que o tr\u00e1fego de retorno n\u00e3o \u00e9 automaticamente permitido. Para habilitar o comportamento stateful, utiliza-se a op\u00e7\u00e3o <strong>keep state<\/strong>, que instrui o PF a criar uma entrada na tabela de estados quando um pacote que corresponde \u00e0 regra \u00e9 visto, permitindo automaticamente o tr\u00e1fego de resposta. Existem varia\u00e7\u00f5es: <strong>modulate state<\/strong> \u00e9 mais forte para conex\u00f5es TCP, randomizando o ISN (Initial Sequence Number) para dificultar ataques de sequestro de sess\u00e3o; <strong>synproxy state<\/strong> atua como proxy do handshake TCP, protegendo servidores contra ataques SYN flood. Em servidores voltados \u00e0 Internet, recomendamos <strong>modulate state<\/strong> para todas as regras de sa\u00edda e <strong>synproxy state<\/strong> para portas de servi\u00e7os p\u00fablicos cr\u00edticos.<\/p>\n<p>Vamos examinar uma regra completa e dissec\u00e1-la linha por linha para solidificar esses conceitos. Considere: <strong>pass in quick on $ext_if proto tcp from any to $ext_if port { 22, 80, 443 } flags S\/SA modulate state<\/strong>. Aqui, <strong>pass in<\/strong> indica que estamos permitindo tr\u00e1fego de entrada; <strong>quick<\/strong> interrompe a avalia\u00e7\u00e3o assim que esta regra casar; <strong>on $ext_if<\/strong> restringe \u00e0 interface definida pela macro; <strong>proto tcp<\/strong> especifica protocolo TCP; <strong>from any to $ext_if port { 22, 80, 443 }<\/strong> define que aceitamos tr\u00e1fego de qualquer origem destinado ao IP da interface externa nas portas listadas; <strong>flags S\/SA<\/strong> exige que sejam pacotes SYN (in\u00edcio de conex\u00e3o TCP) com ACK opcional; <strong>modulate state<\/strong> habilita inspe\u00e7\u00e3o stateful com randomiza\u00e7\u00e3o de ISN. Em nossos projetos na JRT Technology Solutions, regras como esta formam a espinha dorsal de virtualmente todo servidor p\u00fablico que configuramos.<\/p>\n<h3>Instala\u00e7\u00e3o e Ativa\u00e7\u00e3o Passo a Passo do PF Firewall<\/h3>\n<p>Embora o subsistema <strong>PF Firewall<\/strong> j\u00e1 esteja presente no kernel GENERIC do FreeBSD, ele n\u00e3o vem ativado por padr\u00e3o \u2014 uma decis\u00e3o s\u00e1bia que evita que firewalls mal configurados bloqueiem o acesso durante a instala\u00e7\u00e3o inicial. O primeiro passo \u00e9 carregar o m\u00f3dulo de kernel e habilitar o servi\u00e7o para inicializa\u00e7\u00e3o autom\u00e1tica. Come\u00e7aremos verificando se o m\u00f3dulo est\u00e1 dispon\u00edvel e, em seguida, o carregaremos manualmente antes de configurar a inicializa\u00e7\u00e3o permanente. Todos os comandos a seguir devem ser executados como root.<\/p>\n<ol>\n<li><strong>Verificar se o m\u00f3dulo PF est\u00e1 dispon\u00edvel no kernel:<\/strong> Execute <strong>kldstat -v | grep pf<\/strong> para listar m\u00f3dulos carregados que contenham &#8220;pf&#8221; no nome. Em um sistema rec\u00e9m-instalado, provavelmente n\u00e3o retornar\u00e1 nada, indicando que o m\u00f3dulo ainda n\u00e3o foi carregado.<\/li>\n<li><strong>Carregar o m\u00f3dulo PF manualmente:<\/strong> Execute <strong>kldload pf<\/strong>. Este comando insere o m\u00f3dulo pf.ko no kernel em execu\u00e7\u00e3o. Voc\u00ea ouvir\u00e1 um &#8220;clic&#8221; metaf\u00f3rico \u2014 o firewall est\u00e1 tecnicamente ativo, mas sem regras carregadas.<\/li>\n<li><strong>Verificar se o m\u00f3dulo foi carregado com sucesso:<\/strong> Execute novamente <strong>kldstat -v | grep pf<\/strong>. Agora voc\u00ea ver\u00e1 uma linha contendo <strong>pf<\/strong> ou <strong>pf.ko<\/strong>.<\/li>\n<li><strong>Habilitar o carregamento autom\u00e1tico no boot:<\/strong> Edite o arquivo <strong>\/boot\/loader.conf<\/strong> e adicione a linha <strong>pf_load=&#8221;YES&#8221;<\/strong>. Isso instrui o loader a carregar o m\u00f3dulo PF durante a inicializa\u00e7\u00e3o do kernel, antes mesmo do init ser executado.<\/li>\n<li><strong>Habilitar o servi\u00e7o PF no rc.conf:<\/strong> Execute <strong>sysrc pf_enable=&#8221;YES&#8221;<\/strong>. Este comando adiciona ou modifica a vari\u00e1vel no <strong>\/etc\/rc.conf<\/strong>. O servi\u00e7o <strong>pf<\/strong> ser\u00e1 iniciado durante o boot e gerenciado pelo sistema rc.<\/li>\n<li><strong>Habilitar o servi\u00e7o de log pflog:<\/strong> Execute <strong>sysrc pflog_enable=&#8221;YES&#8221;<\/strong> para ativar a interface de logging <strong>pflog0<\/strong>, que capturar\u00e1 pacotes que casam com regras que incluem a palavra-chave <strong>log<\/strong>.<\/li>\n<li><strong>Criar um arquivo pf.conf m\u00ednimo para teste:<\/strong> Por enquanto, criaremos um arquivo que permite todo o tr\u00e1fego. Isso serve para validar que o servi\u00e7o inicia sem erros e que o firewall n\u00e3o bloqueia nada inadvertidamente. Crie <strong>\/etc\/pf.conf<\/strong> com o conte\u00fado: <strong>pass all<\/strong>.<\/li>\n<li><strong>Iniciar o servi\u00e7o PF:<\/strong> Execute <strong>service pf start<\/strong>. O sistema carregar\u00e1 as regras do <strong>\/etc\/pf.conf<\/strong> e ativar\u00e1 o firewall.<\/li>\n<li><strong>Verificar o status:<\/strong> Execute <strong>service pf status<\/strong> ou <strong>pfctl -s info<\/strong> para confirmar que o PF est\u00e1 &#8220;Enabled&#8221; e em execu\u00e7\u00e3o.<\/li>\n<\/ol>\n<p>Agora vamos executar todos estes comandos na ordem exata, com coment\u00e1rios linha a linha para que voc\u00ea entenda exatamente o que est\u00e1 acontecendo em cada etapa.<\/p>\n<pre><code># Passo 1: Verificar se o m\u00f3dulo PF j\u00e1 est\u00e1 carregado\n# kldstat -v lista todos os m\u00f3dulos carregados com informa\u00e7\u00f5es detalhadas\n# grep filtra as linhas que cont\u00eam \"pf\"\nkldstat -v | grep pf\n\n# Passo 2: Carregar o m\u00f3dulo pf.ko no kernel\n# kldload insere um m\u00f3dulo de kernel; pf \u00e9 o nome do m\u00f3dulo (pf.ko)\nkldload pf\n\n# Passo 3: Confirmar que o m\u00f3dulo foi carregado\n# Agora o grep deve retornar uma linha com pf\nkldstat -v | grep pf\n\n# Passo 4: Garantir carregamento autom\u00e1tico do m\u00f3dulo no boot\n# Adicionamos a linha pf_load=\"YES\" ao \/boot\/loader.conf\n# O loader.conf \u00e9 lido pelo boot loader antes do kernel iniciar completamente\necho 'pf_load=\"YES\"' >> \/boot\/loader.conf\n\n# Passo 5: Habilitar o servi\u00e7o pf no rc.conf usando sysrc\n# sysrc \u00e9 uma ferramenta segura para manipular vari\u00e1veis no \/etc\/rc.conf\nsysrc pf_enable=\"YES\"\n\n# Passo 6: Habilitar o servi\u00e7o de logging pflog\n# pflog cria a interface pflog0 que captura logs do firewall\nsysrc pflog_enable=\"YES\"\n\n# Passo 7: Criar arquivo pf.conf m\u00ednimo (permite tudo)\n# Usamos echo com redirecionamento para criar o arquivo\n# ATEN\u00c7\u00c3O: Este arquivo \u00e9 TEMPOR\u00c1RIO apenas para teste de ativa\u00e7\u00e3o\necho 'pass all' > \/etc\/pf.conf\n\n# Passo 8: Iniciar o servi\u00e7o PF\n# service pf start carrega as regras e ativa o firewall\nservice pf start\n\n# Passo 9: Verificar status do PF\n# pfctl -s info mostra informa\u00e7\u00f5es gerais sobre o estado do PF\npfctl -s info<\/code><\/pre>\n<p>A sa\u00edda esperada ap\u00f3s a execu\u00e7\u00e3o bem-sucedida desses comandos deve ser similar \u00e0 mostrada abaixo. Observe atentamente cada linha para confirmar que n\u00e3o houve erros de sintaxe no carregamento.<\/p>\n<pre><code class=\"output\"># Sa\u00edda do Passo 1 (kldstat -v | grep pf) - ANTES de carregar:\n# (nenhuma sa\u00edda, m\u00f3dulo n\u00e3o carregado)\n\n# Sa\u00edda do Passo 2 (kldload pf):\n# (nenhuma sa\u00edda em caso de sucesso; aus\u00eancia de erro = sucesso)\n\n# Sa\u00edda do Passo 3 (kldstat -v | grep pf) - AP\u00d3S carregar:\n 2    1 0xffffffff82600000    59880 pf.ko\n\n# Sa\u00edda do Passo 5 (sysrc pf_enable=\"YES\"):\npf_enable: NO -> YES\n\n# Sa\u00edda do Passo 6 (sysrc pflog_enable=\"YES\"):\npflog_enable: NO -> YES\n\n# Sa\u00edda do Passo 8 (service pf start):\nEnabling pf.\npf enabled\n\n# Sa\u00edda do Passo 9 (pfctl -s info):\nStatus: Enabled for 00:00:05          Debug: Urgent\n\nInterface Stats for em0              IPv4             IPv6\n  Bytes In                      12345678                0\n  Bytes Out                      8765432                0\n  Packets In\n    Passed                        150000                0\n    Blocked                         5000                0\n  Packets Out\n    Passed                        120000                0\n    Blocked                          100                0\n\nState Table                          Total             Rate\n  current entries                       15               \n  searches                           50000            10.0\/s\n  inserts                             2000             0.5\/s\n  removals                            1985             0.4\/s\nCounters\n  match                              30000             8.0\/s\n  bad-offset                             0             0.0\/s\n  fragment                               0             0.0\/s\n  short                                   0             0.0\/s\n  normalize                               0             0.0\/s\n  memory                                   0             0.0\/s\n  bad-timestamp                            0             0.0\/s\n  congestion                                0             0.0\/s\n  ip-option                                  0             0.0\/s\n  proto-cksum                                0             0.0\/s\n  state-mismatch                             15             0.0\/s\n  state-insert                               5             0.0\/s\n  state-limit                                0             0.0\/s\n  src-limit                                  0             0.0\/s\n  synproxy                                   0             0.0\/s\n  map-failed                                  0             0.0\/s<\/code><\/pre>\n<p>Com o <strong>PF Firewall<\/strong> ativo e o arquivo <strong>\/etc\/pf.conf<\/strong> criado (ainda que com a regra permissiva <strong>pass all<\/strong>), voc\u00ea deu o primeiro passo concreto. Nas pr\u00f3ximas se\u00e7\u00f5es, substituiremos essa regra gen\u00e9rica por um conjunto de regras de produ\u00e7\u00e3o criteriosamente elaborado. Mas antes, \u00e9 importante entender que o PF, mesmo com <strong>pass all<\/strong>, j\u00e1 est\u00e1 inspecionando todo o tr\u00e1fego e construindo tabelas de estado \u2014 voc\u00ea pode verificar isso com <strong>pfctl -ss<\/strong> (show states), que exibir\u00e1 todas as conex\u00f5es stateful atualmente conhecidas pelo firewall.<\/p>\n<h3>Cria\u00e7\u00e3o do Arquivo \/etc\/pf.conf \u2014 Configura\u00e7\u00e3o Base Completa para Produ\u00e7\u00e3o<\/h3>\n<p>Agora vamos substituir o arquivo tempor\u00e1rio <strong>pass all<\/strong> por uma configura\u00e7\u00e3o robusta e pronta para uso em servidores reais. O arquivo que apresentaremos \u00e9 o resultado de anos de refinamento em implanta\u00e7\u00f5es da JRT Technology Solutions, equilibrando seguran\u00e7a, desempenho e manutenibilidade. A configura\u00e7\u00e3o segue o princ\u00edpio de <strong>&#8220;negar tudo por padr\u00e3o, permitir apenas o necess\u00e1rio&#8221;<\/strong> (default deny), que \u00e9 a base de qualquer pol\u00edtica de firewall respons\u00e1vel. Trabalharemos com macros para interfaces e portas, regras de normaliza\u00e7\u00e3o de pacotes, prote\u00e7\u00e3o anti-spoofing, regras stateful para servi\u00e7os espec\u00edficos e regras de sa\u00edda que permitem ao servidor iniciar conex\u00f5es com a Internet.<\/p>\n<p>O arquivo ser\u00e1 apresentado na \u00edntegra e, em seguida, cada bloco ser\u00e1 explicado em detalhes. Voc\u00ea pode copiar este conte\u00fado diretamente para o seu <strong>\/etc\/pf.conf<\/strong>, ajustando as macros de interface e endere\u00e7os IP conforme seu ambiente. A estrutura \u00e9 modular e comentada extensivamente \u2014 uma pr\u00e1tica que recomendamos veementemente, pois facilita auditorias e manuten\u00e7\u00f5es futuras.<\/p>\n<pre><code># ============================================================================\n# \/etc\/pf.conf \u2014 Configura\u00e7\u00e3o Base do PF Firewall\n# Ambiente: Servidor FreeBSD com interface p\u00fablica\n# \u00daltima atualiza\u00e7\u00e3o: 24\/06\/2026\n# Compat\u00edvel com FreeBSD 13.2+ e 14.x\n# ============================================================================\n\n# --- MACROS (Vari\u00e1veis reutiliz\u00e1veis) ---\n# Defina aqui as interfaces de rede do seu sistema\n# Use ifconfig para listar as interfaces dispon\u00edveis\next_if  = \"em0\"        # Interface externa (voltada para Internet\/LAN)\nint_if  = \"em1\"        # Interface interna (rede privada, opcional)\n\n# Redes diretamente conectadas \u00e0s interfaces\n# Ajuste conforme suas sub-redes reais\next_net = \"192.168.1.0\/24\"\nint_net = \"10.0.0.0\/24\"\n\n# Portas de servi\u00e7os que este servidor oferece PUBLICAMENTE\n# Modifique esta lista conforme seus servi\u00e7os\ntcp_services = \"{ 22, 80, 443 }\"           # SSH, HTTP, HTTPS\nudp_services = \"{ 53 }\"                     # DNS (se este servidor for NS)\n\n# Endere\u00e7os IP confi\u00e1veis (ex: sua VPN, IP de administra\u00e7\u00e3o)\n# Adicione aqui os IPs que podem acessar portas restritas\nadmin_ips  = \"{ 192.168.1.10, 203.0.113.50 }\"\n\n# Portas de administra\u00e7\u00e3o (n\u00e3o devem ser abertas ao p\u00fablico)\nadmin_ports = \"{ 22 }\"\n\n# Endere\u00e7os que NUNCA devem aparecer na interface externa (anti-spoofing)\n# RFC 1918, loopback, multicast, etc.\nmartians = \"{ 127.0.0.0\/8, 10.0.0.0\/8, 172.16.0.0\/12, 192.168.0.0\/16, \\\n              0.0.0.0\/8, 169.254.0.0\/16, 224.0.0.0\/4, 240.0.0.0\/4 }\"\n\n# --- OP\u00c7\u00d5ES GERAIS ---\n# Define pol\u00edtica padr\u00e3o: rejeitar (return) tr\u00e1fego de entrada,\n# mas permitir sa\u00edda. Isso afeta APENAS tr\u00e1fego que n\u00e3o casa com\n# nenhuma regra expl\u00edcita.\nset block-policy return\nset loginterface $ext_if\nset skip on lo0              # Ignorar interface loopback (performance)\nset state-policy if-bound    # Estados vinculados \u00e0 interface\nset optimization normal      # Otimiza\u00e7\u00e3o balanceada\nset timeout { tcp.first 120, tcp.established 86400, tcp.closing 900 }\n\n# --- NORMALIZA\u00c7\u00c3O DE PACOTES ---\n# scrub reescreve pacotes para conformidade, elimina fragmentos problem\u00e1ticos\nscrub in all\nscrub out all random-id      # Randomiza IDs IP para ofuscar fingerprint OS\n\n# --- PROTE\u00c7\u00c3O ANTI-SPOOFING ---\n# Bloqueia pacotes de entrada na ext_if com IP de origem que pertence\n# \u00e0s redes internas ou endere\u00e7os inv\u00e1lidos (martians)\nantispoof quick for $ext_if\nblock in quick on $ext_if from $martians to any\nblock out quick on $ext_if from any to $martians\n\n# --- REGRAS DE ENTRADA (INBOUND) ---\n# Regra 1: Permitir tr\u00e1fego de entrada para servi\u00e7os p\u00fablicos\npass in quick on $ext_if proto tcp from any to $ext_if port $tcp_services \\\n    flags S\/SA modulate state\npass in quick on $ext_if proto udp from any to $ext_if port $udp_services \\\n    keep state\n\n# Regra 2: Permitir SSH apenas para IPs administrativos\npass in quick on $ext_if proto tcp from $admin_ips to $ext_if port 22 \\\n    flags S\/SA modulate state\n\n# Regra 3: Permitir ICMP essencial (ping, traceroute, path MTU discovery)\npass in quick on $ext_if proto icmp from any to $ext_if \\\n    icmp-type { echoreq, unreach, timex, paramprob }\n\n# Regra 4: Permitir tr\u00e1fego da rede interna (confi\u00e1vel)\npass in quick on $int_if from $int_net to any keep state\n\n# --- REGRAS DE SA\u00cdDA (OUTBOUND) ---\n# Permitir todo tr\u00e1fego iniciado pelo servidor\npass out quick on $ext_if proto tcp from $ext_if to any modulate state\npass out quick on $ext_if proto udp from $ext_if to any keep state\npass out quick on $ext_if proto icmp from $ext_if to any\n\n# Permitir tr\u00e1fego da rede interna para fora (se este for um gateway)\npass out quick on $ext_if from $int_net to any nat-to ($ext_if) keep state\n\n# --- BLOQUEIO PADR\u00c3O E LOGGING ---\n# Qualquer tr\u00e1fego que chegou at\u00e9 aqui n\u00e3o foi explicitamente permitido.\n# Bloquear e logar.\nblock log all<\/code><\/pre>\n<p>Agora, vamos dissecar os blocos mais importantes deste arquivo. A se\u00e7\u00e3o <strong>MACROS<\/strong> \u00e9 autoexplicativa, mas merece aten\u00e7\u00e3o: observe como a lista <strong>$tcp_services<\/strong> \u00e9 utilizada em uma \u00fanica regra em vez de repetir tr\u00eas regras separadas para portas 22, 80 e 443. Isso reduz o tamanho do ruleset e facilita a manuten\u00e7\u00e3o \u2014 se voc\u00ea adicionar um novo servi\u00e7o na porta 8080, basta alterar a macro. A lista <strong>$admin_ips<\/strong> segue a mesma l\u00f3gica: voc\u00ea pode ter dezenas de IPs administrativos listados sem poluir as regras.<\/p>\n<p>O bloco <strong>OP\u00c7\u00d5ES GERAIS<\/strong> define o comportamento global do <strong>PF Firewall<\/strong>. <strong>set block-policy return<\/strong> faz com que pacotes bloqueados recebam uma resposta ICMP unreachable ou TCP RST, em vez de serem silenciosamente descartados \u2014 isso melhora a experi\u00eancia do usu\u00e1rio leg\u00edtimo (conex\u00f5es falham rapidamente) e dificulta um pouco o reconhecimento de portas por scanners, j\u00e1 que a resposta \u00e9 amb\u00edgua. <strong>set skip on lo0<\/strong> \u00e9 uma otimiza\u00e7\u00e3o importante: o tr\u00e1fego de loopback n\u00e3o precisa ser inspecionado pelo firewall, e pular essa interface reduz a lat\u00eancia de comunica\u00e7\u00e3o entre processos locais. <strong>set state-policy if-bound<\/strong> vincula estados \u00e0 interface espec\u00edfica, impedindo que um estado criado na em0 seja reutilizado por tr\u00e1fego na em1 \u2014 uma medida de seguran\u00e7a sutil mas eficaz contra certos tipos de spoofing.<\/p>\n<p>As regras de <strong>scrub<\/strong> merecem uma men\u00e7\u00e3o especial. <strong>scrub in all<\/strong> normaliza pacotes de entrada, remontando fragmentos e descartando combina\u00e7\u00f5es inv\u00e1lidas de flags TCP. Isso elimina uma classe inteira de ataques baseados em fragmenta\u00e7\u00e3o e evas\u00e3o de firewalls. <strong>scrub out all random-id<\/strong> randomiza o campo Identification do cabe\u00e7alho IP em pacotes de sa\u00edda, dificultando a identifica\u00e7\u00e3o do sistema operacional (OS fingerprinting) por ferramentas como p0f ou nmap. Em ambientes de alta seguran\u00e7a \u2014 como os que configuramos na JRT Technology Solutions para clientes do setor financeiro \u2014, estas regras de scrub s\u00e3o consideradas obrigat\u00f3rias.<\/p>\n<h3>Verificando a Instala\u00e7\u00e3o \/ Testando a Configura\u00e7\u00e3o<\/h3>\n<p>Com o arquivo <strong>\/etc\/pf.conf<\/strong> completo em m\u00e3os, o pr\u00f3ximo passo \u00e9 validar a sintaxe e carregar as regras de forma segura. O <strong>PF Firewall<\/strong> oferece um comando de valida\u00e7\u00e3o que verifica toda a configura\u00e7\u00e3o sem aplic\u00e1-la \u2014 \u00e9 o <strong>pfctl -nf<\/strong>, e ele deve ser sua primeira a\u00e7\u00e3o sempre que voc\u00ea modificar o arquivo. Jamais execute <strong>service pf restart<\/strong> sem antes validar, pois um erro de sintaxe pode deixar o firewall em estado inconsistente ou, pior, descarregar todas as regras e expor o servidor. Siga o procedimento abaixo em seu terminal.<\/p>\n<pre><code># Passo 1: Validar a sintaxe do arquivo pf.conf sem aplicar\n# -n : n\u00e3o carrega as regras (no-op mode), apenas verifica sintaxe\n# -f : especifica o arquivo de configura\u00e7\u00e3o\npfctl -nf \/etc\/pf.conf\n\n# Passo 2: Se a valida\u00e7\u00e3o retornar sem erros, carregar as novas regras\n# -f : carrega o arquivo especificado, substituindo as regras atuais\npfctl -f \/etc\/pf.conf\n\n# Passo 3: Verificar as regras ativas (forma resumida)\n# -sr : show rules (exibe as regras como est\u00e3o na mem\u00f3ria)\npfctl -sr\n\n# Passo 4: Verificar as regras ativas com contadores de hits\n# -vsr : verbose show rules (inclui estat\u00edsticas de uso)\npfctl -vsr\n\n# Passo 5: Verificar a tabela de estados atual\n# -ss : show states (conex\u00f5es stateful ativas)\npfctl -ss | head -20\n\n# Passo 6: Verificar informa\u00e7\u00f5es gerais do PF (status, contadores, interfaces)\npfctl -s info\n\n# Passo 7: Listar todas as tabelas definidas (mesmo que vazias)\npfctl -s Tables\n\n# Passo 8: Testar conectividade \u2014 tente um ping para o servidor\n# Execute de OUTRA m\u00e1quina ou do pr\u00f3prio servidor via loopback\nping -c 4 192.168.1.100\n\n# Passo 9: Testar acesso SSH \u2014 tente conectar de um IP autorizado\nssh usuario@192.168.1.100\n\n# Passo 10: Verificar logs do firewall (se houver regras com 'log')\n# O comando tcpdump l\u00ea a interface pflog0\ntcpdump -n -e -ttt -i pflog0<\/code><\/pre>\n<p>A valida\u00e7\u00e3o sint\u00e1tica com <strong>pfctl -nf \/etc\/pf.conf<\/strong> \u00e9 silenciosa quando bem-sucedida \u2014 nenhuma sa\u00edda significa que n\u00e3o h\u00e1 erros. Se houver problemas, o PF indicar\u00e1 a linha exata e uma descri\u00e7\u00e3o do erro. Abaixo est\u00e1 a sa\u00edda esperada para uma configura\u00e7\u00e3o correta, seguida da listagem das regras ativas ap\u00f3s o carregamento.<\/p>\n<pre><code class=\"output\"># Sa\u00edda de pfctl -nf \/etc\/pf.conf (valida\u00e7\u00e3o bem-sucedida):\n# (nenhuma sa\u00edda \u2014 sil\u00eancio = sucesso)\n\n# Sa\u00edda de pfctl -sr (regras ativas ap\u00f3s carregamento):\nscrub in all fragment reassemble\nscrub out all random-id fragment reassemble\nblock drop in quick on ! em0 inet from 192.168.1.0\/24 to any\nblock drop in quick on ! em1 inet from 10.0.0.0\/24 to any\nblock drop in quick inet from 192.168.1.100 to any\nblock drop in quick on em0 from 127.0.0.0\/8 to any\nblock drop in quick on em0 from 10.0.0.0\/8 to any\nblock drop in quick on em0 from 172.16.0.0\/12 to any\nblock drop in quick on em0 from 192.168.0.0\/16 to any\nblock drop in quick on em0 from 0.0.0.0\/8 to any\nblock drop in quick on em0 from 169.254.0.0\/16 to any\nblock drop in quick on em0 from 224.0.0.0\/4 to any\nblock drop in quick on em0 from 240.0.0.0\/4 to any\nblock drop out quick on em0 from any to 127.0.0.0\/8\nblock drop out quick on em0 from any to 10.0.0.0\/8\nblock drop out quick on em0 from any to 172.16.0.0\/12\nblock drop out quick on em0 from any to 192.168.0.0\/16\nblock drop out quick on em0 from any to 0.0.0.0\/8\nblock drop out quick on em0 from any to 169.254.0.0\/16\nblock drop out quick on em0 from any to 224.0.0.0\/4\nblock drop out quick on em0 from any to 240.0.0.0\/4\npass in quick on em0 proto tcp from any to 192.168.1.100 port = 22 flags S\/SA modulate state\npass in quick on em0 proto tcp from any to 192.168.1.100 port = 80 flags S\/SA modulate state\npass in quick on em0 proto tcp from any to 192.168.1.100 port = 443 flags S\/SA modulate state\npass in quick on em0 proto udp from any to 192.168.1.100 port = 53 keep state\npass in quick on em0 proto tcp from 192.168.1.10 to 192.168.1.100 port = 22 flags S\/SA modulate state\npass in quick on em0 proto tcp from 203.0.113.50 to 192.168.1.100 port = 22 flags S\/SA modulate state\npass in quick on em0 proto icmp from any to 192.168.1.100 icmp-type echoreq keep state\npass in quick on em0 proto icmp from any to 192.168.1.100 icmp-type unreach keep state\npass in quick on em0 proto icmp from any to 192.168.1.100 icmp-type timex keep state\npass in quick on em0 proto icmp from any to 192.168.1.100 icmp-type paramprob keep state\npass in quick on em1 inet from 10.0.0.0\/24 to any keep state\npass out quick on em0 proto tcp from 192.168.1.100 to any modulate state\npass out quick on em0 proto udp from 192.168.1.100 to any keep state\npass out quick on em0 proto icmp from 192.168.1.100 to any\npass out quick on em0 inet from 10.0.0.0\/24 to any nat-to (em0) keep state\nblock log all\n\n# Sa\u00edda de pfctl -s info (ap\u00f3s carregar):\nStatus: Enabled for 00:05:32          Debug: Urgent\n\nInterface Stats for em0              IPv4             IPv6\n  Bytes In                      98765432                0\n  Bytes Out                     45678901                0\n  Packets In\n    Passed                        450000                0\n    Blocked                        15000                0\n  Packets Out\n    Passed                        380000                0\n    Blocked                          500                0\n\nState Table                          Total             Rate\n  current entries                      120               \n  searches                          250000            15.0\/s\n  inserts                            12000             0.8\/s\n  removals                           11880             0.8\/s\n\n# Sa\u00edda de tcpdump -n -e -ttt -i pflog0 (exemplo com tr\u00e1fego bloqueado):\n# tcpdump: verbose output suppressed, use -v or -vv for full protocol decode\n# listening on pflog0, link-type PFLOG (OpenBSD pflog file), capture size 262144 bytes\n# 00:00:01.000000 rule 45\/0(match): block in on em0: 203.0.113.99.54321 > 192.168.1.100.22: Flags [S], seq 123456789<\/code><\/pre>\n<p>Observe na sa\u00edda do <strong>pfctl -sr<\/strong> como as macros foram expandidas: <strong>$tcp_services<\/strong> gerou tr\u00eas regras separadas (portas 22, 80, 443), cada uma com seus respectivos flags e modulate state. As regras de antispoofing tamb\u00e9m se expandiram em m\u00faltiplas linhas bloqueando cada bloco de endere\u00e7os martians. Este \u00e9 o comportamento esperado \u2014 internamente, o PF expande listas e macros antes de compilar o ruleset. A \u00faltima linha da sa\u00edda, <strong>block log all<\/strong>, \u00e9 nossa rede de seguran\u00e7a: qualquer pacote que n\u00e3o tenha sido explicitamente permitido pelas regras anteriores ser\u00e1 bloqueado e registrado no <strong>pflog0<\/strong>. O exemplo do tcpdump mostra um pacote bloqueado: uma tentativa de conex\u00e3o SSH vinda do IP 203.0.113.99 (n\u00e3o listado em $admin_ips) sendo descartada pela regra 45.<\/p>\n<h3>Trabalhando com Tabelas no PF Firewall \u2014 Bloqueio Din\u00e2mico e Listas de IPs<\/h3>\n<p>Uma das funcionalidades mais poderosas do <strong>PF Firewall<\/strong> \u00e9 o suporte a <strong>tabelas<\/strong> \u2014 estruturas de dados em mem\u00f3ria otimizadas para armazenar e consultar grandes conjuntos de endere\u00e7os IP com complexidade O(1) (tempo constante). Diferentemente das listas est\u00e1ticas definidas entre chaves no arquivo pf.conf, as tabelas podem ser manipuladas em tempo real via <strong>pfctl -t<\/strong>, sem necessidade de recarregar todo o ruleset. Isso abre possibilidades como: integra\u00e7\u00e3o com scripts de fail2ban para bloqueio autom\u00e1tico de atacantes; manuten\u00e7\u00e3o de blacklists de IPs maliciosos baixadas da Internet; whitelists din\u00e2micas de IPs de clientes confi\u00e1veis; e at\u00e9 mesmo balanceamento de carga usando tabelas de redirecionamento.<\/p>\n<p>Tabelas s\u00e3o definidas no arquivo pf.conf usando a sintaxe <strong>table &lt;nome&gt; { endere\u00e7os }<\/strong> e referenciadas nas regras com <strong>&lt;nome&gt;<\/strong> (entre colchetes angulares). Vamos criar um exemplo pr\u00e1tico: uma tabela chamada <strong>&lt;bruteforce&gt;<\/strong> que armazenar\u00e1 IPs que excederem um limite de tentativas de conex\u00e3o SSH, e uma regra que bloqueia todos os endere\u00e7os presentes nessa tabela. Este \u00e9 o mecanismo que utilizamos na JRT Technology Solutions como base para sistemas anti-for\u00e7a bruta em servidores expostos \u00e0 Internet.<\/p>\n<pre><code># Conte\u00fado adicional para \/etc\/pf.conf (adicione ap\u00f3s as macros e antes das regras)\n\n# --- TABELAS ---\n# Tabela para bloqueio din\u00e2mico de IPs maliciosos\ntable <bruteforce> persist\n\n# Tabela para whitelist de IPs confi\u00e1veis (nunca ser\u00e3o bloqueados)\ntable <whitelist> persist { 192.168.1.10, 10.0.0.5 }\n\n# Tabela para IPs de servi\u00e7os externos confi\u00e1veis (ex: APIs internas)\ntable <trusted_hosts> { 203.0.113.100, 198.51.100.50 }\n\n# --- REGRA DE BLOQUEIO POR TABELA ---\n# Deve vir ANTES das regras de permiss\u00e3o para ser efetiva\n# Bloqueia silenciosamente (drop) qualquer tr\u00e1fego de IPs na tabela bruteforce\nblock drop quick from <bruteforce> to any\n\n# --- Exemplo de regra que usa whitelist combinada com restri\u00e7\u00e3o ---\n# SSH permitido apenas para IPs na whitelist OU admin_ips\npass in quick on $ext_if proto tcp from { <whitelist>, $admin_ips } \\\n    to $ext_if port 22 flags S\/SA modulate state<\/code><\/pre>\n<p>Agora, vejamos como manipular a tabela <strong>&lt;bruteforce&gt;<\/strong> dinamicamente a partir da linha de comando. O comando <strong>pfctl -t bruteforce -T<\/strong> \u00e9 a porta de entrada para todas as opera\u00e7\u00f5es: adicionar, remover, listar e testar endere\u00e7os. N\u00e3o \u00e9 necess\u00e1rio recarregar o firewall \u2014 as altera\u00e7\u00f5es entram em vigor imediatamente.<\/p>\n<pre><code># Adicionar um IP \u00e0 tabela de bloqueio<br \/>\n# -t bruteforce : seleciona a tabela<br \/>\n# -T add : opera\u00e7\u00e3o de adi\u00e7\u00e3o<br \/>\npfctl -t<\/p>\n<div style=\"margin:52px 0 40px;padding:36px 28px;background:linear-gradient(135deg,#0f172a 0%,#1a2744 100%);border:2px solid #25D366;border-radius:18px;text-align:center;box-shadow:0 4px 28px rgba(37,211,102,0.18)\">\n<p style=\"margin:0 0 10px;font-size:18px;color:#ffffff;font-weight:700;line-height:1.4\">Quer aprender na pr\u00e1tica com especialistas?<\/p>\n<p style=\"margin:0 0 28px;font-size:15px;color:#94a3b8;font-weight:400;line-height:1.6\">A JRT Technology Solutions oferece treinamentos e implementa\u00e7\u00e3o de FreeBSD para equipes corporativas.<\/p>\n<p>  <a href=\"https:\/\/api.whatsapp.com\/send\/?phone=5521980606699&#038;text=Ol%C3%A1!%20Tenho%20interesse%20no%20treinamento%20de%20FreeBSD.&#038;type=phone_number&#038;app_absent=0\"\n     target=\"_blank\" rel=\"noopener noreferrer\"\n     style=\"display:inline-flex;align-items:center;gap:12px;background:#25D366;color:#ffffff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:16px;font-weight:700;padding:15px 32px;border-radius:100px;text-decoration:none;box-shadow:0 4px 16px rgba(37,211,102,0.45);letter-spacing:0.01em\"><br \/>\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"#ffffff\"><path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z\"\/><\/svg><br \/>\n    Falar no WhatsApp<br \/>\n  <\/a>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Descubra como configurar o PF Firewall no FreeBSD e proteja sua rede com este guia completo. Aprenda do zero ao avan\u00e7ado!<\/p>\n","protected":false},"author":1,"featured_media":1244,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"iawp_total_views":4,"footnotes":""},"categories":[63],"tags":[2124,2121,2125,18,2122,2123],"class_list":["post-1245","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-freebsd","tag-configuracao-pf","tag-firewall-freebsd","tag-firewall-nativo-freebsd","tag-gerenciamento-de-firewall","tag-pf-firewall","tag-seguranca-de-rede-freebsd"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Descubra como configurar o PF Firewall no FreeBSD e proteja sua rede com este guia completo. Aprenda do zero ao avan\u00e7ado!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Thiago Paes Rodrigues\"\/>\n\t<meta name=\"google-site-verification\" content=\"QKPfpDCzHmzKyfFk5j1KZW3HhROYTPeqwBN5qcJ8qcg\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_BR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"BLOG - JRT Technology Solutions - Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD - BLOG - JRT Technology Solutions\" \/>\n\t\t<meta property=\"og:description\" content=\"Descubra como configurar o PF Firewall no FreeBSD e proteja sua rede com este guia completo. Aprenda do zero ao avan\u00e7ado!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"100\" \/>\n\t\t<meta property=\"og:image:height\" content=\"75\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-06-24T21:08:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-06-24T21:08:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61590814880509\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD - BLOG - JRT Technology Solutions\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Descubra como configurar o PF Firewall no FreeBSD e proteja sua rede com este guia completo. Aprenda do zero ao avan\u00e7ado!\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#blogposting\",\"name\":\"Aula 12: PF Firewall \\u2014 o firewall nativo e poderoso do FreeBSD - BLOG - JRT Technology Solutions\",\"headline\":\"Aula 12: PF Firewall \\u2014 o firewall nativo e poderoso do FreeBSD\",\"author\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/ai-image-1782335290400.jpg\",\"width\":1536,\"height\":1024,\"caption\":\"Aula 12: PF Firewall \\u2014 o firewall nativo e poderoso do FreeBSD\"},\"datePublished\":\"2026-06-24T18:08:19-03:00\",\"dateModified\":\"2026-06-24T18:08:19-03:00\",\"inLanguage\":\"pt-BR\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#webpage\"},\"articleSection\":\"FreeBSD, configura\\u00e7\\u00e3o PF, firewall FreeBSD, firewall nativo FreeBSD, gerenciamento de firewall, PF Firewall, seguran\\u00e7a de rede FreeBSD\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/jrtx.com.br\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/#listItem\",\"name\":\"FreeBSD\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/#listItem\",\"position\":2,\"name\":\"FreeBSD\",\"item\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#listItem\",\"name\":\"Aula 12: PF Firewall \\u2014 o firewall nativo e poderoso do FreeBSD\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#listItem\",\"position\":3,\"name\":\"Aula 12: PF Firewall \\u2014 o firewall nativo e poderoso do FreeBSD\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/#listItem\",\"name\":\"FreeBSD\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\",\"name\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"description\":\"Um espa\\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\\u00e1tica e atual. Aqui voc\\u00ea encontra novidades, an\\u00e1lises, tutoriais e reflex\\u00f5es sobre inova\\u00e7\\u00e3o, intelig\\u00eancia artificial, gadgets, programa\\u00e7\\u00e3o e tend\\u00eancias digitais. Nosso objetivo \\u00e9 simplificar o complexo, ajudar voc\\u00ea a se manter atualizado e transformar conhecimento em pr\\u00e1tica no seu dia a dia.\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/\",\"telephone\":\"+552138277513\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/cropped-logo-mini.jpg\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#organizationLogo\",\"width\":100,\"height\":75},\"image\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61590814880509\",\"https:\\\/\\\/www.instagram.com\\\/jrtx.tech\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/\",\"name\":\"Thiago Paes Rodrigues\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cdfdf5f766c59d9c9acab959751c31c3442acd94d4b2927c51d2a0c31b50822?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Thiago Paes Rodrigues\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#webpage\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/\",\"name\":\"Aula 12: PF Firewall \\u2014 o firewall nativo e poderoso do FreeBSD - BLOG - JRT Technology Solutions\",\"description\":\"Descubra como configurar o PF Firewall no FreeBSD e proteja sua rede com este guia completo. Aprenda do zero ao avan\\u00e7ado!\",\"inLanguage\":\"pt-BR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/ai-image-1782335290400.jpg\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#mainImage\",\"width\":1536,\"height\":1024,\"caption\":\"Aula 12: PF Firewall \\u2014 o firewall nativo e poderoso do FreeBSD\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/06\\\/24\\\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\\\/#mainImage\"},\"datePublished\":\"2026-06-24T18:08:19-03:00\",\"dateModified\":\"2026-06-24T18:08:19-03:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/\",\"name\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"alternateName\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"description\":\"Um espa\\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\\u00e1tica e atual. Aqui voc\\u00ea encontra novidades, an\\u00e1lises, tutoriais e reflex\\u00f5es sobre inova\\u00e7\\u00e3o, intelig\\u00eancia artificial, gadgets, programa\\u00e7\\u00e3o e tend\\u00eancias digitais. Nosso objetivo \\u00e9 simplificar o complexo, ajudar voc\\u00ea a se manter atualizado e transformar conhecimento em pr\\u00e1tica no seu dia a dia.\",\"inLanguage\":\"pt-BR\",\"publisher\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD - BLOG - JRT Technology Solutions","description":"Descubra como configurar o PF Firewall no FreeBSD e proteja sua rede com este guia completo. Aprenda do zero ao avan\u00e7ado!","canonical_url":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"QKPfpDCzHmzKyfFk5j1KZW3HhROYTPeqwBN5qcJ8qcg","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#blogposting","name":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD - BLOG - JRT Technology Solutions","headline":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD","author":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"publisher":{"@id":"https:\/\/jrtx.com.br\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/06\/ai-image-1782335290400.jpg","width":1536,"height":1024,"caption":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD"},"datePublished":"2026-06-24T18:08:19-03:00","dateModified":"2026-06-24T18:08:19-03:00","inLanguage":"pt-BR","mainEntityOfPage":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#webpage"},"isPartOf":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#webpage"},"articleSection":"FreeBSD, configura\u00e7\u00e3o PF, firewall FreeBSD, firewall nativo FreeBSD, gerenciamento de firewall, PF Firewall, seguran\u00e7a de rede FreeBSD"},{"@type":"BreadcrumbList","@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog#listItem","position":1,"name":"Home","item":"https:\/\/jrtx.com.br\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/#listItem","name":"FreeBSD"}},{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/#listItem","position":2,"name":"FreeBSD","item":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/","nextItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#listItem","name":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD"},"previousItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#listItem","position":3,"name":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD","previousItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/#listItem","name":"FreeBSD"}}]},{"@type":"Organization","@id":"https:\/\/jrtx.com.br\/blog\/#organization","name":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","description":"Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","url":"https:\/\/jrtx.com.br\/blog\/","telephone":"+552138277513","logo":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#organizationLogo","width":100,"height":75},"image":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61590814880509","https:\/\/www.instagram.com\/jrtx.tech\/"]},{"@type":"Person","@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author","url":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/","name":"Thiago Paes Rodrigues","image":{"@type":"ImageObject","@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cdfdf5f766c59d9c9acab959751c31c3442acd94d4b2927c51d2a0c31b50822?s=96&d=mm&r=g","width":96,"height":96,"caption":"Thiago Paes Rodrigues"}},{"@type":"WebPage","@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#webpage","url":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/","name":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD - BLOG - JRT Technology Solutions","description":"Descubra como configurar o PF Firewall no FreeBSD e proteja sua rede com este guia completo. Aprenda do zero ao avan\u00e7ado!","inLanguage":"pt-BR","isPartOf":{"@id":"https:\/\/jrtx.com.br\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#breadcrumblist"},"author":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"creator":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/06\/ai-image-1782335290400.jpg","@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#mainImage","width":1536,"height":1024,"caption":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD"},"primaryImageOfPage":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/#mainImage"},"datePublished":"2026-06-24T18:08:19-03:00","dateModified":"2026-06-24T18:08:19-03:00"},{"@type":"WebSite","@id":"https:\/\/jrtx.com.br\/blog\/#website","url":"https:\/\/jrtx.com.br\/blog\/","name":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","alternateName":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","description":"Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","inLanguage":"pt-BR","publisher":{"@id":"https:\/\/jrtx.com.br\/blog\/#organization"}}]},"og:locale":"pt_BR","og:site_name":"BLOG - JRT Technology Solutions - Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","og:type":"article","og:title":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD - BLOG - JRT Technology Solutions","og:description":"Descubra como configurar o PF Firewall no FreeBSD e proteja sua rede com este guia completo. Aprenda do zero ao avan\u00e7ado!","og:url":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/","og:image":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","og:image:secure_url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","og:image:width":100,"og:image:height":75,"article:published_time":"2026-06-24T21:08:19+00:00","article:modified_time":"2026-06-24T21:08:19+00:00","article:publisher":"https:\/\/www.facebook.com\/profile.php?id=61590814880509","twitter:card":"summary_large_image","twitter:title":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD - BLOG - JRT Technology Solutions","twitter:description":"Descubra como configurar o PF Firewall no FreeBSD e proteja sua rede com este guia completo. Aprenda do zero ao avan\u00e7ado!","twitter:image":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg"},"aioseo_meta_data":{"post_id":"1245","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-06-29 20:32:55","updated":"2026-06-29 20:32:55","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/jrtx.com.br\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/\" title=\"FreeBSD\">FreeBSD<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tAula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/jrtx.com.br\/blog"},{"label":"FreeBSD","link":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/"},{"label":"Aula 12: PF Firewall \u2014 o firewall nativo e poderoso do FreeBSD","link":"https:\/\/jrtx.com.br\/blog\/2026\/06\/24\/aula-12-pf-firewall-o-firewall-nativo-e-poderoso-do-freebsd\/"}],"_links":{"self":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts\/1245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1245"}],"version-history":[{"count":0,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts\/1245\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/media\/1244"}],"wp:attachment":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}