Guia Avançado de Implementação, Hardening e Diagnóstico do Daemon OpenSSH

Implantação do Daemon SSH em Ambientes Linux

Começaremos pela instalação do daemon nos principais ecossistemas baseados em Linux. O pacote openssh-server é o componente essencial para habilitar o acesso remoto seguro.

# Distribuições baseadas em Debian/Ubuntu
sudo apt-get update && sudo apt-get install -y openssh-server openssh-client

# Distribuições baseadas em RHEL/CentOS/Fedora
sudo dnf install -y openssh-server openssh-clients

# Habilitar e iniciar o serviço imediatamente
sudo systemctl enable --now sshd.service

O pacote também fornece utilitários como o ssh-keygen para criação de pares criptográficos e o arquivo /etc/ssh/moduli para troca de chaves Diffie-Hellman.

Ajustes de SELinux e Firewalld/Iptables

Em ambientes corporativos, é comum ajustar as políticas de segurança locais. Em vez de desativar o SELinux (prática não recomendada), configure-o para permitir o tráfego SSH em portas não padrão, ou ajuste as regras de firewall.

# Verificar e adicionar contexto SELinux para porta customizada
sudo semanage port -a -t ssh_port_t -p tcp 2222

# Liberar porta no firewalld
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

# Alternativa com iptables (limpando regras antigas e permitindo SSH)
sudo iptables -F
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Para validar se o processo está ativo e escutando:

ss -tulpn | grep sshd
pgrep -a sshd

Provisionamento do OpenSSH no Windows

A Microsoft suporta nativamente o OpenSSH. Podemos instalá-lo via PowerShell ou utilizando o gerenciador de pacotes Chocolatey.

Instalação via Chocolatey

O método mais ágil para ambientes Windows é utilizar o choco, que automatiza a configuração inicial.

# Instalar o servidor e cliente OpenSSH com recursos adicionais
choco install openssh -y --params "/SSHServerFeature /SSHAgentFeature"

# Iniciar e definir inicialização automática para os serviços
Set-Service -Name sshd -StartupType Automatic
Start-Service sshd

Set-Service -Name ssh-agent -StartupType Automatic
Start-Service ssh-agent

Configuração do Shell Padrão no Windows

Por padrão, o SSH no Windows abre o cmd.exe. Podemos alterar isso para o PowerShell Core (pwsh) ou Bash via registro do Windows.

# Definir PowerShell 7 como shell padrão
$pwshPath = (Get-Command pwsh -ErrorAction SilentlyContinue).Source
if ($pwshPath) {
    New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value $pwshPath -PropertyType String -Force
}

# Definir Git Bash como shell padrão (caso instalado via Scoop ou Installer)
$bashPath = "C:\Program Files\Git\bin\bash.exe"
if (Test-Path $bashPath) {
    New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value $bashPath -PropertyType String -Force
}

Autenticação Baseada em Chaves Criptográficas

A autenticação por senha é vulnerável a ataques de força bruta. A implementação de chaves assimétricas modernas é o padrão da indústria.

# Gerar um par de chaves Ed25519 (mais seguro e rápido que RSA)
ssh-keygen -t ed25519 -C "admin@infraestrutura" -f ~/.ssh/id_ed25519_infra

# Adicionar a chave ao agente SSH local
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_infra

Para distribuir a chave pública para o servidor remoto:

# Em ambientes Linux
ssh-copy-id -i ~/.ssh/id_ed25519_infra.pub sysadmin@192.168.1.50

# Em ambientes Windows (copiando manualmente via pipeline SSH)
type $env:USERPROFILE\.ssh\id_ed25519_infra.pub | ssh sysadmin@192.168.1.50 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Hardening e Segurança do sshd_config

O arquivo /etc/ssh/sshd_config (ou C:\ProgramData\ssh\sshd_config no Windows) controla o comportamento do daemon. Após qualquer alteração, o serviço deve ser reinicidao (systemctl restart sshd).

Restrição de Acesso e Protocolos

