Limitar tentativas de senha no Linux Não se trata apenas de uma peculiaridade de administradores paranoicos; é uma das medidas mais eficazes para impedir ataques de força bruta e acessos não autorizados, tanto em ambientes de desktop quanto de servidor. Se o seu computador contém informações confidenciais ou se conecta à internet, você deve proteger essa parte do sistema. audite sua rede local.
Além de definir uma senha forte, Configurar bloqueios temporários ou permanentes após várias falhas Isso é fundamental: dificulta os ataques, gera mais registros para auditoria e permite combinar essa proteção com outras políticas de senhas (expiração, complexidade, reutilização etc.). Vamos analisar, com calma, mas em detalhes, como isso é feito em diferentes distribuições e em diferentes níveis do sistema.
Bloqueio de conta devido a tentativas de login falhas no Red Hat, CentOS e derivados.
Nas distribuições baseado em Red Hat (RHEL, CentOS, Rocky, AlmaLinux…)O bloqueio de contas devido a tentativas falhas é gerenciado com o módulo PAM. pam_faillockEste módulo controla quantas tentativas de login falhas são permitidas, por quanto tempo a conta fica bloqueada e quais usuários são afetados (incluindo, se desejar, o usuário root).
Para aplicar essa política, você precisa editar os arquivos PAM globais, normalmente /etc/pam.d/system-auth e, em algumas versões, também /etc/pam.d/password-authEsses arquivos funcionam como modelos para a maioria dos serviços de autenticação do sistema (login no console, sudo, SSH, etc.).
Esses arquivos contêm linhas semelhantes a estas, dentro da seção de auth y conta:
auth required pam_faillock.so preauth silent audit deny=2 unlock_time=120
auth pam_faillock.so authfail audit deny=2 unlock_time=120
account required pam_faillock.so
A primeira linha atua antes da autenticação real (pré-autenticação)O segundo processo é executado quando a autenticação falha, e o terceiro é responsável por verificar o status de bloqueio da conta durante a fase de contaAo modificar os parâmetros, você pode ajustar a política às suas necessidades.
Os parâmetros mais comuns de pam_faillock são:
- auditorPermite o registro detalhado das tentativas de login, de forma que os rastros sejam deixados nos logs do sistema (por exemplo, em / var / log / secure).
- negar=2Isso define o número máximo de tentativas de senha incorretas antes que a conta seja bloqueada. Neste exemplo, é 2, mas você pode aumentá-lo (3, 5, 10…).
- tempo_desbloqueio=120: indica o tempo de bloqueio em segundos. Neste caso, seriam 120 segundos (2 minutos) até que a conta seja reativada automaticamente.
- silenciosoSe estiver presente, Não mostra ao usuário que ele foi bloqueado.Simplesmente deixa de aceitar logins, tornando o sistema menos "verboso" para um atacante.
Um detalhe importante é que, por padrão, A raiz está excluída deste bloco.Se você quiser que as mesmas regras se apliquem a ele também, você precisa adicionar o parâmetro. até negar raiz nas linhas pam_faillock da seção de autenticação. Isso reforça a segurança, mas você deve avaliar o risco de perder o acesso se cometer muitos erros.
Quando uma conta é bloqueada e você não usa o parâmetro silenciosoO sistema pode exibir mensagens explícitas avisando que o usuário excedeu o número permitido de tentativas. Isso é útil em ambientes de teste para verificar a configuração, embora em produção geralmente seja melhor não fornecer muitas informações.
Para visualizar as tentativas de login falhas de um usuário específico, em sistemas Red Hat você pode usar o comando faillock apontando para a conta que lhe interessa:
faillock --user lionel
Este comando mostra Quantas tentativas falhadas o usuário acumulou?, incluindo o endereço IP usado no caso de SSH e outros detalhes relevantes para a auditoria. Além disso, você sempre pode revisar o que aparece em / var / log / secureonde esses eventos de segurança serão registrados.

