pfSense MCP Server

Permite la interacción en lenguaje natural con firewalls pfSense a través de aplicaciones GenAI.

Documentación

🛡️ pfSense MCP Server

Gestiona tu firewall pfSense en lenguaje natural — desde Claude Desktop, Claude Code o cualquier cliente MCP.

332 herramientas en todos los subsistemas · formato de cable verificado contra la API REST de pfSense · protecciones de seguridad en cada cambio


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

pfSense MCP Server conecta Claude Desktop, Claude Code y cualquier otro cliente MCP a tu firewall pfSense. Haz preguntas, diagnostica problemas y cambia la configuración mediante conversación. Cada acción destructiva requiere confirmación explícita, y el servidor registra la revisión de configuración a la que se puede revertir.

Permitir que una IA modifique un firewall de producción solo es seguro si los detalles son correctos, y ahí es donde se ha puesto el esfuerzo:

  • Una capa de pruebas de contrato verifica el formato de solicitud de cada herramienta contra el esquema de la API REST de pfSense.
  • Cada cambio pasa por un pipeline de protección de múltiples capas.
  • CI ejecuta 661 pruebas en Python 3.11–3.13, además de una prueba de protocolo MCP de extremo a extremo.

Última versión: v1.1.0 · Registro de cambios

[!TIP] Ve directamente a la Guía de inicio rápido. La configuración toma unos dos minutos con uvx, y no necesitas clonar nada. Si este proyecto te resulta útil, una ⭐ ayuda a que otros lo encuentren.

Contenido

Por qué existe · Inicio rápido · Qué puedes hacer · Seguridad · Versiones compatibles · Autenticación · Despliegue · Configuración · Pruebas · Cumplimiento MCP · Limitaciones conocidas · Arquitectura · Contribuciones

Por Qué Existe

Gestionar un firewall pfSense significa hacer clic en pestañas de la interfaz web, recordar nombres de campos y esperar no equivocarte con una regla que te deje fuera. Con este servidor MCP, describes lo que quieres en lenguaje natural y la IA se encarga de las llamadas a la API REST, valida las entradas y te advierte antes de que ocurra algo destructivo.

Qué lo hace diferente:

  • Cada operación destructiva requiere confirmación explícita y te muestra exactamente qué va a ocurrir
  • La revisión de configuración se captura antes de cada cambio de alto riesgo. La respuesta proporciona el ID de revisión para restaurar desde Diagnostics › Backup & Restore › Config History en la webGUI, o advierte explícitamente si no se pudo capturar ninguna revisión.
  • Los límites de velocidad en cada herramienta que modifica la configuración evitan que un bucle de IA descontrolado inunde tu firewall
  • Validación positiva de entradas (IP/puerto/MAC/CIDR) más filtrado de path-traversal/XSS, y secretos redactados de los registros y de las respuestas de error de la API
  • Formato de cable verificado contra el esquema de la API REST de pfSense v2.10.2 mediante una capa de pruebas de contrato, para que las herramientas envíen exactamente lo que la API espera

Inicio Rápido

Requisitos previos:

[!IMPORTANT] Este proyecto no está publicado en PyPI. Un proyecto diferente y no relacionado usa el nombre de PyPI pfsense-mcp-server, así que nunca ejecutes pip install pfsense-mcp-server. Instala desde Git o desde los archivos de versión como se muestra a continuación.

Opción A: ejecutar sin clonar (uvx):

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

Opción B: clonar para desarrollo:

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

Conéctate a Claude Desktop. Añade el servidor a claude_desktop_config.json:

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

Usando el punto de entrada instalado (Opción 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"
      }
    }
  }
}

O ejecutando desde un clon (Opción 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"
      }
    }
  }
}

Elimina PFSENSE_CA_FILE si el certificado de tu pfSense está firmado por una CA pública.

