pfSense MCP Server

Permite interação em linguagem natural com firewalls pfSense por meio de aplicações GenAI.

Documentação

🛡️ pfSense MCP Server

Gerencie seu firewall pfSense em português simples — a partir do Claude Desktop, Claude Code ou qualquer cliente MCP.

332 ferramentas em todos os subsistemas · formato de comunicação verificado contra a API REST do pfSense · proteções de segurança em cada alteração


Release CI MCP 2025-11-25 pfSense API v2.10.2 Python 3.11–3.13 Tests License: MIT PRs welcome


You:     Block all traffic from 203.0.113.5 on WAN
Claude:  ✓ created block rule  →  ✓ applied changes  →  rollback point: config revision 42

You:     Why can't 192.168.1.50 reach the internet?
Claude:  ran diagnostics → gateway WAN_DHCP is down, and a block rule on LAN matches this host

You:     Add a WireGuard peer for my laptop and show me the config
Claude:  ✓ created peer on tun_wg0  →  here's the client config to import

O pfSense MCP Server conecta o Claude Desktop, o Claude Code e qualquer outro cliente MCP ao seu firewall pfSense. Faça perguntas, diagnostique problemas e altere a configuração por meio de conversa. Toda ação destrutiva exige confirmação explícita, e o servidor registra a revisão de configuração para a qual é possível reverter.

Deixar uma IA alterar um firewall de produção só é seguro se os detalhes estiverem corretos, e foi aí que o trabalho foi investido:

  • Uma camada de teste de contrato verifica o formato de solicitação de cada ferramenta contra o esquema da API REST do pfSense.
  • Toda alteração passa por um pipeline de proteção em várias camadas.
  • O CI executa 661 testes em Python 3.11–3.13, além de um teste de protocolo MCP de ponta a ponta.

Última versão: v1.1.0 · Changelog

[!TIP] Vá direto para o Início Rápido. A configuração leva cerca de dois minutos com uvx, e você não precisa clonar nada. Se este projeto for útil para você, uma ⭐ ajuda outras pessoas a encontrá-lo.

Conteúdo

Por que isto existe · Início rápido · O que você pode fazer · Segurança · Versões suportadas · Autenticação · Implantação · Configuração · Testes · Conformidade MCP · Limitações conhecidas · Arquitetura · Contribuição

Por Que Isto Existe

Gerenciar um firewall pfSense significa clicar em abas da interface web, lembrar nomes de campos e torcer para não errar uma regra que o bloqueie. Com este servidor MCP, você descreve o que deseja em português simples e a IA cuida das chamadas à API REST, valida as entradas e avisa antes que algo destrutivo aconteça.

O que o torna diferente:

  • Toda operação destrutiva exige confirmação explícita e mostra exatamente o que acontecerá
  • A revisão de configuração é capturada antes de toda alteração de alto risco. A resposta fornece o ID da revisão para restaurar em Diagnostics › Backup & Restore › Config History na webGUI, ou avisa explicitamente se nenhuma revisão pôde ser capturada.
  • Limites de taxa em toda ferramenta que altera configuração impedem que um loop descontrolado de IA inunde seu firewall
  • Validação positiva de entrada (IP/porta/MAC/CIDR) além de triagem de path-traversal/XSS, e segredos ocultados dos logs e das respostas de erro da API
  • Formato de comunicação verificado contra o esquema da API REST v2.10.2 do pfSense por uma camada de teste de contrato, para que as ferramentas enviem exatamente o que a API espera

Início Rápido

Pré-requisitos:

[!IMPORTANT] Este projeto não está publicado no PyPI. Um projeto diferente e não relacionado usa o nome pfsense-mcp-server no PyPI, portanto nunca execute pip install pfsense-mcp-server. Instale a partir do Git ou dos arquivos de versão conforme mostrado abaixo.

Opção A: executar sem clonar (uvx):

uvx --from git+https://github.com/gensecaihq/pfsense-mcp-server@v1.1.0 pfsense-mcp-server

