SSH seguro no Ubuntu 26.04 com hardening e porta via socket activation

Tutorial avançado para deixar o OpenSSH no Ubuntu 26.04 pronto para produção, com hardening em sshd_config.d, chaves Ed25519, porta correta via ssh.socket e firewall no UFW.

Escrito por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...
Destaques
  • Hardening sem “gambiarras”: aplique segurança no lugar certo com /etc/ssh/sshd_config.d/00-hardening.conf, mantendo suas regras separadas do padrão do sistema.
  • Adeus senhas, olá chaves Ed25519: gere a chave no cliente e envie com ssh-copy-id antes de desligar login por senha.
  • Socket Activation muda o jogo: no Ubuntu 26.04, quem manda na porta é o ssh.socket, então Port 2222 pode ser ignorado se o socket estiver ativo.
  • Troca de porta do jeito certo: faça override com systemctl edit ssh.socket, execute systemctl daemon-reload e reinicie ssh.socket para a nova porta entrar de fato.
  • Validação e UFW sem risco de lockout: libere ufw allow 2222/tcp, teste ssh -p 2222 de outro cliente e só depois remova a regra antiga da porta 22.

Ter SSH exposto com configurações padrão é um convite para varredura, tentativa de senha e erro operacional. Neste tutorial, você vai do zero até um servidor OpenSSH “production ready”, com autenticação por chave, senhas desativadas, hardening em arquivo dedicado e firewall ajustado. O ponto crítico no Ubuntu 26.04 é entender o Socket Activation, que muda a forma correta de trocar a porta.

Pré-requisitos e cenário do tutorial

Você vai precisar de:

  • Ubuntu 26.04 “Resolute Raccoon”
  • OpenSSH Server 9.x
  • Acesso privilegiado no servidor (root ou sudo)
  • Um segundo dispositivo (cliente) para testar conexões SSH

Exemplos usados (ajuste para o seu ambiente):

  • Usuário: sempreupdate
  • Hostname do servidor: ssh-server (pode ser IP)
  • Porta SSH: 2222
  • Autenticação: somente chaves (sem senha)

Entenda em 90 segundos: Socket Activation

configurar ssh ubuntu 26 04 hardening socket activation

No Ubuntu 26.04, o padrão é o Socket Activation do systemd para o SSH. Na prática:

  • O ssh.socket controla em qual porta o SSH fica “escutando”.
  • Se o ssh.socket estiver ativo (listening), a diretiva Port no sshd_config (incluindo arquivos em sshd_config.d/) pode ser ignorada.
  • Resultado: você muda a porta no config do sshd, reinicia, e ele continua ouvindo na porta antiga, porque quem manda é o socket.

Antes de tentar trocar a porta, confirme se o socket está ativo:

systemctl status ssh.socket

Se aparecer active (listening), você vai precisar fazer override do socket com systemctl edit ssh.socket mais adiante.

Passo 1: instalação e chaves SSH (Ed25519)

1. Instale o servidor OpenSSH

Atualize o índice e instale o pacote:

sudo apt update
sudo apt install openssh-server

Habilite o SSH no boot:

sudo systemctl enable ssh

Confira se o serviço está rodando:

sudo systemctl status ssh

Opcional, mas recomendado para este tutorial: verifique o socket activation:

systemctl status ssh.socket

2. Gere a chave no cliente (Ed25519)

No seu cliente, gere a chave Ed25519:

ssh-keygen -t ed25519 -C "your_email@example.com"

Aceite o caminho padrão quando solicitado. Se quiser, defina uma passphrase para proteção adicional da chave privada.

3. Copie a chave pública para o servidor

Envie a chave para o servidor com ssh-copy-id:

ssh-copy-id sempreupdate@ssh-server

Quando solicitado, informe a senha do usuário no servidor.

4. Teste login por chave antes do hardening

Teste a conexão:

ssh sempreupdate@ssh-server

Se você conectou sem digitar a senha do servidor (exceto passphrase da chave, se você definiu), pode seguir com segurança para o hardening.

Passo 2: criando a configuração de hardening

A recomendação aqui é não alterar o arquivo global padrão e, em vez disso, criar um arquivo dedicado em sshd_config.d/. Isso mantém suas regras de segurança separadas e fáceis de auditar.

