npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@onovoprogramador/onp-security-vps

v0.3.0

Published

Segurança da VPS com prova mecânica: orienta a IA a criar e configurar uma VPS (via MCP do provedor ou SSH) e prova a postura — checagem interna por SSH (sshd, firewall, sockets, usuários, serviços, fail2ban, atualizações, Docker), estado do provedor impo

Readme

onp-security-vps

A VPS sobe segura — e a máquina prova. Uma skill para o Claude Code que orienta a IA a criar e configurar uma VPS de forma segura (via MCP do provedor ou por SSH numa VPS já no ar), prova a postura mecanicamente (de dentro por SSH, de fora por probe, e pelo estado do provedor) e impõe pelo harness: uma guarda nega a ação que enfraquece a máquina e um gate não deixa "dar por pronto" sem prova verde.

Escopo: a VPS em si — firewall, SSH, usuários, sudo, serviços, portas, TLS, banco, Docker, atualizações. Segurança do código e do deploy da aplicação não é assunto daqui.

┌──────────┐   ┌──────────────────┐   ┌────────────┐   ┌────────┐   ┌──────────┐
│ PREPARAR │ → │ PROVISIONAR /     │ → │ VERIFICAR  │ → │ GATE   │ → │ ENTREGAR │
│ postura  │   │ ENDURECER         │   │ host+probe │   │ mecân. │   │ (Stop)   │
│ + alvo   │   │ (MCP ou SSH)      │   │ +provedor  │   │        │   │          │
└──────────┘   └──────────────────┘   └────────────┘   └────────┘   └──────────┘
  o contrato    a GUARDA barra o que   sshd, firewall,   exit 0 ou   o harness não
  da VPS        enfraquece a VPS       portas, TLS…      não pronto  deixa encerrar

O problema que ela resolve

Quando uma IA configura um servidor, o risco não é esquecer um passo: é "resolver" enfraquecendo — ufw disable porque a porta não abria, PermitRootLogin yes porque o acesso falhou, chmod 777 porque deu permission denied, banco em 0.0.0.0 porque "funcionou". Aqui:

  • Guarda (hook PreToolUse) — intercepta MCP de VPS e ssh host '…'. Desligar firewall, abrir banco pro mundo, liberar senha/root no SSH, chmod 777, NOPASSWD: ALL, curl | sh, --privileged, rm -rf / → negado ou perguntado ao usuário, com a correção. Leitura e endurecimento passam.
  • Checagem interna por SSH — um script de leitura (sshd -T, ufw/nft/ iptables, ss, ps, usuários, sudoers, fail2ban, atualizações, permissões, Docker, NTP) vira achados com código e correção. Sucesso = prova de propriedade.
  • Estado do provedor — o JSON que a IA leu pelo MCP (firewall, VM) é avaliado contra a postura: banco pro mundo, porta fora da postura, VM sem firewall, não sincronizado.
  • Probe de fora — portas alcançáveis x postura, TLS, HTTP→HTTPS. Só na VPS que é sua (guarda de propriedade).
  • Gate + Stop — onp-sec gate combina tudo → exit code e prova. Cada mudança na VPS (PostToolUse) invalida a prova; o Stop não deixa encerrar a sessão com o gate vermelho.
  • Ledger de credenciais — senha de root, chave privada, token do provedor que apareceu no chat bloqueia até rotacionar; senha passada por MCP entra sozinha; SessionStart martela.
  • Playbooks — ordem certa para provisionar via MCP (Hostinger e equivalentes) e para endurecer por SSH sem se trancar fora.

Instalação (a skill é autossuficiente)

Motor embarcado (Node ≥ 18, zero dependências). Na pasta do projeto:

npx @onovoprogramador/onp-security-vps init --agents claude   # (quando publicado)

Cria .vpssec/ (postura = contrato, alvos, ledger), onpsec.config.json, protege o .gitignore e instala a skill em .claude/skills/onp-security-vps/ (--global → ~/.claude/skills/). Manual:

git clone --depth 1 https://github.com/onovoprogramador/onp-security-vps.git /tmp/onp-sec
mkdir -p .claude/skills && cp -r /tmp/onp-sec/skills/onp-security-vps .claude/skills/

Guarda e gate como hooks do Claude Code:

node .claude/skills/onp-security-vps/scripts/onp-sec.mjs install-hooks            # neste projeto
node .claude/skills/onp-security-vps/scripts/onp-sec.mjs install-hooks --global   # em todos

Instala PreToolUse (guarda), PostToolUse (registro), Stop (gate de encerramento) e SessionStart (lembrete), autotesta e diz o que gravou. Remover: --remove; ver: --status.

Como usar

"Cria uma VPS na Hostinger pra mim e deixa segura."
"Endurece esse servidor que já está no ar."
"Libera a porta 8080."                      → a guarda pergunta: está na postura?
"Desliga o firewall que não tá dando."      → a guarda nega, com a correção.

Comandos internos (onp-sec = node <skill>/scripts/onp-sec.mjs):

onp-sec init [--agents claude]                      # .vpssec/ + skill
onp-sec install-hooks [--global|--remove|--status]  # guarda + gate no Claude Code
onp-sec alvo add <host> --vm-id <id> --atestar mcp --usuario root
onp-sec host <host>                                 # checagem interna por SSH (atesta)
onp-sec estado importar firewall <json>             # o que o MCP devolveu
onp-sec probe <host>                                # de fora
onp-sec gate --alvo <host>                          # 0 = VPS na postura
onp-sec checar "ufw allow 8080/tcp"                 # o que a guarda faria
onp-sec lint-script pos-instalacao.sh               # script de endurecimento
onp-sec segredo expor|rotacionado|list              # ledger
onp-sec rules | explain <CÓDIGO> | status

O que é verificado e por qual via

| Via | O que | Determinístico? | |---|---|---| | Host (SSH, onp-sec host) | sshd (senha/root/porta/opções), firewall do host e regras, sockets em 0.0.0.0, banco local, UID 0, sudo NOPASSWD, serviços como root, fail2ban, atualizações, permissões, Docker, NTP | sim | | Provedor (MCP → JSON) | regras do firewall x postura, banco pro mundo, VM sem firewall, sincronizado | sim | | Probe (de fora) | portas alcançáveis, TLS, HTTP→HTTPS, banco/painel exposto | sim | | Guarda (ação da IA) | firewall off, portas, SSH, permissões, curl|sh, Docker, destrutivo, script pós-instalação | sim, antes de rodar | | Ledger | credenciais expostas | sim | | Manual | banco sem autenticação/credencial padrão | você confirma |

Desenvolvimento

npm test                     # postura, host (fixtures), estado, guarda, gate, hooks e CLI ponta a ponta — sem rede
node tools/build-skill.mjs   # regenera o motor embarcado (o teste de sync acusa drift)

src/ é a fonte única; skills/onp-security-vps/scripts/ é gerado. O código do antigo scanner de deploy está em attic/ (fora do escopo).

Requisitos

Node.js ≥ 18. Para a checagem interna, ssh com acesso por chave à VPS (~/.ssh/config, agent ou --identidade). Sem nmap, sem Python.

Segurança e escopo

O probe ativo só roda contra a VPS que você controla e atesta (VM da sua conta no MCP, acesso SSH comprovado, ou declaração). A checagem por SSH usa a sua chave e só executa comandos de leitura. Esta ferramenta blinda a sua VPS — não sonda host de terceiro.

Licença

MIT © Vitor Manoel — O Novo Programador