# Forçar apenas IPv4 e definir porta não padrão
AddressFamily inet
Port 2222

# Desabilitar autenticação por senha e root
PasswordAuthentication no
PermitRootLogin no
PermitEmptyPasswords no

# Restringir acesso a usuários e grupos específicos
AllowUsers sysadmin deployer
AllowGroups ssh-users

# Habilitar PAM para controle de tentativas de login
UsePAM yes
MaxAuthTries 3

Algoritmos Criptográficos Fortes

Remova algoritmos legados e force o uso de cifras modernas para proteger o tráfego contra interceptação e ataques de downgrade.

# Cifras de dados
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com

# Códigos de autenticação de mensagem (MACs)
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

# Algoritmos de troca de chaves
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512

# Algoritmos de chave de host
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256

Para verificar os algoritmos suportados pelo cliente e servidor:

ssh -Q cipher
sshd -T | grep -E 'ciphers|macs|kexalgorithms'

Otimizações de Performance e Telemetria

Aceleração de Conexão

A resolução reversa de DNS pode causar atrasos significativos durante o handshake SSH, especialmente em redes sem DNS reverso configurado.

# Desativar resolução DNS reversa
UseDNS no

# Desativar autenticação GSSAPI se não estiver utilizando Kerberos
GSSAPIAuthentication no

Mnesagens de Boas-vindas (MOTD)

Para exibir banners legais ou informações do sistema após o login, edite o arquivo /etc/motd ou crie scripts em /etc/profile.d/.

# Adicionar banner dinâmico com informações do sistema
cat << 'EOF' > /etc/profile.d/sysinfo.sh
#!/bin/bash
echo "Bem-vindo ao servidor $(hostname). Uptime: $(uptime -p)"
EOF
chmod +x /etc/profile.d/sysinfo.sh

Deprecação do Protocolo SCP no RHEL 9

A partir do Red Hat Enterprise Linux 9, o protocolo SCP foi considerado obsoleto e desativado por padrão devido a falhas de design de segurança inerentes ao seu funcionamento. O OpenSSH agora utiliza o SFTP como protocolo padrão para transferência de arquivos via comando scp. Para forçar o uso do protocolo legado (não recomendado), é necessário usar a flag -O, mas a migração para sftp ou rsync é a abordagem correta e segura.

Diagnóstico e Resolução de Problemas

Quando o daemon falha ao iniciar ou conexões são recusadas, a análise de logs e testes de configuração são fundamentais para identificar a causa raiz.

Validação de Sintaxe e Logs

# Testar arquivo de configuração antes de reiniciar o serviço
sudo sshd -t -f /etc/ssh/sshd_config

# Iniciar em modo de depuração na porta alternativa (não bloqueia o serviço principal)
sudo /usr/sbin/sshd -d -p 2222

# Analisar logs de autenticação em tempo real via systemd
sudo journalctl -u sshd.service -f

# Alternativa para sistemas mais antigos (Debian/Ubuntu)
sudo tail -f /var/log/auth.log | grep sshd

Erro: "Missing privilege separation directory: /run/sshd"

Este erro ocorre frequentemente após reinicializações em sistemas onde o diretório /run (tmpfs) é limpo e o script de inicialização não o recria.

Solução automatizada via systemd tmpfiles:

# Criar arquivo de configuração para o tmpfiles.d
echo "d /run/sshd 0755 root root" | sudo tee /usr/lib/tmpfiles.d/sshd-custom.conf

# Aplicar as regras imediatamente
sudo systemd-tmpfiles --create

Falha na Autenticação por Certificado (Permission denied)

Se o erro Permission denied (publickey) ocorrer, verifique as permissões do diretório .ssh e dos arquivos de chaves no servidor. O OpenSSH é estrito quanto a isso e rejeitará a autenticação se as permissões forem muito permisivas.

# Corrigir permissões do diretório e arquivos do usuário
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519_infra
chown -R $USER:$USER ~/.ssh

Tags: OpenSSH SSHD Linux Windows ssh-keys

Publicado em 7-26 01:31