Qualquer ecrã de início de sessão exposto na internet recebe tentativas de adivinhar a palavra-passe, e o do GLPI não é exceção. Por omissão, o GLPI não limita quantas vezes alguém pode errar a palavra-passe. O Security Guard, módulo do NexTool gratuito para clientes NexTool, conta as falhas no início de sessão web, na API, no CalDAV e na recuperação da palavra-passe, bloqueia temporariamente quem passa do limite e mostra tudo num painel, sem guardar o nome de utilizador em claro.
O problema: força bruta no início de sessão do GLPI
A força bruta é o ataque mais simples que existe: um robô testa combinações de utilizador e palavra-passe até acertar. Variantes conhecidas são o credential stuffing (palavras-passe divulgadas noutros serviços testadas no seu GLPI) e o password spraying (uma palavra-passe comum, como Mudar@123, testada em muitas contas ao mesmo tempo). O GLPI guarda os pedidos, o inventário, os contratos e os dados pessoais de quem abre pedidos. Uma conta de técnico comprometida abre tudo isso.
No GLPI de base, o início de sessão web aceita tentativas indefinidamente. É possível mitigar na periferia (WAF, fail2ban a ler o registo do servidor web), mas essas soluções não conhecem o GLPI: não sabem se a tentativa resultou, não distinguem utilizador de IP e costumam bloquear por engano o proxy de toda a empresa. Faltava uma proteção dentro do próprio GLPI, que perceba o resultado real do início de sessão.
Como funciona o Security Guard
Com a proteção ligada, o módulo examina cada tentativa de autenticação nos canais abaixo, regista o resultado, como Sucesso, Falha, Negado (bloqueio), Ignorado ou MFA pendente, e verifica as regras que você definiu. Quando uma regra é ultrapassada, as tentativas seguintes dessa chave recebem HTTP 429 no formato que o cliente entende: página de bloqueio temporário no navegador, JSON nas API e texto no CalDAV, até o prazo terminar ou um administrador levantar o bloqueio. Enquanto o bloqueio está ativo, as tentativas recusadas não se tornam eventos: apenas somam no contador do bloqueio.
- Início de sessão web: o formulário em
/front/login.php. - API REST (v1):
initSessioncom utilizador e palavra-passe, Basic Auth ouuser_token. Comuser_tokennão há utilizador, por isso só contam as regras por IP. No GLPI 11, o caminho/api.php/v1também é coberto. - API v2 do GLPI 11: o pedido de token em
/api.php/tokencom utilizador e palavra-passe. - CalDAV (Basic Auth): como o cliente de calendário se autentica a cada sincronização, só as palavras-passe erradas e os acessos negados se tornam eventos; o acesso correto não grava nada.
- Recuperação da palavra-passe (
lostpassword.php): cada pedido de nova palavra-passe conta como tentativa, por IP ou pelo e-mail indicado. O GLPI responde da mesma forma a um e-mail certo ou errado, por isso a regra limita o volume de pedidos e trava o envio em massa e a varredura de e-mails. - Código MFA/TOTP do GLPI 11: as tentativas aparecem nos eventos, com sucesso e falha, mas o módulo não limita o código, porque o próprio GLPI 11 já bloqueia depois de várias tentativas erradas.
Na consola, o módulo oferece:
- Regras por âmbito: cada regra define a janela (em minutos), o limite de falhas e a duração do bloqueio. O âmbito pode ser Usuário, IP ou Usuário + IP, com prioridade entre regras e filtro opcional por intervalo de IP (CIDR) ou por país. No campo Canais, cada regra escolhe onde conta: início de sessão web, API REST, API v2, CalDAV ou recuperação da palavra-passe. Uma regra nova nasce com todos marcados. A instalação traz duas regras prontas, inativas: Usuário + IP (5 falhas em 15 minutos, bloqueio de 15 minutos) e IP (30 falhas em 15 minutos, bloqueio de 30 minutos).
- Exceções: utilizador, grupo, perfil, rede (CIDR) ou país que nunca são bloqueados, mesmo com uma regra acionada. Cada exceção pode ter um período de vigência com data de início e de fim.
- GeoIP: com uma base MaxMind GeoLite2 Country enviada a partir do próprio ecrã, o módulo resolve o país de cada IP. Isto alimenta o painel e permite regras e exceções por país.
- Painel: totais das últimas 24 horas por resultado, uma linha com as últimas 24 horas por canal, bloqueios, regras e exceções ativos, e o top 10 de IP, utilizadores (mascarados) e países com mais falhas e tentativas recusadas nos últimos 7 dias.
- Bloqueios: lista dos bloqueios ativos com botão para os levantar, criação de bloqueio manual e o histórico completo.
- Eventos: as tentativas avaliadas e classificadas, na pesquisa nativa do GLPI, com a coluna Canal e o utilizador sempre mascarado. As tentativas recusadas durante um bloqueio ativo aparecem apenas no contador do bloqueio.
- Teste: simuladores de resolução de IP e de tentativa de início de sessão que não gravam nada; o simulador de tentativa permite escolher o canal. Você fica a saber o que aconteceria antes de ativar uma regra.

