Pular para o conteúdo

Como Acessar seu Servidor Remotamente com Segurança

O acesso remoto a servidores é essencial para administração de sistemas, mas representa um vetor crítico de segurança se não for implementado corretamente. Este guia apresenta as melhores práticas e protocolos para acessar seus servidores de forma segura, protegendo dados e infraestrutura contra acessos não autorizados.


O SSH é o protocolo criptografado padrão para acesso remoto a servidores Linux e Unix, substituindo o Telnet inseguro.

Terminal window
# Conexão SSH padrão
ssh usuario@seu-servidor.com
# Especificando porta e chave
ssh -p 2222 -i ~/.ssh/id_rsa usuario@seu-servidor.com

Edite o arquivo /etc/ssh/sshd_config:

Terminal window
# Desabilitar login root
PermitRootLogin no
# Alterar porta padrão (opcional, mas recomendado)
Port 2222
# Autenticação apenas por chave
PasswordAuthentication no
PubkeyAuthentication yes
# Limitar usuários permitidos
AllowUsers admin deploy backup
# Desabilitar autenticação por senha vazia
PermitEmptyPasswords no
# Timeout de inatividade
ClientAliveInterval 300
ClientAliveCountMax 2

🔒 Importante: Sempre teste a configuração em uma sessão paralela antes de fechar a atual: sshd -t


Para servidores Windows, o RDP é o protocolo nativo, mas requer endurecimento.

MedidaImplementação
Network Level Authentication (NLA)Habilitar obrigatoriamente
Alterar porta padrãoMudar de 3389 para porta alta aleatória
Grupo de usuários restritoLimitar acesso ao grupo “Remote Desktop Users”
VPN obrigatóriaExigir conexão VPN antes do RDP
Account lockoutBloquear após 5 tentativas falhas
Terminal window
# Habilitar NLA
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "UserAuthentication" -Value 1
# Alterar porta do RDP (exemplo: 53389)
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "PortNumber" -Value 53389

As chaves SSH oferecem segurança superior às senhas, sendo praticamente invulneráveis a ataques de força bruta.

Terminal window
# Gerar par de chaves Ed25519 (mais moderno e seguro)
ssh-keygen -t ed25519 -C "seu-email@exemplo.com"
# Ou RSA 4096 bits (para compatibilidade legada)
ssh-keygen -t rsa -b 4096 -C "seu-email@exemplo.com"
Terminal window
# Método automático (recomendado)
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor
# Método manual
cat ~/.ssh/id_ed25519.pub | ssh usuario@servidor "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Terminal window
# Definir permissões corretas
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
# Adicionar senha à chave (opcional, mas recomendado)
ssh-keygen -p -f ~/.ssh/id_ed25519

Adicione uma camada extra de segurança combinando algo que você sabe (senha) com algo que você tem (dispositivo).

Terminal window
# Instalar no servidor
sudo apt install libpam-google-authenticator
# Configurar usuário
google-authenticator
# Editar /etc/pam.d/sshd
auth required pam_google_authenticator.so
# Editar /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

Uma VPN cria um túnel criptografado entre sua máquina e a rede do servidor, ocultando o tráfego de terceiros.

SoluçãoCaso de UsoDificuldade
WireGuardAlto desempenho, modernoMédia
OpenVPNFlexível, amplamente suportadoMédia/Alta
Tailscale/ZeroTierMesh VPN, fácil configuraçãoBaixa
IPsec/IKEv2Integração nativa Windows/iOSMédia
Terminal window
# Instalação
sudo apt install wireguard
# Gerar chaves
wg genkey | tee privatekey | wg pubkey > publickey
# Configuração /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <chave-privada-servidor>
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = <chave-publica-cliente>
AllowedIPs = 10.0.0.2/32

🌐 Regra de ouro: Sempre que possível, desabilite acesso SSH/RDP direto pela internet e exija VPN.


Um bastion host é um servidor fortificado que serve como ponto único de entrada para sua infraestrutura interna.

[Usuário] → Internet → [Bastion Host] → Rede Interna → [Servidores Privados]
Terminal window
# Acesso direto via bastion
ssh -J usuario@bastion.exemplo.com usuario@servidor-interno.local
# Configuração no ~/.ssh/config
Host bastion
HostName bastion.exemplo.com
User admin
IdentityFile ~/.ssh/bastion_key
Host servidor-interno
HostName 192.168.1.10
User deploy
IdentityFile ~/.ssh/internal_key
ProxyJump bastion

Terminal window
# Usando UFW (Ubuntu/Debian)
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Permitir SSH apenas de IPs específicos (ideal)
sudo ufw allow from 203.0.113.0/24 to any port 2222 proto tcp
# Ou, se necessário acesso global, rate limiting
sudo ufw limit 2222/tcp
# Negar explicitamente porta SSH padrão
sudo ufw deny 22/tcp
sudo ufw enable
Terminal window
# Instalação
sudo apt install fail2ban
# Configuração /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

Terminal window
# Visualizar logs SSH em tempo real
sudo tail -f /var/log/auth.log | grep sshd
# Últimos logins bem-sucedidos
last | head -20
# Tentativas de login falhas
sudo grep "Failed password" /var/log/auth.log
# Logins atuais
who
FerramentaFunção
auditdMonitoramento de chamadas de sistema
aideDetecção de integridade de arquivos
logwatchAnálise automatizada de logs
OSSEC/WazuhSistema de detecção de intrusão (HIDS)

  • [ ] Alterar porta padrão de serviços (SSH/RDP)
  • [ ] Desabilitar login root/administrador direto
  • [ ] Configurar autenticação por chave/certificate
  • [ ] Implementar MFA onde possível
  • [ ] Configurar firewall (permitir apenas portas necessárias)
  • [ ] Instalar fail2ban ou similar
  • [ ] Habilitar logs detalhados
  • [ ] Configurar backups automáticos
  • [ ] Manter sistema atualizado (security patches)
  • [ ] Configurar monitoramento de acessos

Terminal window
# Verificar permissões da pasta .ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
# Verificar contexto SELinux (se aplicável)
restorecon -Rv ~/.ssh
Terminal window
# Verificar se serviço está rodando
sudo systemctl status sshd
# Verificar porta correta
sudo ss -tlnp | grep ssh
# Verificar firewall
sudo ufw status

A segurança no acesso remoto é construída em camadas. Nenhuma medida isolada é suficiente, mas a combinação de:

  1. Protocolos criptografados (SSH, VPN)
  2. Autenticação forte (chaves + MFA)
  3. Segmentação de rede (VPN, bastion hosts)
  4. Monitoramento contínuo (logs, IDS)

…cria uma defesa robusta contra acessos não autorizados.

💡 Lembre-se: A conveniência é inimiga da segurança. Quanto mais fácil for para você acessar, mais fácil será para um atacante também.