Opção B: clonar para desenvolvimento:

git clone https://github.com/gensecaihq/pfsense-mcp-server.git
cd pfsense-mcp-server
pip install -r requirements.txt
cp .env.example .env
# Edit .env: set PFSENSE_URL, AUTH_METHOD, and credentials

Conecte ao Claude Desktop. Adicione o servidor a claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/
  • Windows: %APPDATA%\Claude\

Usando o ponto de entrada instalado (Opção A):

{
  "mcpServers": {
    "pfsense": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/gensecaihq/pfsense-mcp-server@v1.1.0", "pfsense-mcp-server"],
      "env": {
        "PFSENSE_URL": "https://192.168.1.1",
        "AUTH_METHOD": "basic",
        "PFSENSE_USERNAME": "admin",
        "PFSENSE_PASSWORD": "your-password",
        "PFSENSE_VERSION": "CE_2_8_1",
        "PFSENSE_CA_FILE": "/path/to/pfsense-ca.pem"
      }
    }
  }
}

Ou executando a partir de um clone (Opção B):

{
  "mcpServers": {
    "pfsense": {
      "command": "python3",
      "args": ["-m", "src.main"],
      "cwd": "/path/to/pfsense-mcp-server",
      "env": {
        "PFSENSE_URL": "https://192.168.1.1",
        "AUTH_METHOD": "basic",
        "PFSENSE_USERNAME": "admin",
        "PFSENSE_PASSWORD": "your-password",
        "PFSENSE_VERSION": "CE_2_8_1",
        "PFSENSE_CA_FILE": "/path/to/pfsense-ca.pem"
      }
    }
  }
}

Remova PFSENSE_CA_FILE se o certificado do seu pfSense for assinado por uma CA pública.

Sobre o arquivo de CA. O pfSense vem com um certificado autoassinado de sua própria CA, e o Python não lê o armazenamento de confiança do seu sistema operacional, então a verificação falha imediatamente. Exporte a CA em System > Cert. Manager > CAs (o ícone de exportar certificado), salve o PEM em qualquer local legível e aponte PFSENSE_CA_FILE para ele. Um arquivo ausente ou ilegível é um erro de inicialização, nunca um rebaixamento silencioso.

VERIFY_SSL=false também conecta e é aceitável para um laboratório descartável. Entenda o que isso custa: nada autentica o firewall, então qualquer coisa que possa interceptar a conexão pode ler a chave da API e agir como o firewall. Esta ferramenta altera regras de firewall — trate essa credencial de acordo.

Comece a conversar com seu firewall. Abra o Claude Desktop e pergunte:

  • "Mostre todo o tráfego bloqueado na última hora"
  • "Quais serviços estão em execução?"
  • "Crie um encaminhamento de porta para a porta 443 para 192.168.1.50"
  • "Execute uma verificação completa de saúde do sistema"

O Que Você Pode Fazer

332 ferramentas em todos os principais subsistemas do pfSense:

DomínioFerramentasO Que Você Pode Fazer
Regras de Firewall9Criar, atualizar, excluir, reordenar regras. Bloquear IPs em massa. Visualizar o ruleset pf compilado.
Aliases5Gerenciar aliases de host/rede/porta/URL. Adicionar e remover endereços.
NAT16Encaminhamentos de porta, NAT de saída, NAT 1:1 — gerenciamento completo do ciclo de vida.
VPN51Servidores e clientes OpenVPN, túneis IPsec, peers WireGuard — CRUD, status, aplicar.
Roteamento16Gateways, grupos de gateways, rotas estáticas, gerenciamento do gateway padrão.
DNS23Resolvedor Unbound e encaminhador dnsmasq: overrides de host, overrides de domínio, listas de acesso.
DHCP17Concessões, mapeamentos estáticos, pools de endereços, opções personalizadas, configuração do servidor.
Certificados15Certificados, CAs, CRLs — gerar, renovar, exportar PKCS12.
Usuários12Contas de usuário, grupos, configuração de servidor de autenticação LDAP/RADIUS.
Interfaces14Configuração de interface, VLANs, bridges, grupos.
Sistema43Status, configurações, diagnósticos, tabela de estados, histórico de configuração, reinicialização, ping.
Serviços14Iniciar/parar/reiniciar serviços. NTP, cron, SSH, watchdog de serviços.
Logs4Análise de logs de firewall com dados filterlog IPv4/IPv6 analisados. Leituras raw de tail/grep dos arquivos de log dhcpd/filter/resolver/system/auth.
Modelagem de Tráfego12Shapers, filas e limitadores para gerenciamento de banda.
Agendas8Agendamento de regras de firewall baseado em tempo.
IPs Virtuais5Gerenciamento de CARP, ProxyARP e IP Alias.
Solução de Problemas10Diagnosticar conectividade, tráfego bloqueado, VPN, DHCP, DNS, HA. Relatório completo de saúde.
Pacotes49HAProxy, ACME/Let's Encrypt, BIND DNS, FreeRADIUS.
Utilitário9Navegação HATEOAS, gerenciamento de IDs de objetos, status das proteções.

Segurança em Primeiro Lugar

Uma IA gerenciando um firewall de produção precisa de proteções. Este servidor tem 9 camadas:

"Delete firewall rule 5"

  1. CLASSIFY    → HIGH risk (destructive)
  2. ALLOWLIST   → tool is permitted
  3. SANITIZE    → parameters clean (no injection)
  4. RATE LIMIT  → under 10 deletes/minute
  5. DRY RUN?    → user can preview first
  6. CONFIRM     → blocked until confirm=True
  7. BACKUP      → config revision captured
  8. EXECUTE     → API call made
  9. AUDIT LOG   → action recorded with redacted params

Response includes:
  "config_backup": {
    "pre_change_revision_id": 42,
    "rollback_instruction": "To undo this change, restore revision 42 manually in the pfSense webGUI: Diagnostics > Backup & Restore > Config History."
  }

Todas as 201 ferramentas que alteram configuração possuem uma proteção, e um teste falha o build se uma nova for lançada sem ela.

  • Toda ferramenta de alteração tem limite de taxa, registro em auditoria e verificação contra a lista de permissões.
  • Ferramentas de alto risco (51): exclusões, desconexões, reinicialização, desligamento e bloqueio em massa também são bloqueadas até que o chamador passe confirm=True.
  • Ferramentas manage_*: estas exigem confirm=True para suas ações de remoção e exclusão.
  • Segredos: senhas, chaves, PSKs, senhas de bind e tokens são ocultados no log de auditoria e nas respostas de erro ecoadas da API.

confirm=True é um parâmetro que o cliente MCP envia. Não é uma etapa separada de aprovação humana, portanto mantenha os prompts de aprovação de ferramentas do seu cliente ativados para ferramentas destrutivas.

Você também pode:

  • Passar dry_run=True para visualizar qualquer operação destrutiva sem executá-la.
  • Passar verify_descr="Allow HTTPS" para verificar se você está alterando ou excluindo a regra que espera. Isso protege contra IDs de regras que mudam.
  • Definir MCP_READ_ONLY=true para expor apenas as 131 ferramentas somente leitura (busca, obtenção, diagnóstico).
  • Definir MCP_ALLOWED_TOOLS=create_firewall_rule_advanced,delete_firewall_rule para permitir apenas as ferramentas de escrita listadas. As ferramentas de leitura permanecem disponíveis.

Consulte SECURITY.md para a política de divulgação de vulnerabilidades e orientações de endurecimento de implantação.

Versões Suportadas do pfSense

VersãoPacote REST APIStatus
pfSense CE 2.9.0v2.10.2 (mais recente)Suportado
pfSense CE 2.8.1v2.10.2 (mais recente)Verificado
pfSense Plus 26.07v2.10.2 (mais recente)Suportado
pfSense Plus 26.03.1v2.10.2 (mais recente)Suportado
pfSense Plus 26.03v2.10.2 (mais recente)Verificado
pfSense Plus 25.11.1v2.10.2 (mais recente)Suportado
pfSense Plus 25.11v2.7.3 (legado)Verificado
pfSense CE 2.8.0v2.7.3 (legado)Suportado
pfSense Plus 24.11v2.7.3 (legado)Suportado

