{"id":637,"date":"2026-08-05T17:05:39","date_gmt":"2026-08-05T20:05:39","guid":{"rendered":"https:\/\/carloslopes.programandosolucoes.com.br\/index.php\/portfolio-pfsense-suporte-ia\/"},"modified":"2026-08-31T20:35:27","modified_gmt":"2026-08-31T23:35:27","slug":"portfolio-pfsense-suporte-ia","status":"publish","type":"page","link":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/portfolio-pfsense-suporte-ia\/","title":{"rendered":"Assistente de IA Nativo para pfSense e Endpoint MCP"},"content":{"rendered":"<style>\n.pf-wrap{max-width:1100px;margin:0 auto;font-size:16px;line-height:1.65}\n.pf-chamada{font-size:1.15rem;opacity:.85;margin:0 0 2rem}\n.pf-grade{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem}\n.pf-card{border:1px solid rgba(128,128,128,.3);border-radius:10px;overflow:hidden;display:flex;flex-direction:column;transition:transform .15s ease,box-shadow .15s ease}\n.pf-card:hover{transform:translateY(-3px);box-shadow:0 8px 24px rgba(0,0,0,.12)}\n.pf-card img{width:100%;height:180px;object-fit:cover;display:block;background:rgba(128,128,128,.12)}\n.pf-card-corpo{padding:1rem 1.1rem 1.2rem;display:flex;flex-direction:column;gap:.6rem;flex:1}\n.pf-card h3{margin:0;font-size:1.05rem;line-height:1.35}\n.pf-card p{margin:0;font-size:.92rem;opacity:.85;flex:1}\n.pf-chips{display:flex;flex-wrap:wrap;gap:.35rem}\n.pf-chip{font-size:.75rem;padding:.18rem .55rem;border-radius:999px;border:1px solid rgba(128,128,128,.35);opacity:.9}\n.pf-meta{font-size:.8rem;opacity:.7}\n.pf-cadeado{font-size:.8rem;opacity:.75}\n.pf-hero{margin:0 0 1.5rem}\n.pf-hero h1{margin:0 0 .4rem;line-height:1.2}\n.pf-secao{margin:2rem 0}\n.pf-secao h2{font-size:1.15rem;margin:0 0 .6rem;text-transform:uppercase;letter-spacing:.06em;opacity:.75}\n.pf-galeria{display:grid;gap:1.2rem;margin:2rem 0}\n.pf-galeria figure{margin:0}\n.pf-galeria img{width:100%;border:1px solid rgba(128,128,128,.3);border-radius:8px;display:block}\n.pf-galeria figcaption{font-size:.85rem;opacity:.75;margin-top:.4rem}\n.pf-repo{border:1px solid rgba(128,128,128,.35);border-left-width:4px;border-radius:8px;padding:1rem 1.2rem;margin:2rem 0}\n.pf-repo h2{margin:0 0 .5rem;font-size:1rem;text-transform:uppercase;letter-spacing:.06em}\n.pf-repo pre{background:rgba(128,128,128,.12);padding:.7rem .9rem;border-radius:6px;overflow-x:auto;margin:.6rem 0;font-size:.85rem}\n.pf-contato{margin:2rem 0;padding-top:1.2rem;border-top:1px solid rgba(128,128,128,.3);font-size:.95rem}\n.pf-voltar{display:inline-block;margin-bottom:1rem;font-size:.9rem}\n@media (max-width:600px){.pf-card img{height:150px}}\n<\/style>\n<div class=\"pf-wrap\">\n  <a class=\"pf-voltar\" href=\"\/index.php\/portfolio-frontend\/\">\u2190 voltar ao portf\u00f3lio<\/a><\/p>\n<header class=\"pf-hero\">\n<p class=\"pf-meta\">07\/2026 &#8211; atual \u00b7 em andamento<\/p>\n<p>Suporte de primeiro n\u00edvel com IA instalado dentro do pfSense: responde em portugu\u00eas, executa o diagn\u00f3stico no pr\u00f3prio firewall e mostra o que executou.<\/p>\n<div class=\"pf-chips\"><span class=\"pf-chip\">PHP 8.3<\/span><span class=\"pf-chip\">pfSense CE 2.8.x<\/span><span class=\"pf-chip\">FreeBSD<\/span><span class=\"pf-chip\">Model Context Protocol (MCP)<\/span><span class=\"pf-chip\">REST API (690 endpoints)<\/span><span class=\"pf-chip\">Tool Calling<\/span><span class=\"pf-chip\">Nginx<\/span><span class=\"pf-chip\">Human-in-the-Loop<\/span><span class=\"pf-chip\">PHPUnit<\/span><\/div>\n<\/header>\n<section class=\"pf-secao\">\n<h2>O problema<\/h2>\n<p>Quem opera redes corporativas precisa de diagn\u00f3sticos imediatos e auditoria em tempo real antes de abrir chamados. Modelos de IA isolados n\u00e3o conseguem medir o estado din\u00e2mico do firewall (tabela ARP, rotas ativas, conex\u00f5es e estados do filtro pfctl), e conceder acesso shell irrestrito a um LLM gera alto risco de seguran\u00e7a e indisponibilidade da infraestrutura.<\/p>\n<\/section>\n<section class=\"pf-secao\">\n<h2>A arquitetura<\/h2>\n<p>Desenvolvi uma arquitetura em 5 pilares de seguran\u00e7a e engenharia de software:<\/p>\n<p>1. CAT\u00c1LOGO FECHADO DE 21 FERRAMENTAS: O modelo nunca gera linhas de comando de shell abertas. Ele seleciona fun\u00e7\u00f5es com argumentos estritamente tipados e validados antes de qualquer execu\u00e7\u00e3o.<\/p>\n<p>2. DUAS VIAS DE EXECU\u00c7\u00c3O: Acesso via REST API local (127.0.0.1\/api\/v2) para estado de servi\u00e7os, interfaces, gateways e DHCP; e via bin\u00e1rios nativos do FreeBSD (traceroute, drill, netstat -rW, sockstat, nc e pfctl) para diagn\u00f3sticos profundos que a API REST n\u00e3o exp\u00f5e.<\/p>\n<p>3. HUMAN-IN-THE-LOOP &amp; HMAC: Comandos que alteram a rede (reiniciar servi\u00e7os, remo\u00e7\u00e3o de leases e flush de estados) s\u00e3o apenas propostos na interface com alertas de impacto, exigindo confirma\u00e7\u00e3o expl\u00edcita do operador.<\/p>\n<p>4. SERVIDOR MCP NATIVO: Endpoint embutido (\/suporte_ia\/mcp.php) expondo as 21 ferramentas e 690 opera\u00e7\u00f5es da REST API para agentes externos (Claude Code, Gemini CLI, Cursor), com permiss\u00f5es herdadas do usu\u00e1rio emissor da chave.<\/p>\n<p>5. DOCUMENTA\u00c7\u00c3O VIVA &amp; SNAPSHOTS: Gerador autom\u00e1tico de topologia sob demanda sem envio de dados para nuvem, com arquivamento acionado apenas em altera\u00e7\u00f5es reais de configura\u00e7\u00e3o.<\/p>\n<\/section>\n<section class=\"pf-secao\">\n<h2>O resultado<\/h2>\n<p>Assistente aut\u00f4nomo com suporte em portugu\u00eas integrado nativamente ao pfSense; elimina\u00e7\u00e3o completa de alucina\u00e7\u00f5es t\u00e9cnicas atrav\u00e9s de diagn\u00f3sticos executados ao vivo; e su\u00edte de 218 testes automatizados em PHPUnit cobrindo toda a l\u00f3gica de seguran\u00e7a e tool calling.<\/p>\n<\/section>\n<div class=\"pf-galeria\">\n<figure>\n      <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/painel-suporte-ia.png\" alt=\"Painel do Suporte IA: interface nativa no pfSense com chat em portugu\u00eas, playbooks e execu\u00e7\u00e3o audit\u00e1vel\" loading=\"lazy\"><figcaption>Painel do Suporte IA: interface nativa no pfSense com chat em portugu\u00eas, playbooks e execu\u00e7\u00e3o audit\u00e1vel<\/figcaption><\/figure>\n<figure>\n      <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/recorte-achados.png\" alt=\"Diagn\u00f3stico inteligente em tempo real: identifica\u00e7\u00e3o de gateways ca\u00eddos, regras redundantes e rotas\" loading=\"lazy\"><figcaption>Diagn\u00f3stico inteligente em tempo real: identifica\u00e7\u00e3o de gateways ca\u00eddos, regras redundantes e rotas<\/figcaption><\/figure>\n<figure>\n      <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/pfsense-ia-01-execucao.png\" alt=\"Da pergunta \u00e0 resposta: lista de permiss\u00e3o fechada, execu\u00e7\u00e3o e sa\u00edda completa dos comandos na conversa\" loading=\"lazy\"><figcaption>Da pergunta \u00e0 resposta: lista de permiss\u00e3o fechada, execu\u00e7\u00e3o e sa\u00edda completa dos comandos na conversa<\/figcaption><\/figure>\n<figure>\n      <img decoding=\"async\" src=\"https:\/\/carloslopes.programandosolucoes.com.br\/wp-content\/uploads\/portfolio\/pfsense-ia-02-vias.png\" alt=\"As duas vias de acesso ao firewall e o mapeamento de ferramentas\" loading=\"lazy\"><figcaption>As duas vias de acesso ao firewall e o mapeamento de ferramentas<\/figcaption><\/figure>\n<\/p><\/div>\n<div class=\"pf-repo\">\n<h2>\ud83d\udd12 C\u00f3digo-fonte<\/h2>\n<pre><code>git clone https:\/\/git.programandosolucoes.com.br\/git\/repos\/pfsense-suporte-ia.git<\/code><\/pre>\n<p>C\u00f3digo-fonte privado. As credenciais de leitura s\u00e3o liberadas sob solicita\u00e7\u00e3o \u2014 me chame para conversar sobre o projeto.<\/p>\n<\/p><\/div>\n<div class=\"pf-contato\">\n    <strong>Carlos Alberto<\/strong> \u2014 carlosalberto4ti@gmail.com \u00b7 +55 11 2615-2880\n  <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u2190 voltar ao portf\u00f3lio 07\/2026 &#8211; atual \u00b7 em andamento Suporte de primeiro n\u00edvel com IA instalado dentro do pfSense: responde em portugu\u00eas, executa o diagn\u00f3stico no pr\u00f3prio firewall e mostra o que executou. PHP 8.3pfSense CE 2.8.xFreeBSDModel Context Protocol (MCP)REST API (690 endpoints)Tool CallingNginxHuman-in-the-LoopPHPUnit O problema Quem opera redes corporativas precisa de diagn\u00f3sticos imediatos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-637","page","type-page","status-publish","hentry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"br","enabled_languages":["en","br","it"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"br":{"title":false,"content":false,"excerpt":false},"it":{"title":false,"content":false,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/pages\/637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/comments?post=637"}],"version-history":[{"count":2,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/pages\/637\/revisions"}],"predecessor-version":[{"id":654,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/pages\/637\/revisions\/654"}],"wp:attachment":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/media?parent=637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}