Acerca del archivo CA. pfSense incluye un certificado autofirmado de su propia CA, y Python no lee el almacén de confianza de tu sistema operativo, por lo que la verificación falla de forma predeterminada. Exporta la CA en System > Cert. Manager > CAs (el icono de exportar certificado), guarda el PEM en cualquier ubicación legible y apunta PFSENSE_CA_FILE a él. Un archivo faltante o ilegible es un error de inicio, nunca una degradación silenciosa.

VERIFY_SSL=false también se conecta, y es adecuado para un laboratorio desechable. Comprende lo que cuesta: nada autentica el firewall, por lo que cualquier cosa que pueda interceptar la conexión puede leer la clave API y actuar como el firewall. Esta herramienta cambia reglas de firewall — trata esa credencial en consecuencia.

Empieza a hablar con tu firewall. Abre Claude Desktop y pregunta:

  • "Muéstrame todo el tráfico bloqueado en la última hora"
  • "¿Qué servicios están en ejecución?"
  • "Crea una redirección de puerto para el puerto 443 a 192.168.1.50"
  • "Ejecuta una verificación completa de salud del sistema"

Qué Puedes Hacer

332 herramientas en todos los subsistemas principales de pfSense:

DominioHerramientasQué Puedes Hacer
Reglas de Firewall9Crear, actualizar, eliminar, reordenar reglas. Bloquear IPs en bloque. Ver el ruleset pf compilado.
Aliases5Gestionar aliases de host/red/puerto/URL. Añadir y eliminar direcciones.
NAT16Redirecciones de puerto, NAT de salida, NAT 1:1 — gestión completa del ciclo de vida.
VPN51Servidores y clientes OpenVPN, túneles IPsec, pares WireGuard — CRUD, estado, aplicar.
Enrutamiento16Gateways, grupos de gateways, rutas estáticas, gestión del gateway predeterminado.
DNS23Resolvedor Unbound y reenviador dnsmasq: anulaciones de host, anulaciones de dominio, listas de acceso.
DHCP17Concesiones, asignaciones estáticas, pools de direcciones, opciones personalizadas, configuración del servidor.
Certificados15Certificados, CAs, CRLs — generar, renovar, exportar PKCS12.
Usuarios12Cuentas de usuario, grupos, configuración del servidor de autenticación LDAP/RADIUS.
Interfaces14Configuración de interfaces, VLANs, puentes, grupos.
Sistema43Estado, ajustes, diagnósticos, tabla de estados, historial de configuración, reinicio, ping.
Servicios14Iniciar/detener/reiniciar servicios. NTP, cron, SSH, vigilante de servicios.
Registros4Análisis de registros de firewall con datos filterlog IPv4/IPv6 analizados. Lecturas tail/grep de los archivos de registro dhcpd/filter/resolver/system/auth.
Modelado de Tráfico12Modeladores, colas y limitadores para gestión de ancho de banda.
Horarios8Programación de reglas de firewall basada en tiempo.
IPs Virtuales5Gestión de CARP, ProxyARP y Alias IP.
Solución de Problemas10Diagnosticar conectividad, tráfico bloqueado, VPN, DHCP, DNS, HA. Informe de salud completo.
Paquetes49HAProxy, ACME/Let's Encrypt, BIND DNS, FreeRADIUS.
Utilidades9Navegación HATEOAS, gestión de IDs de objetos, estado de protecciones.

Seguridad Primero

Una IA gestionando un firewall de producción necesita protecciones. Este servidor tiene 9 capas:

"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."
  }

Las 201 herramientas que modifican la configuración llevan una protección, y una prueba falla la compilación si una nueva se publica sin ella.

  • Cada herramienta de cambio tiene límite de velocidad, registro de auditoría y verificación contra la lista de permitidos.
  • Herramientas de alto riesgo (51): eliminaciones, desconexiones, reinicios, apagados y bloqueos en bloque también están bloqueadas hasta que el llamante pase confirm=True.
  • Herramientas manage_*: estas requieren confirm=True para sus acciones de eliminación y borrado.
  • Secretos: contraseñas, claves, PSKs, contraseñas de enlace y tokens se redactan en el registro de auditoría y en las respuestas de error de la API reflejadas.