Requer o pacote pfSense REST API v2 de jaredhendrickson13. O pacote v2.8.x+ fornece builds apenas para CE 2.8.1 e Plus 25.11.1/26.03/26.03.1; CE 2.9.0 e Plus 26.07 precisam de v2.10.1+; v2.7.3 é a última versão com builds para CE 2.8.0 e Plus 24.11/25.11.

Nota de segurança: execute o pacote REST API v2.10.0+. Ele corrige uma falha de injeção de comandos nos endpoints de grupos de interface (GHSA-w3w4-mvcc-vmgr) e adiciona escape automático de comandos do núcleo; v2.9.0 corrigiu uma escalada de privilégio anterior na sincronização de configurações (GHSA-8q8g-9f77-8g8g).

O v2.10.0 também marca OpenVPNClient.auth_pass, User.ipsecpsk e WireGuardPeer.presharedkey como sensíveis, então a API não os retorna mais por padrão. Este servidor ainda os define normalmente; se um fluxo de trabalho precisar ler um deles de volta, adicione uma substituição de campo sensível nas configurações da REST API.

Autenticação

Três métodos suportados (configure em .env):

MétodoConfiguraçãoMelhor Para
Autenticação BásicaAUTH_METHOD=basic + nome de usuário/senhaConfiguração rápida, usuários locais
Chave de APIAUTH_METHOD=api_key + chave de System > REST API > KeysAutomação, contas de serviço
JWTAUTH_METHOD=jwt + nome de usuário/senhaTokens de curta duração, obtidos e renovados automaticamente (presume o tempo de vida padrão de 1 hora do pfSense)

Opções de Implantação

stdio (padrão) — para Claude Desktop e Claude Code:

python3 -m src.main          # from a clone
pfsense-mcp-server           # via the installed console entry point (pip/uvx/pipx)

HTTP: para acesso remoto e configurações com vários clientes. Requer MCP_API_KEY, e o servidor se recusa a iniciar com um token vazio, de espaço reservado ou curto.

export MCP_API_KEY="$(python3 -c 'import secrets; print(secrets.token_urlsafe(32))')"
python3 -m src.main -t streamable-http --port 3000

O transporte HTTP é HTTP simples. Coloque-o atrás de um proxy reverso com terminação TLS antes de expô-lo além de localhost.

Docker: um contêiner endurecido executando o transporte HTTP.

cp .env.example .env        # set PFSENSE_URL, credentials, and MCP_API_KEY
docker compose up -d

A porta publicada vincula-se a 127.0.0.1 por padrão. Defina MCP_BIND_ADDR=0.0.0.0 para expô-la, mas somente atrás de TLS. Para uma CA privada, coloque o PEM em ./certs/ e defina PFSENSE_CA_FILE=/certs/<file>.pem.

Segurança do contêiner:

  • Executa como um usuário não root (mcp:1000).
  • Sistema de arquivos somente leitura, um tmpfs noexec e no-new-privileges.
  • Todas as capacidades Linux removidas.

A verificação de saúde consulta um endpoint /health não autenticado, porque /mcp exige o token de portador.

Atrás de um gateway MCP — o transporte HTTP é um endpoint Streamable HTTP compatível com a especificação com autenticação por token de portador, portanto pode ser registrado como destino de servidor MCP atrás de gateways gerenciados, como AWS Bedrock AgentCore Gateway (use seu provedor de credenciais por chave de API para fornecer o token de portador MCP_API_KEY, e adicione a origem do gateway a MCP_ALLOWED_ORIGINS). Esses gateways adicionam OAuth/IAM centralizado na frente e traduzem entre revisões de protocolo, incluindo 2026-07-28. Nenhum gateway é necessário — isto é puramente uma opção para ambientes que já executam um.