Bloqueio de conta devido a tentativas de login falhas no Debian e Ubuntu
No caso de Debian, Ubuntu e derivadosA lógica é semelhante, mas o módulo PAM utilizado muda. Tradicionalmente, ele tem sido usado pam_tally2 para contabilizar tentativas falhas e bloquear contas automaticamente, embora nas versões modernas seja recomendável migrar para pam_faillockAinda assim, o pam_tally2 continua muito presente em muitos guias e ambientes.
Para aplicar um bloqueio com base no número de tentativas falhas em um sistema Debian típico, geralmente você edita o arquivo. /etc/pam.d/common-authque define a política de autenticação padrão para a maioria dos serviços locais. Você pode adicionar uma linha como esta a ela:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 audit even_deny_root root_unlock_time=600
Com essa configuração, o sistema A conta foi bloqueada após 3 tentativas falhas.Ele mantém o bloqueio por 120 segundos para usuários normais e por 600 segundos para o usuário root. Além disso, se ocorrer algum erro com o módulo (onerr=falha), por motivos de segurança, o acesso é negado em vez de permitido.
Os principais parâmetros de pam_tally2 são:
- onerr=falhaCaso haja algum problema na leitura ou atualização do contador de tentativas, a autenticação será negada para evitar deixar uma porta aberta acidentalmente.
- negar=3Número máximo de tentativas de login permitidas antes do bloqueio da conta. Um valor de 3 costuma ser bastante razoável na prática.
- tempo_desbloqueio=120Tempo, em segundos, que a conta permanecerá bloqueada para usuários padrão.
- auditor: registra informações sobre falhas de autenticação (no Debian, geralmente é /var/log/auth.log).
- até negar raiz: força o usuário root a também ser contabilizado neste sistema de bloqueio, algo que deve ser usado com cautela.
- tempo_desbloqueio_raiz=600Tempo de bloqueio específico para a conta root, em segundos, independente dos outros usuários.
Quando o bloqueio é ativado, o usuário verá uma mensagem indicando que sua conta foi temporariamente desativada devido a um número excessivo de tentativas de login malsucedidas. Isso permite que o administrador detecte comportamentos suspeitos e alerte o usuário de que algo está errado.
Para visualizar as tentativas falhas registadas por pam_tally2 Para um usuário específico (por exemplo, lionel), você pode usar:
pam_tally2 -u lionel
este comando Mostra o número de falhas acumuladas. E permite que você reinicie o contador manualmente, se necessário, com opções adicionais. Além disso, assim como no Red Hat, você sempre tem a opção de revisar. /var/log/auth.log Para ver em mais detalhes o que aconteceu em cada tentativa de autenticação.
Limite as tentativas de SSH com MaxAuthTries
Um dos pontos de entrada mais comuns em servidores Linux é SSHPor isso, é fundamental controlar quantas tentativas de autenticação são permitidas por conexão. É aí que entra a política. MaxAuthTries, que está configurado no arquivo / etc / ssh / sshd_config do servidor OpenSSH.
A ideia é simples: MaxAuthTries define o número máximo de tentativas de autenticação permitidas por conexão SSH.Caso esse limite seja excedido, o servidor encerra a conexão, forçando o atacante a iniciar uma nova sessão para continuar tentando combinações, o que retarda significativamente os ataques automatizados de força bruta.
Para configurá-lo, basta editar o arquivo de configuração:
sudo nano /etc/ssh/sshd_config
Em seguida, localize ou adicione uma linha como esta:
MaxAuthTries 3
Com esse valor, São permitidas apenas três tentativas de autenticação por conexão SSH.Se o usuário cometer o mesmo erro várias vezes, o daemon sshd o desconectará. Para que a alteração entre em vigor, o serviço deve ser recarregado ou reiniciado, por exemplo, com:
sudo systemctl restart sshd
MaxAuthTries não substitui módulos PAM como pam_tally2 ou pam_faillock, mas sim funciona em paraleloO servidor SSH controla quantas tentativas consecutivas são permitidas em uma única sessão, enquanto o PAM mantém uma contagem global por usuário e pode bloquear sua conta no nível do sistema.
Além do MaxAuthTries, é recomendável combinar outras medidas de segurança SSH para tornar o serviço muito mais robusto:
- Alterar a porta padrãoParar de usar a porta 22 e usar uma porta menos óbvia para o SSH ajuda a filtrar muitas varreduras automáticas básicas.
- Use chaves públicas em vez de apenas senhas.A autenticação por meio de chaves SSH elimina o problema de senhas fracas e é muito mais robusta contra ataques de força bruta.
- Restrinja as fontes usando um firewall ou configure uma DMZ.Permitir SSH apenas a partir de endereços IP específicos ou intervalos de rede adiciona uma barreira muito eficaz no nível da rede.
Limitar tentativas de autenticação local com PAM
Além do SSH, o autenticação local (console, TTYs, sudo, gerenciador de exibição gráfica) também é gerenciado com PAM. No Debian e Ubuntu, por exemplo, o arquivo /etc/pam.d/common-auth É o núcleo dessa configuração e, nos sistemas Red Hat, desempenha um papel fundamental. autenticação do sistema (e às vezes autenticação por senha).
Além de módulos de bloqueio dedicados como pam_faillock ou pam_tally2, algumas distribuições permitem limitar as tentativas e os tempos de login diretamente através de login.defsNeste arquivo, localizado em /etc/login.defsSão declarados valores como os seguintes:
- LOGIN_RETRIES: número máximo de tentativas permitidas na tela de login antes de abortar o processo.
- LOGIN_TIMEOUTTempo máximo, em segundos, que a sessão de login pode permanecer aguardando a entrada do usuário.
Por exemplo, se você ajustar LOGIN_RETRIES Com um limite de 3 senhas, o usuário terá apenas três tentativas para inserir sua senha em uma única sessão de login antes que o sistema encerre a tentativa, forçando-o a reiniciar o processo. Isso não bloqueia a conta em si, mas... limita as tentativas por sessão.
No mesmo arquivo login.defs Você também pode ajustar outros parâmetros de segurança relevantes, como:
- PASS_MAX_DAYS: número máximo de dias que uma senha pode ser usada antes de ser obrigada a ser alterada.
- PASS_MIN_DAYSNúmero mínimo de dias entre as alterações de senha, para evitar alterações excessivamente frequentes e em "cadeia".
- PASS_WARN_AGEAviso prévio de alguns dias antes do vencimento da senha, para que o usuário tenha tempo de reagir.
- COMPRIMENTO_MÍNIMO_PASSAGEM y COMPRIMENTO_MÁXIMO_PASSAGEM: comprimento mínimo e máximo da senha.
- PASS_ALWAYS_WARN: emite um aviso quando a senha não atende a determinados critérios de segurança.
- TENTATIVAS_DE_ALTERAÇÃO_DE_SENHA: número máximo de tentativas de alteração de senha caso a nova senha seja considerada muito simples.
- ENCRYPT_METHOD: algoritmo de hash a ser usado para senhas (o mais comum hoje em dia é SHA-512, indicado como $ $ 6).
Essas diretrizes afetam principalmente Novos usuários Essas configurações são criadas após o ajuste do arquivo login.defs, sendo uma maneira prática de estabelecer uma política básica para toda a organização.
Gerenciando tentativas e expiração com /etc/shadow e o comando change
O arquivo / etc / shadow É aqui que o sistema armazena as senhas criptografadas dos usuários locais, juntamente com todas as informações de expiração. Embora não sejam alteradas manualmente diariamente, compreender sua estrutura ajuda bastante na auditoria e no aprimoramento das políticas de segurança.
Em cada linha de / etc / shadow Aparecem vários campos, separados por dois pontos. Os mais relevantes para as nossas políticas são:
- Nome de usuário: identifica a conta à qual os demais campos pertencem.
- Senha criptografada: é armazenado como $id$salt$hashedOnde $id$ indica o algoritmo ($1 MD5, $2a$/$2y$ Baiacu, $5 SHA-256, $6 SHA-512), seguido de sal e haxixe.
- Última alteração de senha: número de dias desde 1 de janeiro de 1970 (época) em que foi modificado pela última vez.
- Dias mínimos e máximos de utilizaçãoEles controlam quando a senha pode ser alterada novamente e quando ela expira.
- dias de aviso de expiraçãoQuantos dias antes do vencimento o sistema começa a notificar o usuário?
- Dias de inatividadeApós a expiração da senha, quanto tempo leva para a conta ser completamente desativada?
- Data de expiração absoluta da conta: também em formato de dias, desde 1970, marca o momento em que o login não é mais permitido para esse usuário.
Para gerenciar esses parâmetros sem modificar diretamente o arquivo /etc/shadow, utiliza-se o seguinte comando: chage (mudar de idade), que permite ajustar a senha e o prazo de expiração da conta para usuários específicos.
Algumas opções comuns para chage são:
- -d, –dia passado: define o dia da última alteração de senha (em dias desde a época Unix ou com uma data legível).
- -E, –data de expiração: define a data a partir da qual a conta expira.
- -Eu, –inativo: marca a conta como inativa após um determinado número de dias a partir do vencimento da senha.
- -m, –mindays: define o número mínimo de dias entre alterações de senha.
- -M, –diasmáximos: indica o número máximo de dias durante os quais a senha permanece válida.
- -W, –dias de aviso: define quantos dias antes do vencimento as notificações serão enviadas.
- -l, –lista: Mostra o status de expiração atual de um usuário.
Por exemplo, para verificar as informações de expiração do usuário. pimenta Pode ser executado:
chage -l pepe
A saída indicará A data da última alteração, se a senha expira ou não, o período de inatividade e os dias mínimo e máximo....entre outros dados. Com esta ferramenta, você pode aplicar políticas individualmente, usuário por usuário, ou em scripts que processam grupos inteiros de contas.
Políticas de complexidade de senha com pam_cracklib e pam_pwquality
Limitar as tentativas de senha é ótimo, mas se as senhas forem algo como "123456" ou "qwerty", você não vai muito longe. É por isso que é crucial. exigir senhas fortes usando módulos PAM como pam_cracklib e, em versões mais recentes, pam_pwqualidade.
O módulo pam_pwqualidade É uma evolução do cracklib e integra-se com bibliotecas como... libpwqualidade Para verificar se as senhas não estão em dicionários, não são muito curtas e não repetem padrões simples ou dados pessoais do usuário. Está incluído nativamente em ambientes baseados em RHEL e pode ser instalado em Debian/Ubuntu usando pacotes como... libpam-cracklib y libpam-pwquality.
Após a instalação, a configuração principal geralmente é feita no arquivo /etc/security/pwquality.confonde você pode definir parâmetros de complexidade, tais como:
- difok: número de caracteres que devem ser diferentes da senha anterior.
- minlen: comprimento mínimo aceitável para a nova senha.
- crédito, crédito, crédito, ocréditoCréditos pela inclusão de dígitos, letras maiúsculas, letras minúsculas e outros caracteres.
- minclass: número mínimo de classes de caracteres diferentes necessárias (minúsculas, maiúsculas, dígitos, símbolos).
- repetição máxima: número máximo de caracteres idênticos consecutivos permitidos.
- maxclassrepeat: número máximo de caracteres consecutivos da mesma classe.
- gecoscheck: verifica se a senha não contém palavras do campo GECOS (comentário) do usuário em /etc/passwd.
- dictpath: caminho para o dicionário usado para verificar se uma senha faz parte de uma palavra conhecida.
- palavrõesLista de palavras explicitamente proibidas.
O sistema créditos É especialmente flexível. Basicamente, uma senha ganha créditos por incluir uma variedade de caracteres; esses créditos podem compensar um comprimento ligeiramente menor. Por exemplo, com minlen=10 y crédito=2Uma senha de 8 caracteres com 2 dígitos pode passar pelo filtro porque adiciona 2 créditos extras. No entanto, se você definir créditos negativos, precisará de pelo menos um caractere negativo (por exemplo, dcredit=-1 (Requer pelo menos um dígito, sem exceções).
Com minclass Você pode exigir que a senha inclua várias classes diferentes. Um valor de 2 força, por exemplo, uma combinação de letras e números, ou letras e símbolos, etc. minclass=4 Isso exigiria o uso simultâneo de letras minúsculas, letras maiúsculas, dígitos e caracteres especiais, algo muito típico em políticas corporativas exigentes.
Ferramentas como pwscore Eles permitem testar a força de uma senha em relação a políticas definidas. Quando uma senha é passada por meio de um processo pwscoreIsso indica se a chave atende aos requisitos ou não e, caso contrário, qual regra ela está violando (comprimento insuficiente, muito simples, muito semelhante à anterior, etc.).
Configure políticas robustas no Debian e Ubuntu com pam_cracklib
Em sistemas Debian/Ubuntu, é muito comum usar pam_cracklib (ou pwquality via PAM) para impor a política de senhas. O arquivo chave aqui é /etc/pam.d/common-password, que define como as alterações de senha são gerenciadas para os usuários do sistema.
Antes de fazer qualquer alteração, é uma boa prática criar uma cópia de segurança do arquivo:
sudo cp /etc/pam.d/common-password /root/
Em seguida, você poderá editá-lo com seu editor de texto favorito (nano, vim, etc.) com privilégios de superusuário. Lá dentro, você encontrará uma linha semelhante a:
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
Aqui, são definidos parâmetros como os seguintes:
- tentar novamenteNúmero de tentativas permitidas ao usuário ao alterar sua senha, antes que a alteração falhe.
- minlen: comprimento mínimo da senha.
- difok: número de caracteres que devem ser diferentes da senha anterior.
- crédito, crédito, crédito, ocréditoCréditos positivos ou negativos para letras maiúsculas, letras minúsculas, dígitos e outros caracteres.
Por exemplo, uma política bastante exigente poderia ser:
password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-3 lcredit=-3 dcredit=-3 ocredit=-3
Com esta configuração, Toda nova senha deve ter no mínimo 12 caracteres.A senha deve diferir em pelo menos 3 caracteres da anterior e conter no mínimo 3 letras maiúsculas, 3 letras minúsculas, 3 dígitos e 3 símbolos. É uma política muito rigorosa, mas extremamente eficaz contra senhas triviais.
Depois de alterar a política, você pode testá-la alterando sua própria senha com:
sudo passwd
Caso a senha não atenda aos requisitos, o sistema exibirá mensagens indicando o motivo: muito curta, semelhante a uma palavra do dicionário, repetição excessiva de caracteres, etc. Assim que a senha estiver em conformidade com a política, a alteração será aplicada sem problemas.
Além de reforçar a política para novas alterações, o Debian e o Ubuntu permitem obrigar os usuários existentes a alterarem suas senhas Para se adaptar às novas regras. Com o comando:
passwd -e USUARIO
A senha desse usuário foi marcada como expirada e, no próximo login, ele precisará definir uma nova senha que esteja em conformidade com a política atual. Você também pode controlar a expiração global de senhas com:
passwd -w 5 -x 30 USUARIO
onde -x 30 estabelece uma validade máxima de 30 dias para a senha e -w 5 Isso faz com que o sistema comece a notificá-lo 5 dias antes da data de vencimento. Se você adicionar -i1:
passwd -w 5 -x 30 -i 1 USUARIO
A conta será marcada como inativa se o usuário não alterar sua senha. um dia após o vencimento, obrigando o administrador a intervir para reativá-lo.
Embora a rotação frequente de senhas seja recomendada há anos, as diretrizes de segurança modernas (como as do NIST) qualificam essa prática: É preferível optar por senhas longas e complexas, e por sistemas de autenticação de dois fatores., em vez de forçar mudanças excessivamente frequentes que acabam gerando chaves previsíveis.
Configure cuidadosamente os módulos PAM (pam_faillock, pam_tally2, pam_cracklib, pam_pwquality) e arquivos-chave como /etc/pam.d/common-auth, /etc/pam.d/common-password, /etc/login.defs, / etc / ssh / sshd_config e compreender como essas decisões se refletem em / etc / shadowIsso marca a diferença entre um sistema "padrão" e um ambiente verdadeiramente protegido contra acessos não autorizados e ataques de força bruta.