confirm=True es un parámetro que envía el cliente MCP. No es un paso separado de aprobación humana, así que mantén activadas las indicaciones de aprobación de herramientas de tu cliente para las herramientas destructivas.

También puedes:

  • Pasar dry_run=True para previsualizar cualquier operación destructiva sin ejecutarla.
  • Pasar verify_descr="Allow HTTPS" para verificar que estás cambiando o eliminando la regla que esperas. Esto protege contra IDs de reglas que cambian.
  • Establecer MCP_READ_ONLY=true para exponer solo las 131 herramientas de solo lectura (búsqueda, obtención, diagnóstico).
  • Establecer MCP_ALLOWED_TOOLS=create_firewall_rule_advanced,delete_firewall_rule para permitir solo las herramientas de escritura listadas. Las herramientas de lectura permanecen disponibles.

Consulta SECURITY.md para la política de divulgación de vulnerabilidades y las guías de endurecimiento del despliegue.

Versiones de pfSense Compatibles

VersiónPaquete REST APIEstado
pfSense CE 2.9.0v2.10.2 (última)Compatible
pfSense CE 2.8.1v2.10.2 (última)Verificada
pfSense Plus 26.07v2.10.2 (última)Compatible
pfSense Plus 26.03.1v2.10.2 (última)Compatible
pfSense Plus 26.03v2.10.2 (última)Verificada
pfSense Plus 25.11.1v2.10.2 (última)Compatible
pfSense Plus 25.11v2.7.3 (heredada)Verificada
pfSense CE 2.8.0v2.7.3 (heredada)Compatible
pfSense Plus 24.11v2.7.3 (heredada)Compatible

Requiere el paquete pfSense REST API v2 de jaredhendrickson13. El paquete v2.8.x+ incluye compilaciones solo para CE 2.8.1 y Plus 25.11.1/26.03/26.03.1; CE 2.9.0 y Plus 26.07 necesitan v2.10.1+; v2.7.3 es la última versión con compilaciones para CE 2.8.0 y Plus 24.11/25.11.

Nota de seguridad: ejecuta el paquete REST API v2.10.0+. Corrige una falla de inyección de comandos en los endpoints de grupos de interfaces (GHSA-w3w4-mvcc-vmgr) y añade auto-escape de comandos del núcleo; v2.9.0 corrigió una escalada de privilegios anterior en la sincronización de ajustes (GHSA-8q8g-9f77-8g8g).

v2.10.0 también marca OpenVPNClient.auth_pass, User.ipsecpsk y WireGuardPeer.presharedkey como sensibles, por lo que la API ya no los devuelve de forma predeterminada. Este servidor aún los establece normalmente; si un flujo de trabajo necesita leer uno de vuelta, añade una anulación de campo sensible en la configuración de REST API.

Autenticación

Tres métodos compatibles (configurar en .env):

MétodoConfiguraciónMejor Para
Autenticación BásicaAUTH_METHOD=basic + nombre de usuario/contraseñaConfiguración rápida, usuarios locales
Clave APIAUTH_METHOD=api_key + clave de System > REST API > KeysAutomatización, cuentas de servicio
JWTAUTH_METHOD=jwt + nombre de usuario/contraseñaTokens de corta duración, obtenidos y renovados automáticamente (asume la vida útil predeterminada de 1 hora de pfSense)

Opciones de Despliegue

stdio (predeterminado) — para Claude Desktop y Claude Code:

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

HTTP: para acceso remoto y configuraciones con múltiples clientes. Requiere MCP_API_KEY, y el servidor se niega a iniciar con un token vacío, de marcador de posición o corto.

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

El transporte HTTP es HTTP simple. Colócalo detrás de un proxy inverso con terminación TLS antes de exponerlo más allá de localhost.

Docker: un contenedor endurecido que ejecuta el transporte HTTP.

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

El puerto publicado se vincula a 127.0.0.1 de forma predeterminada. Establece MCP_BIND_ADDR=0.0.0.0 para exponerlo, pero solo detrás de TLS. Para una CA privada, coloca el PEM en ./certs/ y establece PFSENSE_CA_FILE=/certs/<file>.pem.

