Checklist de hardening de segurança do admin do Magento 2
O admin do Magento pode criar usuários, mudar configurações de pagamento, editar conteúdo de CMS exibido em toda página e exportar dados de clientes. Quem controla o admin controla a loja. A maior parte do hardening é configuração e processo, não código, e dá para fazer em uma tarde.
Este é o checklist que uso em lojas Magento Open Source e Adobe Commerce 2.4. Os itens estão ordenados, mais ou menos, pelo quanto de risco eles removem em relação ao esforço.
1. Mantenha a autenticação em dois fatores ligada
Desde a 2.4.0, o módulo Magento_TwoFactorAuth vem habilitado por padrão e todo usuário do admin precisa configurar um segundo fator. Os desenvolvedores costumam desabilitá-lo localmente, e a mudança às vezes vaza para a produção pelo config.php. Confira:
bin/magento module:status Magento_TwoFactorAuth
Ele precisa estar habilitado em produção. Uma senha de admin roubada é a forma mais comum de entrar no admin, e o 2FA é o que impede isso. A configuração, os providers e os passos de recuperação estão no guia de autenticação em dois fatores.
2. Mude o caminho do admin
Um caminho de admin custom não deixa o admin seguro, mas tira a loja da grande quantidade de tráfego automatizado que tenta /admin com senhas comuns. Defina no app/etc/env.php pela CLI:
bin/magento setup:config:set --backend-frontname="manage_k7q2"
bin/magento info:adminuri
Escolha algo que não seja uma palavra de dicionário nem o nome da loja. Não coloque em lugares públicos como o robots.txt, o que algumas lojas ainda fazem por engano.
3. Restrinja o admin por IP
Se as pessoas que usam o admin trabalham de endereços conhecidos ou por uma VPN, restrinja o caminho do admin no servidor web. É o controle mais eficaz desta lista, porque um atacante com uma senha válida continua sem conseguir chegar ao formulário de login. Com Nginx, adicione um location antes do bloco location do PHP da config de exemplo do Magento:
location ~ ^/(index\.php/)?manage_k7q2 {
allow 203.0.113.10;
allow 198.51.100.0/24;
deny all;
try_files $uri $uri/ /index.php$is_args$args;
}
Se a loja roda atrás do Cloudflare, do Fastly ou de um load balancer, o Nginx enxerga o endereço do proxy, não o do cliente. Configure antes o módulo real IP com as faixas de proxy confiáveis, ou aplique a restrição na CDN. Teste a partir de um endereço que não está liberado e confirme que você recebe um 403.
Quando endereços fixos não são práticos, uma VPN ou um proxy de acesso na frente do caminho do admin dá o mesmo resultado.
4. Ajuste as configurações de lockout, sessão e senha
Elas ficam em Stores, Configuration, Advanced, Admin, Security. Também dá para defini-las pela CLI, o que é mais fácil de repetir entre ambientes:
bin/magento config:set admin/security/session_lifetime 3600
bin/magento config:set admin/security/lockout_failures 5
bin/magento config:set admin/security/lockout_threshold 30
bin/magento config:set admin/security/password_lifetime 90
bin/magento config:set admin/security/password_is_forced 1
bin/magento config:set admin/security/admin_account_sharing 0
bin/magento config:set admin/captcha/enable 1
session_lifetimeé em segundos. Uma hora é um valor razoável para a maioria das equipes.lockout_failureselockout_thresholdbloqueiam a conta depois de um número de logins falhos, por um número de minutos. Desbloqueie um usuário combin/magento admin:user:unlock.admin_account_sharingem 0 impede que a mesma conta esteja logada em dois lugares ao mesmo tempo. Também desestimula logins compartilhados, que é o objetivo de verdade.- Mantenha o
admin/security/use_form_keyhabilitado. Desligar a secret key nas URLs às vezes é sugerido por conveniência, e enfraquece a proteção contra CSRF.
Para impedir que esses valores sejam alterados no admin, trave-os no app/etc/env.php com config:set --lock-env. Os valores travados aparecem como somente leitura no admin.
5. Limpe usuários e roles
Toda loja acumula usuários de admin: ex-funcionários, agências que terminaram o projeto, uma conta de suporte criada para um fornecedor anos atrás. Liste-os:
SELECT user_id, username, email, is_active, logdate
FROM admin_user
ORDER BY logdate;
Desabilite ou apague contas que não fazem login há meses e contas de pessoas que não trabalham mais na loja. Uma pessoa, uma conta, com um e-mail pessoal. Contas compartilhadas tornam impossível saber quem fez o quê.
Depois revise as roles em System, Permissions, User Roles. A maioria das pessoas não precisa de acesso total. O atendimento precisa de pedidos e clientes, não de configuração do sistema ou integrações. Os editores de conteúdo precisam de CMS, não de configurações de pagamento. Dê a role Administrators só às poucas pessoas que realmente precisam.
6. Revise integrações e acesso à API
O acesso à API é acesso ao admin por outra porta. Em System, Extensions, Integrations, confira cada integração: quem criou, quais recursos tem, se ainda é usada. Remova as que ninguém sabe explicar. As integrações devem ter só os recursos de que precisam. Um ERP que sincroniza pedidos não precisa de acesso a CMS nem a usuários do admin.
Revise também os admin tokens. Os admin bearer tokens são criados com as credenciais de admin de um usuário, então um script que faz login como um usuário admin real herda todas as permissões desse usuário. Prefira integrações com recursos limitados para acesso automatizado. Os detalhes estão no guia de autenticação da web API.
7. Fique de olho na configuração que renderiza HTML
Vários campos do admin geram HTML cru na storefront: os scripts diversos na configuração de design do HTML head, o footer, CMS blocks e widgets. Um atacante com acesso ao admin, ou com uma SQL injection, muitas vezes usa esses campos para injetar um skimmer de pagamento, porque nenhum arquivo muda. Revise-os regularmente e crie alertas para mudanças. Uma checagem simples:
SELECT config_id, scope, scope_id, path, updated_at
FROM core_config_data
WHERE path LIKE 'design/%'
ORDER BY updated_at DESC;
O Adobe Commerce inclui o Admin Actions Log, que registra quem mudou o quê no admin. No Magento Open Source não há equivalente nativo, então se você precisa de uma trilha de auditoria, use uma extensão de um fornecedor confiável ou registre as mudanças de configuração por conta própria.
8. Proteja também o lado do servidor
- Use HTTPS no site inteiro, incluindo o admin.
- Deixe o app/etc/env.php legível só pelo usuário do PHP. Ele guarda a chave de criptografia e a senha do banco.
- Não exponha phpMyAdmin, Adminer ou ferramentas parecidas em uma URL pública.
- Não deixe a loja em developer mode em produção. Ele mostra stack traces com paths e às vezes dados.
- Aplique os patches de segurança em dia. Várias vulnerabilidades passadas do Magento davam acesso em nível de admin sem nenhuma senha. Veja como se manter atualizado com os patches de segurança.
Uma revisão recorrente curta
Hardening não é uma tarefa única. Uma vez por trimestre, liste os usuários e integrações do admin, confira as roles, revise os campos de configuração com HTML e confirme que o 2FA e a restrição por IP continuam no lugar. Leva menos de uma hora e pega a deriva lenta que enfraquece a maioria dos setups de admin.
FAQ
Mudar a URL do admin do Magento basta para protegê-lo?
Não. Reduz as tentativas automatizadas de login, mas quem descobrir o caminho ainda pode tentar. Combine com 2FA e uma restrição por IP ou VPN.
Como desbloqueio um usuário bloqueado do admin do Magento?
Rode bin/magento admin:user:unlock seguido do nome do usuário. O bloqueio vem das configurações de login falho em Advanced, Admin, Security.
O Magento Open Source registra as ações do admin?
Não em detalhe. O Admin Actions Log é um recurso do Adobe Commerce. No Open Source você precisa de uma extensão ou de logging próprio para ter uma trilha de auditoria.
Scripts de API devem usar o login de um usuário admin?
É melhor criar uma integração só com os recursos de que o script precisa. Um admin token carrega todas as permissões daquele usuário admin.
Atendo como freelancer em Magento e Adobe Commerce, incluindo revisões de segurança. Se precisar de ajuda com isso, fale comigo.
Artigos relacionados
Autenticação em dois fatores no admin do Magento 2: setup e correções
Configure a autenticação em dois fatores do admin no Magento 2: providers, forçar um provider, comandos CLI para resetar usuários, ambiente local, tokens de API e problemas comuns.
Checklist de limpeza de malware no Magento 2 para lojistas
Checklist defensivo para uma loja Magento 2 hackeada: sinais de comprometimento, achar código injetado em arquivos e banco, rebuild limpo, novas credenciais e hardening.
Configuração do nginx para Magento 2: setup de produção
Configure o nginx para o Magento 2.4.8: nginx.conf.sample, TLS na frente do Varnish, limites do FastCGI, IP real do cliente, proteção do admin e rate limiting.
Guia de multi store e multi website no Magento 2
Como planejar e configurar multi website, multi store e store views no Magento 2: o que cada escopo controla, roteamento com Nginx, config por escopo e tudo no código.