SSHGuard DenyHosts proteção: blindagem definitiva contra brute force SSH
Quando falamos em SSHGuard DenyHosts proteção, estamos nos referindo a uma camada crítica de segurança que todo administrador de sistemas Linux precisa compreender profundamente. Os ataques de força bruta contra o protocolo SSH não são apenas persistentes — eles evoluíram dramaticamente nos últimos anos. Segundo a pesquisa recente divulgada pela Help Net Security, mais de 99% dos logins registrados em honeypots SSH são agora ataques não-interativos, executados por scanners automatizados que rodam um único comando e se desconectam imediatamente. Essa estatística alarmante, publicada em julho de 2026, evidencia que o cenário de ameaças mudou: não se trata mais de invasores humanos tentando senhas manualmente, mas de exércitos de bots altamente eficientes que vasculham a internet em busca de credenciais fracas, chaves mal configuradas e serviços expostos.
O ecossistema de ferramentas de defesa também se transformou para acompanhar essa realidade. Durante muito tempo, soluções como DenyHosts e Fail2ban dominaram o mercado de proteção reativa — analisando logs, detectando padrões de falha e aplicando regras de firewall para bloquear IPs suspeitos. O DenyHosts, escrito em Python e focado exclusivamente em SSH, foi pioneiro nessa abordagem, mantendo arquivos como /etc/hosts.deny para rejeitar conexões de origens maliciosas. Entretanto, com o passar dos anos, limitações arquiteturais começaram a aparecer: dependência de parsing de logs textuais, suporte restrito a backends de firewall modernos e uma comunidade de desenvolvimento que perdeu fôlego. É nesse contexto que o SSHGuard emergiu como alternativa nativa e mais robusta, ganhando destaque em distribuições como Ubuntu 24.04 LTS, Debian 12, CentOS Stream 9 e Rocky Linux 9.
Na JRT Technology Solutions, nossos especialistas em segurança da informação implementam diariamente soluções de blindagem para servidores corporativos e ambientes de missão crítica. Ao longo deste post técnico, vamos mergulhar na arquitetura interna do SSHGuard, demonstrar como ele herda e supera conceitos do DenyHosts, e fornecer um roteiro completo de instalação e configuração que utilizamos em nossos projetos. Abordaremos a personalização de limiares de bloqueio, a integração com backends como iptables, nftables, firewalld e UFW, a interpretação inteligente de logs e até mesmo a simulação prática de um ataque de força bruta para validar a proteção. Se você é responsável pela infraestrutura de servidores Linux, este guia foi escrito para você — com o nível de profundidade técnica que a sua operação exige.
Além disso, vamos contextualizar o papel do SSHGuard dentro de uma estratégia mais ampla de defesa em camadas. A notícia publicada no Blog DFT Informática, que detalha a Aula 21 sobre SSHGuard, mostra que a comunidade técnica brasileira está cada vez mais atenta à necessidade de dominar ferramentas nativas de proteção contra ataques a múltiplos serviços — não apenas SSH, mas também FTP, SMTP, IMAP e POP3. A JRT Technology Solutions desenvolve e oferece suporte completo a essas tecnologias, garantindo que nossos clientes estejam protegidos contra as ameaças mais recentes. Vamos começar.
SSHGuard DenyHosts proteção: entendendo a evolução das ferramentas anti brute force
Para compreender por que o SSHGuard DenyHosts proteção representa um salto qualitativo, é essencial revisitar a história dessas ferramentas. O DenyHosts foi criado em 2005 por Phil Schwartz como um script Python que monitorava o arquivo /var/log/auth.log (ou /var/log/secure em sistemas Red Hat) em busca de tentativas de login SSH fracassadas. Quando um determinado IP excedia um limite configurável de falhas — tipicamente 5 ou 10 tentativas — o DenyHosts inseria automaticamente uma entrada no arquivo /etc/hosts.deny, bloqueando todas as conexões futuras daquele endereço via TCP Wrappers. Adicionalmente, o IP podia ser reportado a um serviço centralizado de sincronização, permitindo que outros administradores se beneficiassem da inteligência coletiva de bloqueios.
O modelo funcionou bem durante anos, mas apresentava fragilidades estruturais. Primeiro, o TCP Wrappers perdeu relevância à medida que os backends de firewall nativos do kernel Linux evoluíram — hoje, nftables é o subsistema padrão, e o iptables legado ainda coexiste em muitas distribuições. Segundo, o DenyHosts dependia exclusivamente de parsing textual de logs, o que introduzia latência e não oferecia uma integração nativa com os daemons de log modernos como o systemd-journald. Terceiro, o projeto original entrou em um longo período de estagnação — o último release oficial no SourceForge data de 2015, e embora forks como denyhosts-ng tenham surgido, a adoção nunca foi massiva. A JRT Technology Solutions frequentemente se depara com servidores legados que ainda executam DenyHosts, e nossa recomendação é sempre migrar para o SSHGuard como parte do processo de modernização da stack de segurança.
O SSHGuard, por sua vez, nasceu com uma abordagem mais modular e agnóstica em relação ao backend de firewall. Escrito em C para máximo desempenho, ele monitora logs através de pipes ou diretamente do journald, detecta padrões de ataque em tempo real e aplica bloqueios usando o backend configurado — seja iptables, nftables, firewalld, UFW, pf (em sistemas BSD) ou até mesmo hosts.deny para compatibilidade retroativa com a abordagem do DenyHosts. Essa flexibilidade é crucial em ambientes heterogêneos, onde diferentes servidores podem estar executando firewalls distintos dependendo da distribuição e da versão do kernel. Na JRT Technology Solutions, implementamos SSHGuard tanto em clusters Ubuntu 24.04 com UFW quanto em servidores Rocky Linux 9 com firewalld, mantendo uma política de segurança consistente em toda a infraestrutura.
Outro diferencial fundamental do SSHGuard em relação ao DenyHosts é o suporte a múltiplos serviços simultaneamente. Enquanto o DenyHosts focava quase exclusivamente em SSH, o SSHGuard monitora e protege nativamente serviços como FTP (vsftpd, proftpd), SMTP (Postfix, Exim), IMAP/POP3 (Dovecot, Courier), além de HTTP básico e DNS. Isso significa que um único daemon pode consolidar a proteção de toda a stack de serviços expostos, simplificando a gestão e reduzindo a superfície de configuração. Para profissionais de TI que gerenciam dezenas ou centenas de servidores, essa consolidação é um multiplicador de eficiência operacional.
Do ponto de vista da SSHGuard DenyHosts proteção, a transição de uma ferramenta para outra não implica apenas em trocar o software, mas em redefinir a estratégia de defesa. Com o SSHGuard, é possível definir limiares de bloqueio específicos por serviço, tempos de blacklist dinâmicos e whitelists de IPs confiáveis — tudo em um único arquivo de configuração. Além disso, a capacidade de interpretar logs de forma inteligente reduz drasticamente os falsos positivos, um problema crônico no DenyHosts quando usuários legítimos erravam a senha algumas vezes seguidas. A pesquisa da Help Net Security que citamos no início deste artigo reforça a importância dessa precisão: em um cenário onde 99% dos logins SSH são ataques automatizados, o sistema de defesa precisa distinguir com clareza entre tráfego malicioso e operações legítimas de administração.
Arquitetura interna do SSHGuard: backends, parsers e o ciclo de bloqueio
A arquitetura do SSHGuard é elegantemente simples, porém poderosa. O daemon opera em três camadas distintas: a camada de monitoramento de logs, a camada de detecção de padrões e a camada de aplicação de bloqueios. Na primeira camada, o SSHGuard pode ler logs de múltiplas fontes simultaneamente — arquivos de log tradicionais monitorados via tail -f interno, pipes nomeados, ou diretamente do systemd-journald através da API nativa. Essa última opção é particularmente eficiente em distribuições modernas, pois elimina a necessidade de parsing de arquivos em disco e oferece acesso estruturado aos campos de cada entrada de log, como PID do processo, UID do usuário e mensagem exata.
A camada de detecção utiliza parsers específicos para cada tipo de serviço. O parser de SSH, por exemplo, é calibrado para reconhecer mensagens clássicas do OpenSSH como Failed password for root from 192.168.1.100 port 22 ssh2, Invalid user admin from 203.0.113.50 ou Connection closed by authenticating user. Cada parser extrai o endereço IP de origem e classifica a tentativa como suspeita. O SSHGuard mantém uma tabela de estado em memória que rastreia quantas tentativas mal-sucedidas cada IP acumulou dentro de uma janela de tempo configurável (por padrão, 120 segundos). Quando o limiar de bloqueio é atingido — tipicamente 4 tentativas para SSH — o IP é adicionado temporariamente a uma blacklist interna e o bloqueio é aplicado através da camada de firewall.
A camada de aplicação de bloqueios é onde o SSHGuard realmente brilha em comparação com o DenyHosts. Utilizando um conceito de backend plugável, o daemon pode invocar comandos específicos para manipular regras de firewall no formato adequado ao sistema. Para iptables, ele insere regras na chain sshguard (criada automaticamente) que redirecionam pacotes do IP ofensor para DROP ou REJECT. Para nftables, utiliza a sintaxe nativa de sets dinâmicos, que são muito mais eficientes em termos de desempenho quando a lista de bloqueio cresce. Para firewalld, cria rich-rules que se integram perfeitamente à gestão de zonas do firewall. E para UFW, adiciona regras numeradas que podem ser facilmente inspecionadas com ufw status. Na JRT Technology Solutions, nossa prática padrão é utilizar o backend nftables por sua eficiência, mas mantemos documentação completa para todos os cenários.
Um aspecto frequentemente negligenciado, mas crucial, é o mecanismo de expiração automática dos bloqueios. Diferentemente do DenyHosts, onde uma entrada no /etc/hosts.deny permanecia indefinidamente a menos que um cron job a removesse, o SSHGuard aplica bloqueios com TTL (time-to-live) configurável. Após o período de blacklist — padrão de 420 segundos, ou 7 minutos — o IP é automaticamente removido do firewall. Isso evita o acúmulo infinito de regras que, em servidores com alto volume de ataques, poderia degradar o desempenho do firewall. Além disso, o SSHGuard implementa um gargabe collector interno que periodicamente varre IPs expirados e libera memória, garantindo que o daemon permaneça leve mesmo após semanas de operação contínua sob ataque intenso.
A tabela a seguir resume os principais backends de firewall suportados pelo SSHGuard e suas características de implementação:
SSHGuard DenyHosts proteção na prática: instalação em Ubuntu, Debian, CentOS Stream e Rocky Linux
A instalação do SSHGuard é notavelmente simples em todas as principais distribuições Linux, o que contrasta com o processo de configuração do DenyHosts — que frequentemente exigia a instalação manual de dependências Python e scripts de inicialização personalizados. Em distribuições baseadas em Debian, como o Ubuntu 24.04 LTS e o Debian 12, o SSHGuard está disponível diretamente nos repositórios oficiais. Basta executar apt update && apt install sshguard -y para obter a versão estável compilada e pronta para uso. O pacote inclui o binário principal, o arquivo de configuração /etc/sshguard/sshguard.conf (em algumas versões, /etc/sshguard.conf), um serviço systemd e scripts de integração com os backends de firewall mais comuns.
Para distribuições da família Red Hat, como CentOS Stream 9 e Rocky Linux 9, o SSHGuard está disponível no repositório EPEL (Extra Packages for Enterprise Linux). Após habilitar o EPEL com dnf install epel-release -y, o comando dnf install sshguard -y instala o pacote e suas dependências. Uma diferença importante é que nessas distribuições, o backend padrão pode ser configurado para firewalld em vez de iptables, refletindo a preferência do ecossistema Red Hat. Na JRT Technology Solutions, ajustamos essa configuração durante o playbook de deploy automatizado que utilizamos para provisionar servidores: o Ansible detecta a distribuição e aplica o backend de firewall correto automaticamente.
Após a instalação, é fundamental configurar o backend de firewall antes de iniciar o serviço. O arquivo de configuração principal (geralmente /etc/sshguard/sshguard.conf) contém a diretiva BACKEND, que deve ser ajustada conforme o ambiente. Para servidores Ubuntu com UFW, a configuração recomendada é:
- BACKEND=’/usr/lib/sshguard/sshg-fw-ufw’ — caminho para o script de integração com UFW
- LOGREADER=’journalctl -u ssh -f’ — monitoramento eficiente via journald para o serviço SSH
- THRESHOLD=30 — número de tentativas mal-sucedidas antes do bloqueio (valor padrão conservador; recomendamos ajustar para 4 ou 5 em produção)
- BLOCK_TIME=420 — tempo de bloqueio em segundos (7 minutos; em ambientes sob ataque intenso, elevamos para 1800 ou até 3600 segundos)
Para servidores Rocky Linux 9 com firewalld, a configuração típica que utilizamos na JRT é:
- BACKEND=’/usr/lib/sshguard/sshg-fw-firewalld’ — integração nativa com firewalld
- LOGREADER=’journalctl -u sshd -f’ — note que o nome da unidade systemd do SSH é
sshdem distribuições Red Hat - FILES=’/var/log/secure’ — fallback para leitura de arquivo de log tradicional, útil em sistemas que ainda não migraram completamente para journald
- WHITELIST_FILE=’/etc/sshguard/whitelist’ — arquivo contendo IPs ou faixas CIDR que nunca devem ser bloqueados (IPs de escritórios corporativos, VPNs da empresa, etc.)
Um passo crítico que muitos administradores negligenciam é a criação e validação do arquivo de whitelist. Se o seu próprio IP de administração for bloqueado por engano — algo que acontece com mais frequência do que gostaríamos — você perderá acesso SSH ao servidor e precisará de acesso via console (KVM, iDRAC, iLO) para reverter o bloqueio. Na JRT Technology Solutions, sempre configuramos a whitelist como primeiro passo, incluindo pelo menos dois IPs de acesso administrativo redundantes:
- IP público do escritório principal (com máscara /32)
- IP do túnel VPN corporativo
- IP do servidor de monitoramento que realiza verificações SSH automatizadas legítimas
- IPs de ranges internos (RFC 1918) para evitar bloqueios acidentais em ambientes NAT
Após configurar backend, whitelist e limiares, o serviço pode ser iniciado com systemctl enable --now sshguard. É essencial verificar o status imediatamente: systemctl status sshguard deve mostrar o daemon ativo e em execução. Adicionalmente, recomendamos verificar os logs do próprio SSHGuard com journalctl -u sshguard -f para confirmar que ele está detectando eventos corretamente. Em nossos projetos, a JRT Technology Solutions desenvolveu scripts de validação pós-deploy que simulam uma tentativa de conexão com senha inválida a partir de um IP de teste pré-autorizado (temporariamente removido da whitelist apenas para o teste) e verificam se o bloqueio é aplicado dentro do tempo esperado.
Configuração avançada de limiares, blacklist e whitelist no SSHGuard
Dominar os parâmetros de SSHGuard DenyHosts proteção significa ir muito além da configuração padrão e ajustar o comportamento do daemon para o perfil específico de ameaças que o seu servidor enfrenta. O arquivo de configuração do SSHGuard oferece dezenas de diretivas que controlam desde o limiar de bloqueio até o comportamento de reincidência — e cada uma delas tem implicações diretas na eficácia da proteção e na taxa de falsos positivos. Vamos detalhar as mais importantes e como as utilizamos na JRT Technology Solutions para diferentes perfis de carga.
A diretiva THRESHOLD define quantas tentativas mal-sucedidas um IP pode acumular dentro da janela de tempo antes de ser bloqueado. O valor padrão de 30 é excessivamente permissivo para a maioria dos ambientes — um atacante teria 30 chances de acertar uma senha antes de sofrer qualquer consequência. Em servidores de produção, recomendamos um valor entre 3 e 5 para SSH, 5 para FTP e 10 para SMTP (já que clientes de e-mail legítimos podem apresentar mais falhas de autenticação devido a configurações incorretas de clientes). A diretiva THRESHOLD_DENY oferece um segundo nível de agressividade: se um IP já bloqueado anteriormente tentar atacar novamente após o período de blacklist expirar, o limite pode ser reduzido, tornando mais fácil bloquear reincidentes.
O BLOCK_TIME controla por quantos segundos um IP permanece bloqueado. O padrão de 420 segundos (7 minutos) é razoável para um primeiro bloqueio, mas a JRT Technology Solutions recomenda uma política escalonada: 600 segundos (10 minutos) para a primeira ofensa, 1800 segundos (30 minutos) para a segunda, e 3600 segundos (1 hora) ou mais para reincidências subsequentes. Essa política é implementada através da diretiva BLACKLIST_THRESHOLD combinada com BLACKLIST_FILE. Quando um IP atinge o BLACKLIST_THRESHOLD (por exemplo, 3 bloqueios temporários em um período de 24 horas), ele é adicionado permanentemente ao arquivo de blacklist e só pode ser removido manualmente pelo administrador.
O gerenciamento de whitelist merece atenção especial. Além do arquivo estático /etc/sshguard/whitelist, o SSHGuard suporta whitelist dinâmica baseada em sub-redes inteiras usando notação CIDR. Por exemplo:
- 10.0.0.0/8 — toda a rede interna corporativa
- 172.16.0.0/12 — faixa privada classe B
- 192.168.0.0/16 — faixa privada classe C
- 203.0.113.50/32 — IP público específico do administrador
Um recurso avançado que diferencia o SSHGuard do DenyHosts é a capacidade de usar expressões regulares nos parsers de log para capturar padrões de ataque não-convencionais. Por exemplo, se o seu servidor executa um honeypot SSH em uma porta alternativa e você deseja que o SSHGuard monitore tanto a porta 22 quanto a porta 2222, é possível criar um parser customizado. Na JRT Technology Solutions, implementamos parsers personalizados para serviços como MySQL e PostgreSQL que não são cobertos nativamente, estendendo a proteção do SSHGuard para camadas de banco de dados expostas a ataques de força bruta.
A tabela a seguir sintetiza as diretivas mais importantes e os valores que recomendamos para diferentes cenários de produção:
Gostou do conteúdo? Fale com nossos especialistas!
A JRT Technology Solutions está pronta para implementar, configurar e dar suporte às tecnologias abordadas neste artigo.