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
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:
- Python 3.11 ou posterior.
- pfSense com o pacote REST API v2 instalado. Consulte Versões suportadas do pfSense.
- Para a Opção A, uv.
[!IMPORTANT] Este projeto não está publicado no PyPI. Um projeto diferente e não relacionado usa o nome
pfsense-mcp-serverno PyPI, portanto nunca executepip 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ínio | Ferramentas | O Que Você Pode Fazer |
|---|---|---|
| Regras de Firewall | 9 | Criar, atualizar, excluir, reordenar regras. Bloquear IPs em massa. Visualizar o ruleset pf compilado. |
| Aliases | 5 | Gerenciar aliases de host/rede/porta/URL. Adicionar e remover endereços. |
| NAT | 16 | Encaminhamentos de porta, NAT de saída, NAT 1:1 — gerenciamento completo do ciclo de vida. |
| VPN | 51 | Servidores e clientes OpenVPN, túneis IPsec, peers WireGuard — CRUD, status, aplicar. |
| Roteamento | 16 | Gateways, grupos de gateways, rotas estáticas, gerenciamento do gateway padrão. |
| DNS | 23 | Resolvedor Unbound e encaminhador dnsmasq: overrides de host, overrides de domínio, listas de acesso. |
| DHCP | 17 | Concessões, mapeamentos estáticos, pools de endereços, opções personalizadas, configuração do servidor. |
| Certificados | 15 | Certificados, CAs, CRLs — gerar, renovar, exportar PKCS12. |
| Usuários | 12 | Contas de usuário, grupos, configuração de servidor de autenticação LDAP/RADIUS. |
| Interfaces | 14 | Configuração de interface, VLANs, bridges, grupos. |
| Sistema | 43 | Status, configurações, diagnósticos, tabela de estados, histórico de configuração, reinicialização, ping. |
| Serviços | 14 | Iniciar/parar/reiniciar serviços. NTP, cron, SSH, watchdog de serviços. |
| Logs | 4 | Aná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áfego | 12 | Shapers, filas e limitadores para gerenciamento de banda. |
| Agendas | 8 | Agendamento de regras de firewall baseado em tempo. |
| IPs Virtuais | 5 | Gerenciamento de CARP, ProxyARP e IP Alias. |
| Solução de Problemas | 10 | Diagnosticar conectividade, tráfego bloqueado, VPN, DHCP, DNS, HA. Relatório completo de saúde. |
| Pacotes | 49 | HAProxy, ACME/Let's Encrypt, BIND DNS, FreeRADIUS. |
| Utilitário | 9 | Navegaçã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 exigemconfirm=Truepara 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=Truepara 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=truepara expor apenas as 131 ferramentas somente leitura (busca, obtenção, diagnóstico). - Definir
MCP_ALLOWED_TOOLS=create_firewall_rule_advanced,delete_firewall_rulepara 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ão | Pacote REST API | Status |
|---|---|---|
| pfSense CE 2.9.0 | v2.10.2 (mais recente) | Suportado |
| pfSense CE 2.8.1 | v2.10.2 (mais recente) | Verificado |
| pfSense Plus 26.07 | v2.10.2 (mais recente) | Suportado |
| pfSense Plus 26.03.1 | v2.10.2 (mais recente) | Suportado |
| pfSense Plus 26.03 | v2.10.2 (mais recente) | Verificado |
| pfSense Plus 25.11.1 | v2.10.2 (mais recente) | Suportado |
| pfSense Plus 25.11 | v2.7.3 (legado) | Verificado |
| pfSense CE 2.8.0 | v2.7.3 (legado) | Suportado |
| pfSense Plus 24.11 | v2.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.ipsecpskeWireGuardPeer.presharedkeycomo 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étodo | Configuração | Melhor Para |
|---|---|---|
| Autenticação Básica | AUTH_METHOD=basic + nome de usuário/senha | Configuração rápida, usuários locais |
| Chave de API | AUTH_METHOD=api_key + chave de System > REST API > Keys | Automação, contas de serviço |
| JWT | AUTH_METHOD=jwt + nome de usuário/senha | Tokens 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
noexeceno-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ável | Obrigatório | Padrão | Descrição |
|---|---|---|---|
PFSENSE_URL | Sim | — | URL do pfSense (ex.: https://192.168.1.1) |
AUTH_METHOD | api_key | api_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_VERSION | CE_2_8_1 | Atual: 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_SSL | true | false 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_TIMEOUT | 30 | Tempo limite de solicitação em segundos | |
MCP_READ_ONLY | false | Expor apenas ferramentas somente leitura | |
MCP_ENABLE_LOG_FILES | true | Defina 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ável | Padrão | Descrição |
|---|---|---|
ENABLE_HATEOAS | false | Habilitar links HATEOAS nas respostas da API |
LOG_LEVEL | INFO | DEBUG, INFO, WARNING, ERROR |
MCP_TRANSPORT | stdio | stdio ou streamable-http |
MCP_HOST | 127.0.0.1 | Endereço de bind para o modo HTTP |
MCP_PORT | 3000 | Porta para o modo HTTP |
MCP_BIND_ADDR | 127.0.0.1 | Apenas 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_ORIGINS | localhost | Origens permitidas separadas por vírgula |
MCP_AUDIT_LOG | — | Caminho para o arquivo de log de auditoria (linhas JSON) |
MCP_RATE_LIMIT_DELETE | 10 | Máximo de exclusões por 60 segundos |
MCP_RATE_LIMIT_CREATE | 20 | Máximo de criações por 60 segundos |
MCP_RATE_LIMIT_UPDATE | 30 | Máximo de alterações de configurações (update_*, apply_*, enable_*/disable_*) por 60 segundos |
MCP_RATE_LIMIT_CRITICAL | 2 | Máximo de operações críticas por 300 segundos |
MCP_ALLOWED_TOOLS | all | Lista 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_BUFFER | 50 | Entradas de rollback mantidas em memória |
RESPONSE_FORMAT | json | gcf 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):
| Resultado | JSON | GCF | Economia |
|---|---|---|---|
| Regras de firewall | 1.995 | 936 | 53,1% |
| Aliases | 1.065 | 594 | 44,2% |
| Leases DHCP | 2.314 | 1.606 | 30,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:
ToolAnnotationsem todas as 332 ferramentas (readOnlyHint, destructiveHint, idempotentHint)serverInfo.versioneinstructionsfornecidos- 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_idque 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_phase1ecreate_ipsec_phase2ainda 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:
- Faça um fork e crie um branch de funcionalidade
- Rode
python3 -m pytest tests/ -v - 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
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),
ipprotocolde 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_filebrutas (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