Configuração

VariávelObrigatórioPadrãoDescrição
PFSENSE_URLSim—URL do pfSense (ex.: https://192.168.1.1)
AUTH_METHODapi_keyapi_key, basic ou jwt
PFSENSE_API_KEY*—Chave da API REST
PFSENSE_USERNAME*—Nome de usuário do pfSense (para basic/jwt)
PFSENSE_PASSWORD*—Senha do pfSense (para basic/jwt)
PFSENSE_VERSIONCE_2_8_1Atual: CE_2_8_1, CE_2_9_0, PLUS_25_11_1, PLUS_26_03, PLUS_26_03_1, PLUS_26_07. Legado (ainda aceito): CE_2_8_0, PLUS_24_11, PLUS_25_11, CE_26_03
VERIFY_SSLtruefalse desativa completamente a verificação de certificados — prefira PFSENSE_CA_FILE
PFSENSE_CA_FILE—Arquivo PEM para a CA privada/autoassinada do pfSense, para manter a verificação ativa
API_TIMEOUT30Tempo limite de solicitação em segundos
MCP_READ_ONLYfalseExpor apenas ferramentas somente leitura
MCP_ENABLE_LOG_FILEStrueDefina false para remover get_log_file (leituras /var/log/* brutas via sink de comando)

Configurações booleanas aceitam true/false, 1/0, yes/no ou on/off. Qualquer outro valor interrompe o servidor na inicialização em vez de adivinhar, para que um erro de digitação não possa desativar a verificação TLS.

Todas as opções de configuração
VariávelPadrãoDescrição
ENABLE_HATEOASfalseHabilitar links HATEOAS nas respostas da API
LOG_LEVELINFODEBUG, INFO, WARNING, ERROR
MCP_TRANSPORTstdiostdio ou streamable-http
MCP_HOST127.0.0.1Endereço de bind para o modo HTTP
MCP_PORT3000Porta para o modo HTTP
MCP_BIND_ADDR127.0.0.1Apenas Docker Compose: endereço do host ao qual a porta publicada faz bind
MCP_API_KEY—Token Bearer para transporte HTTP (obrigatório)
MCP_ALLOWED_ORIGINSlocalhostOrigens permitidas separadas por vírgula
MCP_AUDIT_LOG—Caminho para o arquivo de log de auditoria (linhas JSON)
MCP_RATE_LIMIT_DELETE10Máximo de exclusões por 60 segundos
MCP_RATE_LIMIT_CREATE20Máximo de criações por 60 segundos
MCP_RATE_LIMIT_UPDATE30Máximo de alterações de configurações (update_*, apply_*, enable_*/disable_*) por 60 segundos
MCP_RATE_LIMIT_CRITICAL2Máximo de operações críticas por 300 segundos
MCP_ALLOWED_TOOLSallLista de permissões de ferramentas de escrita separadas por vírgula. Ferramentas de leitura estão sempre disponíveis; get_log_file é controlado por MCP_ENABLE_LOG_FILES
MCP_ROLLBACK_BUFFER50Entradas de rollback mantidas em memória
RESPONSE_FORMATjsongcf re-codifica os resultados das ferramentas como Graph Compact Format para menos tokens (requer o extra gcf)

Codificação de Resposta (GCF)

Por padrão, as ferramentas retornam JSON. Definir RESPONSE_FORMAT=gcf retorna cada resultado elegível de ferramenta como um único bloco Graph Compact Format em vez disso: os arrays de registros que essas ferramentas de leitura produzem (regras de firewall, aliases, leases DHCP, certificados, registros DNS) têm seus nomes de campos repetidos fatorados em um único cabeçalho, reduzindo o custo de tokens quando o resultado cruza o limite da LLM. Resultados que não são um único corpo JSON — ou que o GCF não reduziria — permanecem como JSON (veja abaixo).

Instale o extra opcional no ambiente do servidor e defina a variável:

pip install '.[gcf]'        # from a clone of this repo
export RESPONSE_FORMAT=gcf

# or, with uvx (the extra must go into uvx's isolated tool environment):
RESPONSE_FORMAT=gcf uvx --with 'gcf-python[fastmcp]==2.7.1' \
  --from git+https://github.com/gensecaihq/pfsense-mcp-server pfsense-mcp-server

É opt-in e conservador — o GCF é usado apenas quando é menor que o JSON e um round-trip sem perdas verificado; caso contrário, o JSON é mantido, então nenhum registro é descartado ou alterado. structuredContent é preservado, então a validação de esquema de saída e clientes não-modelo continuam recebendo JSON. Se o extra gcf não estiver instalado, o servidor registra um aviso e continua com JSON.

Economia de tokens em resultados representativos de 30 registros (tokens o200k, sem perdas; reproduza com python benchmarks/gcf_benchmark.py):

ResultadoJSONGCFEconomia
Regras de firewall1.99593653,1%
Aliases1.06559444,2%
Leases DHCP2.3141.60630,6%

Testes

python3 -m pytest tests/ -v          # 661 tests
python3 -m pytest tests/ --cov=src   # with coverage (~50%)

A suíte inclui uma camada de contrato de wire (tests/contract/) que verifica o payload de cada ferramenta contra o esquema real da API REST v2.10.2 do pfSense (destilado da especificação OpenAPI upstream), então um nome de campo ou tipo errado é um teste com falha em vez de uma configuração incorreta silenciosa. O CI roda em Python 3.11/3.12/3.13 com varredura de dependências pip-audit.

Além da suíte em processo, um teste de fumaça de protocolo ponta a ponta conduz o servidor pelo protocolo MCP real usando o CLI oficial do MCP Inspector. Ele cobre ambos os transportes e roda no CI a cada push:

make test-e2e            # or: ./scripts/inspector_smoke.sh  (needs node/npx, jq)

Ele verifica o handshake de inicialização, a listagem de 332 ferramentas com anotações, o portão de confirmação de guardrail pelo wire, o modo somente leitura e a autenticação HTTP bearer-auth mais a aplicação de Origin — sem exigir uma instância do pfSense.

Conformidade com a Especificação MCP

Em conformidade com MCP 2025-11-25 — a revisão mais recente com suporte estável ao SDK — e negocia para revisões mais antigas por conexão, para que clientes existentes continuem funcionando:

  • ToolAnnotations em todas as 332 ferramentas (readOnlyHint, destructiveHint, idempotentHint)
  • serverInfo.version e instructions fornecidos
  • Validação do cabeçalho Origin (requisito MUST)
  • Autenticação por token Bearer com comparação de tempo seguro
  • Bind padrão para localhost conforme o SHOULD da especificação
  • Transportes stdio e Streamable HTTP

A revisão sem estado 2026-07-28

MCP 2026-07-28 remove o handshake initialize e as sessões de nível de protocolo, então cada solicitação se sustenta por si só. O suporte ao SDK chega no fastmcp 4, que agora está estável (4.0.5).

Status: esta versão fixa o fastmcp 3.x (MCP 2025-11-25). Um job de CI não bloqueante roda a suíte de testes completa e o teste de fumaça do MCP Inspector contra o fastmcp 4.0.x, e ambos passam sem alterações. O servidor não mantém estado de sessão por design e não usa nenhum dos recursos que o 2026-07-28 deprecia (Roots, Sampling, MCP Logging).

O pin será movido para o fastmcp 4 assim que o teste de fumaça também cobrir solicitações sem sessão, que pulam initialize. O fastmcp 4 negocia a versão do protocolo por conexão, então clientes que usam o handshake continuarão funcionando.

Estrutura do Projeto

src/
  main.py              Entry point (transports, read-only filter, key validation)
  server.py            FastMCP instance + API client
  client.py            pfSense REST API v2 HTTP client (retry/backoff, pooling)
  guardrails.py        Risk classification, confirm gate, rate limit, audit, redaction
  helpers.py           Validation, parsing, pagination, safety guards
  models.py            Data models
  middleware.py        HTTP bearer auth + Origin validation + /health
  tools/               34 tool modules (332 tools)
scripts/
  generate_contract.py Regenerate the wire contract from an OpenAPI spec
  generate_token.py    Generate a secure MCP_API_KEY bearer token
  inspector_smoke.sh   End-to-end MCP protocol smoke test (MCP Inspector CLI)
tests/                 661 tests (incl. tests/contract/ wire-contract suite)

Veja ARCHITECTURE.md para o ciclo de vida da solicitação, modelo de guardrail e camada de contrato de wire; SECURITY.md para divulgação e endurecimento; e RELEASE_AUDIT.md para a auditoria e roadmap.

Limitações Conhecidas

Estas estão rastreadas para a próxima versão:

  • Cerca de 11 ferramentas de atualização/exclusão para objetos aninhados não enviam o parent_id que a API REST exige, então essas chamadas falham (#79). Objetos afetados são pools de endereços DHCP e opções personalizadas, filas do traffic-shaper, entradas de criptografia IPsec e intervalos de tempo de agendamento.
  • create_ipsec_phase1 e create_ipsec_phase2 ainda não enviam as configurações de criptografia aninhadas que a API exige. Corrigi-los precisa de validação contra um pfSense ativo.
  • A API REST não tem endpoint de restauração de configuração, então reverter uma alteração é um passo manual no webGUI. Use o ID de revisão que as ferramentas protegidas retornam.
  • Cada processo do servidor gerencia uma única instância do pfSense.

Contribuindo

Precisamos de testes no mundo real em ambientes diversos de pfSense. Veja CONTRIBUTING ou:

  1. Faça um fork e crie um branch de funcionalidade
  2. Rode python3 -m pytest tests/ -v
  3. Envie um PR

Ideias: testes de integração contra pfSense real, suporte adicional a pacotes (Snort, Suricata), ponte LLM local Ollama, gerenciamento multi-instância.

Licença

MIT

Agradecimentos

  • jaredhendrickson13 / pfrest — pacote da API REST v2 do pfSense
  • JeremiahChurch — reescrita modular (PR #5), salvaguardas de OOM no endpoint de log (PR #6), correção de busca de mapeamento estático DHCP (PR #91)
  • shawnpetersen — descoberta de endpoint da API v2 (PR #3)
  • aemitic — correção de corpo DELETE (PR #9), ipprotocol de firewall para IPv6/dual-stack (PR #10), logconfigchanges (PR #11)
  • pbhorjee — correção de diagnóstico de status ao vivo (PR #21), frescor do log de firewall + filtragem por IP exato (PR #23), guardrail de credencial de redirecionamento (PR #72), correção de nova tentativa de escrita 503 (PR #74), contexto de erro de transporte (PR #75), bloqueio de edição de alias (PR #76), jitter e orçamento de nova tentativa (PR #77), relatório de CA privada (#73)
  • DrewKolstad — endereçamento de interface, filtros de busca null-safe, IPs permitidos WireGuard, tempos de lease DHCP (PR #78)
  • msarg44 — correção de get_pf_table / get_config_revision (PR #80)
  • cbrown350 — leituras de log get_log_file brutas (PR #90)
  • blackwell-systems — codificação de resposta GCF opcional (PR #87)
  • bholland-bh — solicitação de suporte pfSense CE 2.9.0 / Plus 26.07 (#88)
  • hossamnagy — inicialização resiliente em falha de preflight transitória (PR #14)
  • bill-mccormick-dg — correção independente de corpo DELETE (PR #16)
  • w1ld3r — relatórios de bug DELETE e remote-syslog (#12, #13)
  • tvlc — relatório de incompatibilidade de tipo de porta WebGUI (#7)
  • renanwilliam — solicitação de empacotamento uvx/pipx (#8)
  • Netgate — pfSense
  • FastMCP — framework MCP