Um pormenor que faz diferença: o módulo classifica o resultado real da tentativa, olhando para a resposta que o GLPI devolveu, e conta a tentativa assim que ela começa. Um robô que dispara dezenas de pedidos em paralelo não consegue ultrapassar o limite através de uma corrida entre eles.

Ativação segura, passo a passo
O Security Guard vem desligado: a proteção vem com o interruptor desligado e as duas regras criadas na instalação vêm inativas. Instalar o módulo não bloqueia ninguém. Mas, com a proteção desligada, o módulo não regista nada: não é possível “observar antes de bloquear” com o interruptor desligado. O caminho seguro é ligar a proteção com as regras ainda inativas e usar o separador Teste. A ordem abaixo importa, porque uma configuração errada do proxy pode bloquear a empresa inteira.
- Instale e ative o módulo em NexTool > Módulos > Security Guard. A consola fica em NexTool > Security Guard.
- Configure os proxies de confiança ANTES de ligar a proteção. No separador Configurações, indique no campo Proxies confiáveis (CIDR) a rede do proxy inverso que está à frente do GLPI (Nginx, NPM, HAProxy, balanceador de carga). Sem isso, o módulo ignora de propósito o header
X-Forwarded-For(pode ser falsificado) e vê o IP do proxy, não o do utilizador. - Se o GLPI estiver atrás da Cloudflare, clique em Adicionar faixas da Cloudflare. O botão acrescenta ao campo as faixas oficiais da CDN, sem apagar o que já lá está e sem gravar sozinho. Mantenha também a rede do seu proxy local e grave. Sem as faixas da Cloudflare, o IP resolvido seria a periferia da CDN, partilhada por milhares de pessoas.
- Confirme o header de IP. O valor por omissão é
X-Forwarded-For; altere-o apenas se o seu proxy usarX-Real-IPouForwarded. - Verifique o cartão “IP desta requisição”. Mostra o
REMOTE_ADDR, o header recebido e o IP que o módulo resolveria neste momento. O IP resolvido tem de ser o do seu computador, não o do proxy. Se aparecer o alerta “Proxy provável não configurado”, pare e volte ao passo 2. - Ligue a Proteção contra força bruta com as regras ainda inativas. Sem regras ativas nem bloqueios manuais, ninguém é bloqueado, e o Painel e o separador Eventos passam a mostrar as tentativas classificadas. Use o separador Teste para confirmar que uma tentativa normal sua não seria bloqueada.
- Só então ative uma regra com âmbito Usuário + IP no separador Regras e confirme, no campo Canais, onde ela vai contar. A regra pronta vem com 5 falhas em 15 minutos e bloqueio de 15 minutos.



Boas práticas
- Prefira o âmbito Usuário + IP. Apanha o robô que insiste numa conta a partir de um endereço, sem efeitos colaterais para os outros utilizadores.
- Cuidado com o âmbito Usuário isolado. Permite que qualquer pessoa bloqueie a conta de um colega só por errar a palavra-passe dele de propósito. Se o usar, use-o com limite alto e duração curta.
- Cuidado com o âmbito IP isolado atrás de NAT. Um escritório inteiro costuma sair pelo mesmo IP público. Uma regra só por IP, com limite baixo, castiga toda a gente pelo erro de um. Se a usar, deixe o limite bem acima do da regra Usuário + IP (a regra pronta vem com 30 falhas em 15 minutos).
- Registe exceções com critério. A rede da sede, um perfil de integração ou uma conta de monitorização podem entrar como exceção, de preferência com vigência.
- Cuidado com integrações pela API. Um sistema integrado pela API que erra a palavra-passe em ciclo (uma palavra-passe antiga, por exemplo) bloqueia o próprio IP. Registe a rede dele como exceção ou desmarque esse canal na regra.
- Na recuperação da palavra-passe, use um limite mais alto do que o do início de sessão e prefira o âmbito IP ou Usuário + IP.
- Mantenha a base GeoIP atualizada. A atualização é manual; o cartão avisa quando a base ultrapassa os 60 dias.


