Como bom jogador de Factorio, gosto de uma boa automatização. E não sei vocês, mas meu Youtube me bombardeia de vídeos sobre N8N, apesar de nunca ter subido uma instância N8N (antes desse mês). Isso me levou a ter essa ideia de tentar automatizar meu processo de recon usando o N8N.

Por que? Bem, parece divertido, não? Além de eu poder disparar scans a partir de uma mensagem no Telegram, agendar scans periódicos e fazer um milhão de outras automatizações.

O que você vai precisar pra fazer essa receita 👨‍🍳:

  • Uma instância de VPS;
  • Coolify configurado;
  • Uma APIKey da sua IA favorita;
  • Um domínio apontando pro seu Coolify (lá ele).

Pra configurar o Coolify, me baseei bastante nesses 2 vídeos

Princípio de Funcionamento

Dentre os vários tipos de blocos (ou nodes) que o N8N oferece, um dos que mais me chamou atenção foi Execute Command node. De acordo com a documentação, ele “runs shell commands on the host machine that runs n8n”. E se usássemos esse node pra executar os comandos que normalmente usamos num processo de recon? 🤔🤔🤔

Interessante que enquanto escrevia esse post, descobri que a própria documentação da N8N já apresenta o próprio conceito usado aqui, na seção Run cURL command”. Lá, eles dizem o seguinte:

If you want to run the curl command in the Execute Command node, you will have to build a Docker image based on the existing n8n image. The default n8n Docker image uses Alpine Linux. You will have to install the curl package.

Isso é basicamente o que vamos fazer aqui. A diferença é que vamos instalar as ferramentas básica do meu processo de Recon (mais detalhes aqui) subfinder e nuclei

Criando a aplicação

Grande parte dos tutoriais de N8N no Coolify sugerem a implementação mais fácil possível, usando o catálogo de serviços https://coolify.io/docs/services/overview. Porém, essa opção não atende o nosso caso, já que precisamos de mais flexibilidade sobre os binários instalados junto com o N8N.

Image descriptionImagem com qualidade

Vamos usar a opção Dockerfile

Image descriptionImagem com qualidade

O conteúdo do Dockerfile está aqui.

E as configurações do Traefik que usei (Network) estão aqui. Não esquece de atualizar a parte seudominio.com pro seu domínio de fato.

Ficando mais ou menos assim

Image descriptionImagem com qualidade

Depois disso, é só configurar seu DNS para apontar pro subdomínio n8n (definido no Traefik, altere a gosto) para apontar para a sua instância do Coolify e Deploy ▶️.

O build deve levar uns bons minutos (aqui levou 10 minutos), mas no final você deve ver algo como isso.

Image descriptionImagem com qualidade

Agora, quando você acessar n8n.meusite.com (onde meusite é o seu site 🤷‍♂️) você deve ver essa tela.

Image descriptionImagem com qualidade

Persistência dos dados

No status atual, cada vez que a instância da VPS for reestartada, o N8N vai iniciar do zero. Ou seja, você vai precisar fazer o setup novamente e vai perder todos os seus workflows. Para resolver isso, você precisa configurar um “Persistent storage to preserve data between deployments”.

Basicamente, você vai fazer essa configuração, indo na aba “Persistent Storage” e redeployando ♥️.

Image descriptionImagem com qualidade

Agora você pode configurar sua instância do N8N normalmente e criar seu primeiro workflow. +Info sobre esse processo

Primeiro Workflow: Hello World

Com tudo configurado, já podemos ir pra parte interessante.

Image description
Imagem com qualidade

Image descriptionImagem com qualidade

Melhorando um pouco mais (estou usando a opção -t ssl no nuclei pra deixar os meus testes mais rápidos aqui).

Image descriptionImagem com qualidade

Segundo Workflow: Chatbot?

Ok. 4 simples nodes nesse workflow

  • Chat Trigger
  • AI Agent
  • Chat Model
  • Execute Command

Image descriptionImagem com qualidade

Única configuração que foi necessária, além de conectar os nodes (e configurar a API key do OpenAI, óbvio) foi essa. Lá no Execute Command.

// Description
Dado um dominio no formato twitter.com, executa um processo de recon padrão

// Command
subfinder -d {{ $fromAI('Dominio', ``, 'string') }} -silent | nuclei -silent -jsonl -t ssl

Image descriptionImagem com qualidade

Image description
Imagem com qualidade


Com isso, temos uma primeira versão, não?
Agora você pode ver os milhares de tutoriais no Youtube sobre como configurar diferentes triggers, como Telegram e Discord. Além de instalar outras ferramentas com uma simples alteração no Dockerfile.

💡 Disclaimer da N8N: n8n recommends self-hosting for expert users. Mistakes can lead to data loss, security issues, and downtime. If you aren't experienced at managing servers, n8n recommends n8n Cloud.
Enquanto não identifiquei nenhuma falha crítica na aplicação final rodando, use por sua conta e risco 🤷‍♂️. Não esqueça de manter a versão do N8N e das ferramentas atualizadas. Deve ser uma boa ideia setar o 2FA do Coolify e N8N.

💡 Disclaimer 2: Com certeza existem 1.000 formas melhores de alcançar o mesmo resultado final. Essa foi simplesmente a forma que usei. Sinta-se à vontade pra fazer sugestões.