1. Verifique overrides existentes em sshd_config.d/

Liste os arquivos existentes:

ls -la /etc/ssh/sshd_config.d/

Em servidores provisionados em nuvem, pode existir um arquivo (ex.: 50-cloud-init.conf) que habilita PasswordAuthentication yes. Se encontrar um override desse tipo, remova ou renomeie. Exemplo (remoção):

sudo rm /etc/ssh/sshd_config.d/50-cloud-init.conf

2. Crie o arquivo de hardening

Crie o arquivo:

sudo nano /etc/ssh/sshd_config.d/00-hardening.conf

Adicione a configuração abaixo (ajuste o usuário em AllowUsers e a porta, se necessário):

# /etc/ssh/sshd_config.d/00-hardening.conf
# SSH hardening no Ubuntu 26.04

# Controle de acesso
AllowUsers sempreupdate
PermitRootLogin no

# Autenticação
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 60

# Limites de sessão e mitigação de força bruta
MaxSessions 3
MaxStartups 10:30:60

# Timeouts e keepalive
ClientAliveInterval 300
ClientAliveCountMax 2

# Redução de superfície
X11Forwarding no

# Porta (atenção: pode ser ignorada se ssh.socket estiver ativo)
Port 2222

3. Valide a sintaxe e aplique as mudanças

Valide a configuração:

sudo sshd -t

Se não houver saída, a sintaxe está ok.

Perigo: não feche sua sessão atual ainda. Mantenha este terminal aberto como plano de contingência.

Reinicie o serviço:

sudo systemctl restart ssh

Verifique em quais portas o SSH está ouvindo:

sudo ss -tlnp | grep ssh

Se aparecer :2222, a mudança de porta já está valendo. Se ainda estiver na porta :22, siga para o passo de Socket Activation.

Passo 3: configurando porta personalizada (o jeito certo)

Se o ssh.socket estiver ativo, você precisa ajustar o socket do systemd, porque ele controla a escuta da porta.

1. Crie um override do socket

Abra o editor de override:

sudo systemctl edit ssh.socket

Cole o conteúdo abaixo:

[Socket]
ListenStream=
ListenStream=0.0.0.0:2222
ListenStream=[::]:2222

A linha ListenStream= vazia limpa a configuração padrão antes de definir a nova porta.

2. Recarregue o systemd e reinicie o socket

Não pule o reload:

sudo systemctl daemon-reload

Reinicie o socket:

sudo systemctl restart ssh.socket

Confirme a nova porta:

sudo ss -tlnp | grep ssh

Passo 4: firewall e validação

1. Libere a porta no UFW

Permita a porta 2222/tcp:

sudo ufw allow 2222/tcp comment 'SSH custom port'

Habilite o UFW (se ainda não estiver ativo):

sudo ufw enable

Liste as regras:

sudo ufw status numbered

Se você já liberou a porta 22 anteriormente, remova a regra antiga:

sudo ufw delete allow 22/tcp

2. Teste antes de encerrar a sessão atual

Teste do cliente para o servidor usando a porta nova:

ssh -p 2222 sempreupdate@ssh-server

Confirme que senha está desativada (o teste deve falhar):

ssh -p 2222 -o PubkeyAuthentication=no sempreupdate@ssh-server

Confirme que login de root está bloqueado (o teste deve falhar):

ssh -p 2222 root@ssh-server

Confirme a porta ativa no servidor:

sudo ss -tlnp | grep ssh

Confira configurações efetivas (visão consolidada do daemon):

sudo sshd -T | grep -E "^(port|passwordauthentication|permitrootlogin|allowusers)"

Quando todos os testes estiverem corretos, aí sim você pode encerrar com segurança a sessão antiga.

Checklist final “production ready”

  • Chaves configuradas e testadas com ssh (sem depender de senha).
  • Hardening aplicado via /etc/ssh/sshd_config.d/00-hardening.conf.
  • PasswordAuthentication no e PermitRootLogin no ativos.
  • Porta 2222 em uso.
  • Se ssh.socket está ativo, a porta foi trocada via systemctl edit ssh.socket, com systemctl daemon-reload.
  • UFW liberando apenas 2222/tcp, sem regra antiga para 22/tcp.

Compartilhe este artigo