Seguridad del contenedor:

  • Se ejecuta como un usuario no root (mcp:1000).
  • Sistema de archivos de solo lectura, un tmpfs noexec y no-new-privileges.
  • Todas las capacidades de Linux eliminadas.

La verificación de salud sondea un endpoint /health no autenticado, porque /mcp requiere el token de portador.

Detrás de una puerta de enlace MCP — el transporte HTTP es un endpoint Streamable HTTP compatible con la especificación con autenticación de token de portador, por lo que puede registrarse como destino de servidor MCP detrás de puertas de enlace gestionadas como AWS Bedrock AgentCore Gateway (usa su proveedor de credenciales de clave API para suministrar el token de portador MCP_API_KEY, y añade el origen de la puerta de enlace a MCP_ALLOWED_ORIGINS). Dichas puertas de enlace añaden OAuth/IAM centralizado al frente y traducen entre revisiones de protocolo, incluida 2026-07-28. No se requiere ninguna puerta de enlace — esto es puramente una opción para entornos que ya ejecutan una.

Configuración

VariableRequeridoPredeterminadoDescripción
PFSENSE_URLSí—URL de pfSense (p. ej., https://192.168.1.1)
AUTH_METHODapi_keyapi_key, basic o jwt
PFSENSE_API_KEY*—Clave de API REST
PFSENSE_USERNAME*—Nombre de usuario de pfSense (para basic/jwt)
PFSENSE_PASSWORD*—Contraseña de pfSense (para basic/jwt)
PFSENSE_VERSIONCE_2_8_1Actual: CE_2_8_1, CE_2_9_0, PLUS_25_11_1, PLUS_26_03, PLUS_26_03_1, PLUS_26_07. Heredado (aún aceptado): CE_2_8_0, PLUS_24_11, PLUS_25_11, CE_26_03
VERIFY_SSLtruefalse desactiva la verificación de certificados por completo; prefiere PFSENSE_CA_FILE
PFSENSE_CA_FILE—Archivo PEM para la CA privada o autofirmada de pfSense, para mantener la verificación activa
API_TIMEOUT30Tiempo de espera de solicitud en segundos
MCP_READ_ONLYfalseExponer solo herramientas de solo lectura
MCP_ENABLE_LOG_FILEStrueEstablece false para eliminar get_log_file (lecturas de /var/log/* sin procesar mediante el sumidero de comandos)

Los ajustes booleanos aceptan true/false, 1/0, yes/no o on/off. Cualquier otro valor detiene el servidor al inicio en lugar de adivinar, para que un error tipográfico no pueda desactivar la verificación TLS.

Todas las opciones de configuración
VariablePredeterminadoDescripción
ENABLE_HATEOASfalseHabilitar enlaces HATEOAS en las respuestas de la API
LOG_LEVELINFODEBUG, INFO, WARNING, ERROR
MCP_TRANSPORTstdiostdio o streamable-http
MCP_HOST127.0.0.1Dirección de enlace para el modo HTTP
MCP_PORT3000Puerto para el modo HTTP
MCP_BIND_ADDR127.0.0.1Solo Docker Compose: dirección del host a la que se enlaza el puerto publicado
MCP_API_KEY—Token Bearer para transporte HTTP (requerido)
MCP_ALLOWED_ORIGINSlocalhostOrígenes permitidos separados por comas
MCP_AUDIT_LOG—Ruta al archivo de registro de auditoría (líneas JSON)
MCP_RATE_LIMIT_DELETE10Máximo de eliminaciones por 60 segundos
MCP_RATE_LIMIT_CREATE20Máximo de creaciones por 60 segundos
MCP_RATE_LIMIT_UPDATE30Máximo de cambios de ajustes (update_*, apply_*, enable_*/disable_*) por 60 segundos
MCP_RATE_LIMIT_CRITICAL2Máximo de operaciones críticas por 300 segundos
MCP_ALLOWED_TOOLSallLista de permitidos separada por comas de herramientas de escritura. Las herramientas de lectura siempre están disponibles; get_log_file se controla mediante MCP_ENABLE_LOG_FILES
MCP_ROLLBACK_BUFFER50Entradas de reversión mantenidas en memoria
RESPONSE_FORMATjsongcf vuelve a codificar los resultados de las herramientas como Graph Compact Format para reducir tokens (requiere el extra gcf)

Codificación de respuesta (GCF)

De forma predeterminada, las herramientas devuelven JSON. Establecer RESPONSE_FORMAT=gcf devuelve cada resultado elegible de herramienta como un solo bloque Graph Compact Format en su lugar: los arreglos de registros que producen estas herramientas de lectura (reglas de firewall, alias, concesiones DHCP, certificados, registros DNS) tienen sus nombres de campo repetidos factorizados en un encabezado, lo que reduce el costo de tokens cuando el resultado cruza el límite de la LLM. Los resultados que no son un solo cuerpo JSON — o que GCF no reduciría — permanecen como JSON (ver más abajo).

Instala el extra opcional en el entorno del servidor y establece la variable:

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

Es opcional y conservador: GCF se usa solo cuando es más pequeño que el JSON y es un viaje de ida y vuelta sin pérdida verificado; de lo contrario, se mantiene el JSON, por lo que ningún registro se elimina o altera. structuredContent se conserva, por lo que la validación del esquema de salida y los clientes que no son modelos siguen recibiendo JSON. Si el extra gcf no está instalado, el servidor registra una advertencia y continúa con JSON.

Ahorro de tokens en resultados representativos de 30 registros (tokens o200k, sin pérdida; reproducir con python benchmarks/gcf_benchmark.py):

ResultadoJSONGCFAhorro
Reglas de firewall1,99593653.1%
Alias1,06559444.2%
Concesiones DHCP2,3141,60630.6%

Pruebas

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

El conjunto incluye una capa de contrato de cable (tests/contract/) que verifica la carga útil de cada herramienta contra el esquema real de la API REST de pfSense v2.10.2 (destilado de la especificación OpenAPI ascendente), por lo que un nombre de campo o tipo incorrecto es una prueba fallida en lugar de una configuración incorrecta silenciosa. CI se ejecuta en Python 3.11/3.12/3.13 con escaneo de dependencias pip-audit.

Además del conjunto en proceso, una prueba de humo de protocolo de extremo a extremo impulsa el servidor a través del protocolo MCP real utilizando el CLI oficial MCP Inspector. Cubre ambos transportes y se ejecuta en CI en cada push:

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

Verifica el protocolo de enlace de inicialización, el listado de 332 herramientas con anotaciones, la puerta de confirmación de salvaguardas a través del cable, el modo de solo lectura y la autenticación HTTP bearer más la aplicación de Origin — sin necesidad de una instancia de pfSense.

Cumplimiento de la especificación MCP

Cumple con MCP 2025-11-25 — la revisión más reciente con soporte estable de SDK — y negocia hacia revisiones anteriores por conexión, por lo que los clientes existentes siguen funcionando:

  • ToolAnnotations en las 332 herramientas (readOnlyHint, destructiveHint, idempotentHint)
  • serverInfo.version y instructions proporcionados
  • Validación del encabezado Origin (requisito MUST)
  • Autenticación con token Bearer con comparación de tiempo seguro
  • Enlace predeterminado a localhost según el SHOULD de la especificación
  • Transportes stdio y HTTP Streamable

La revisión sin estado 2026-07-28

MCP 2026-07-28 elimina el protocolo de enlace initialize y las sesiones a nivel de protocolo, por lo que cada solicitud se sostiene por sí misma. El soporte de SDK se envía en fastmcp 4, que ahora es estable (4.0.5).

Estado: esta versión fija fastmcp 3.x (MCP 2025-11-25). Un trabajo de CI no bloqueante ejecuta el conjunto completo de pruebas y la prueba de humo de MCP Inspector contra fastmcp 4.0.x, y ambos pasan sin cambios. El servidor no mantiene estado de sesión por diseño y no usa ninguna de las características que 2026-07-28 depreca (Roots, Sampling, MCP Logging).

El pin se moverá a fastmcp 4 una vez que la prueba de humo también cubra solicitudes sin sesión, que omiten initialize. fastmcp 4 negocia la versión del protocolo por conexión, por lo que los clientes que usan el protocolo de enlace seguirán funcionando.

Estructura del proyecto

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)

