Marcos Max

Wiki Max - TI

View on GitHub

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”

  1. DNS ou firewall? Diagnostics → DNS Lookup ou drill <dominio> @127.0.0.1. Não resolve → problema é DNS.
  2. Pacote bloqueado? Status → System Logs → Firewall ou clog /var/log/filter.log | grep <IP> — mostra qual regra pegou.
  3. Regra de liberação sendo usada? pfctl -sr -v — se o contador de hits não sobe, uma regra acima está roubando o match.
  4. Aliases atualizados? Firewall → Aliases; se usa pfBlockerNG, veja Alerts — causa nº1 de bloqueio “fantasma”.
  5. Pacote chega? tcpdump -ni <iface> host <IP> — se nada aparece, o problema é antes do pfSense.

Cenário: lentidão

  1. Geral ou específica? Geral → CPU/banda; específica → DNS/rota.
  2. top -aSH e netstat -m (mbufs esgotados = lentidão aleatória geral).
  3. Status → Gateways — RTT, jitter e packet loss por WAN.
  4. Quem consome banda: Diagnostics → pfTop ou pfctl -ss | grep <IP> (P2P/backup/nuvem são os vilões clássicos).
  5. DNS lento: drill <dominio> @127.0.0.1 e 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