Privacidade
Registar tentativas de início de sessão envolve dados pessoais, por isso convém saber exatamente o que o módulo guarda:
- O nome de utilizador nunca é gravado em claro. A correlação usa um HMAC-SHA256 com chave própria da instalação, e o ecrã mostra apenas uma máscara (primeira e última letra). Nos inícios de sessão com sucesso, o evento guarda também o ID do utilizador no GLPI.
- O e-mail indicado nos pedidos de nova palavra-passe segue a mesma regra: só é guardado como HMAC, e o ecrã mostra apenas uma máscara.
- O IP e o país ficam gravados em claro, porque são o próprio objeto da proteção.
- Nos eventos, o prazo de conservação é definido por você: 90 dias por omissão, e 30 dias para o registo administrativo. A limpeza é feita pela tarefa automática
secguardmaintenance, a cada 5 minutos, em modo externo: depende do cron do GLPI configurado no servidor. - O histórico de bloqueios não expira nesta versão e só é removido com a ação “Apagar dados”.
- Desinstalar o módulo preserva os dados; apagá-los exige a ação explícita “Apagar dados”, com permissão própria.
Permissões por ecrã
O Security Guard é uma consola apenas de administração. Os direitos ficam em Administração > Perfis > separador NexTool e variam conforme o ecrã:
- Painel: Ver Painel;
- Eventos: Ver Eventos;
- Bloqueios: Ver Bloqueios, Liberar bloqueios e Criar bloqueio manual;
- Regras: Ver Regras e Gerenciar Regras;
- Exceções: Ver Exceções e Gerenciar Exceções;
- Configurações e separador Teste: Configurar;
- Logs: Ver Logs.
Uma ação exige sempre também o direito de ver o ecrã: quem só tem “Liberar bloqueios” sem “Ver Bloqueios” não desbloqueia nada. Assim, a equipa de primeira linha pode, por exemplo, desbloquear um utilizador sem poder mexer nas regras.
Limitações desta versão
Sem rodeios: a versão 0.2.0 cobre o início de sessão web, a API REST, a API v2 do GLPI 11, o CalDAV e a recuperação da palavra-passe. Continuam de fora, ou com cobertura parcial:
- os inícios de sessão por SSO, SAML ou
REMOTE_USER, que não passam pela palavra-passe do GLPI; - o código MFA/TOTP do GLPI 11: as tentativas aparecem nos eventos, mas o módulo não limita o código, porque o próprio GLPI 11 já bloqueia depois de várias tentativas erradas.
Também não existe notificação de bloqueio: nem e-mail, nem alerta, nem webhook. O acompanhamento é feito na consola, no Painel e nos separadores Bloqueios e Eventos.
Para quem é indicado
Para quem publica o GLPI na internet para técnicos externos, clientes ou filiais; para prestadores de serviços que gerem vários GLPI e precisam de demonstrar controlo de acesso em auditoria; e para quem já viu, no registo do servidor web, centenas de POST no início de sessão vindos do mesmo sítio.
Compatibilidade
- Versão: 0.2.0
- GLPI: 10 e 11 (o mesmo artefacto funciona nos dois)
- Plugin: NexTool 6.22.0 ou superior
- Plano: Gratuito
- Idiomas: ecrãs em português (Brasil e Portugal), inglês (EUA e Reino Unido), espanhol (Espanha e México), francês, italiano e alemão
Próximo passo
O Security Guard faz parte do NexTool, ecossistema de módulos para expandir o GLPI sem personalizações de código. Veja a página do módulo ou fale com a equipa para uma demonstração.
Revisto pela equipa NexTool Solutions. As capturas de ecrã são do ambiente real do GLPI com o plugin NexTool; os IP e os utilizadores foram substituídos por intervalos de documentação e máscaras.