Consulta ARCHITECTURE.md para el ciclo de vida de la solicitud, el modelo de salvaguardas y la capa de contrato de cable; SECURITY.md para divulgación y endurecimiento; y RELEASE_AUDIT.md para la auditoría y la hoja de ruta.

Limitaciones conocidas

Estas se rastrean para la próxima versión:

  • Alrededor de 11 herramientas de actualización/eliminación para objetos anidados no envían el parent_id que requiere la API REST, por lo que esas llamadas fallan (#79). Los objetos afectados son grupos de direcciones DHCP y opciones personalizadas, colas de modelador de tráfico, entradas de cifrado IPsec y rangos de tiempo de programación.
  • create_ipsec_phase1 y create_ipsec_phase2 aún no envían los ajustes de cifrado anidados que requiere la API. Arreglarlos necesita validación contra un pfSense en vivo.
  • La API REST no tiene un endpoint de restauración de configuración, por lo que revertir un cambio es un paso manual en la webGUI. Usa el ID de revisión que devuelven las herramientas protegidas.
  • Cada proceso del servidor gestiona una sola instancia de pfSense.

Contribuciones

Necesitamos pruebas en el mundo real en diversos entornos pfSense. Consulta CONTRIBUTING o:

  1. Haz un fork y crea una rama de características
  2. Ejecuta python3 -m pytest tests/ -v
  3. Envía un PR

Ideas: pruebas de integración contra pfSense real, soporte adicional de paquetes (Snort, Suricata), puente LLM local Ollama, gestión de múltiples instancias.

Licencia

MIT

Agradecimientos

  • jaredhendrickson13 / pfrest — paquete de API REST de pfSense v2
  • JeremiahChurch — reescritura modular (PR #5), salvaguardas de OOM en endpoint de registro (PR #6), corrección de búsqueda de mapeo estático DHCP (PR #91)
  • shawnpetersen — descubrimiento de endpoints de API v2 (PR #3)
  • aemitic — corrección de cuerpo DELETE (PR #9), ipprotocol de firewall para IPv6/doble pila (PR #10), logconfigchanges (PR #11)
  • pbhorjee — corrección de diagnóstico de estado en vivo (PR #21), frescura del registro de firewall + filtrado por IP exacta (PR #23), salvaguarda de credenciales de redirección (PR #72), corrección de reintento de escritura 503 (PR #74), contexto de error de transporte (PR #75), bloqueo de edición de alias (PR #76), jitter y presupuesto de reintentos (PR #77), informe de CA privada (#73)
  • DrewKolstad — direccionamiento de interfaz, filtros de búsqueda seguros contra nulos, IPs permitidas de WireGuard, tiempos de concesión DHCP (PR #78)
  • msarg44 — corrección de get_pf_table / get_config_revision (PR #80)
  • cbrown350 — lecturas de registro sin procesar get_log_file (PR #90)
  • blackwell-systems — codificación de respuesta GCF opcional (PR #87)
  • bholland-bh — solicitud de soporte pfSense CE 2.9.0 / Plus 26.07 (#88)
  • hossamnagy — inicio resiliente en fallo de verificación previa transitorio (PR #14)
  • bill-mccormick-dg — corrección independiente de cuerpo DELETE (PR #16)
  • w1ld3r — informes de errores de DELETE y syslog remoto (#12, #13)
  • tvlc — informe de desajuste de tipo de puerto WebGUI (#7)
  • renanwilliam — solicitud de empaquetado uvx/pipx (#8)
  • Netgate — pfSense
  • FastMCP — framework MCP