pfSense — Regras, Liberação de Sites e Troubleshooting
Regras de firewall via CLI
O pfSense usa o pf (Packet Filter). Acesso: ssh admin@<ip-do-pfsense> (opção 8 para shell).
| Etapa | Comando / Exemplo |
|---|---|
| Sintaxe da regra | pass/block in/out on <iface> from <origem> to <destino> port <porta> |
| Exemplo pass | pass in on em1 from 192.168.1.0/24 to any port 80 |
| Tabela de sites | table <sites_bloqueados> { 157.240.0.0/16, 142.250.0.0/16 } |
| Exemplo block | block out on em1 from 192.168.1.50 to <sites_bloqueados> |
| Aplicar | pfctl -f /etc/pf.conf |
| Verificar regras ativas | pfctl -sr |
Em produção prefira criar regras pelo GUI — o pfSense recria os arquivos a partir do
config.xml.
Liberando sites
Via SquidGuard (Services → SquidGuard Proxy Filter): crie uma Target Category sites_liberados com os domínios, mova para Allow no Groups ACL (antes das regras de bloqueio) e aplique.
Via Firewall Rules: Firewall → Rules → LAN → Add (regra acima dos bloqueios), Action Pass, Destination = alias com os IPs/FQDNs dos sites (Firewall → Aliases).
Se há inspeção SSL no Squid, adicione o domínio também em SSL Man In the Middle Filtering → Splice Only/Bypass.
Troubleshooting — metodologia
Antes de testar regra por regra, confirme: de qual interface/gateway o tráfego sai, a hora exata do problema (logs são sensíveis a timestamp) e o que mudou recentemente (regra nova, alias, pfBlockerNG, atualização).
Cenário: “liberei mas continua bloqueado”
- DNS ou firewall?
Diagnostics → DNS Lookupoudrill <dominio> @127.0.0.1. Não resolve → problema é DNS. - Pacote bloqueado?
Status → System Logs → Firewallouclog /var/log/filter.log | grep <IP>— mostra qual regra pegou. - Regra de liberação sendo usada?
pfctl -sr -v— se o contador de hits não sobe, uma regra acima está roubando o match. - Aliases atualizados? Firewall → Aliases; se usa pfBlockerNG, veja Alerts — causa nº1 de bloqueio “fantasma”.
- Pacote chega?
tcpdump -ni <iface> host <IP>— se nada aparece, o problema é antes do pfSense.
Cenário: lentidão
- Geral ou específica? Geral → CPU/banda; específica → DNS/rota.
top -aSHenetstat -m(mbufs esgotados = lentidão aleatória geral).Status → Gateways— RTT, jitter e packet loss por WAN.- Quem consome banda:
Diagnostics → pfTopoupfctl -ss | grep <IP>(P2P/backup/nuvem são os vilões clássicos). - DNS lento:
drill <dominio> @127.0.0.1e meça o tempo.
Cheat sheet SSH
| Objetivo | Comando |
|---|---|
| Estados ativos | pfctl -ss |
| Regras + hits | pfctl -sr -v |
| Conteúdo de alias/tabela | pfctl -t NOME -T show |
| Log firewall em tempo real | tail -f /var/log/filter.log |
| DNS local | drill dominio.com @127.0.0.1 |
| Capturar tráfego | tcpdump -ni igb0 host IP |
| Throughput por interface | systat -ifstat 1 |
| Recarregar firewall | /etc/rc.filter_configure |
| Reiniciar GUI | /etc/rc.restart_webgui |
| Liberação rápida p/ teste | easyrule pass wan <origem> <destino> <porta> |
Boas práticas
- Anote na descrição da regra o motivo/chamado da liberação.
- Habilite log só nas regras em depuração.
- Use um alias dedicado para liberações pontuais.
- Documente as listas ativas do pfBlockerNG.