Projetos de Software
  • Home
  • Segurança
  • Programação
  • Sistemas Operacionais
  • Review
  • Gestão
  • Embarcados
  • Programação

Servidores em Produção - Erros comuns

Detalhes
Escrito por: Marcos de Lima Carlos
Categoria: Segurança
Publicado: 10 Julho 2026
Acessos: 53

Esse é um artigo que é fruto da experiência para que novos erros não sejam cometidos. Aqui estão algumas das coisas mais comuns que acontecem com servidores e como esses erros são mitigados.

Esquecer de colocar máscaras para novos usuários

Este é um erro clássico dentro de alguns sistemas onde é necessário ter mais privacidade.

✅ Correção

Para isso edite o arquivo /etc/login.defs

unmask 027

Adendo

Talvez você precise criar usuários sem permissão de login na máquina. Para isso execute o comando abaixo na criação do usuário:

sudo useradd -s /sbin/nologin -M nome_do_usuario

a opção -s /sbin/nologin: Garante que se ele tentar logar por SSH ou terminal, o sistema recusará o acesso imediatamente.
a opção -M: Não cria o diretório /home/nome_do_usuario (opcional, mude para -m se quiser que ele tenha uma pasta home compartilhada).

Se você já cadastrou o usuário no sistema e ele possui permissões de login, rode o comando abaixo para retirar:

sudo usermod -s /sbin/nologin nome_do_usuario

Rodar serviços como root

Quando você está desenvolvendo qualquer "simplificação" é considerada válida. Imagine um pequeno bug no seu software que compromete o sistema inteiro. Pois é... vamos corrigir isso.

✅ Correção

Criando um usuário específico para o serviço:

sudo useradd -r -s /bin/false appuser

Não obrigar a complexidade de senhas

Eu, particularmente, não sou muito fã deste tipo de coisa. Sou inclinado a utilizar MFA, FIDO, etc. É mais seguro e mais prático. Mas é uma alternativa válida:

✅ Correção

sudo dnf install libpwquality  
sudo nano /etc/security/pwquality.conf

Edite os seguintes parâmetros:

minlen = 12  
ucredit = - 1  
lcredit = - 1  
dcredit = - 1

💡 As alterações serão aplicadas no próximo login. Verifique se há alguma linha conflitante antes de ativar.

Permitir scripts graváveis em /usr/local/bin

Caso algum script seja gravável por qualquer um nesta pasta, qualquer alteração do script para fazer tarefas indesejadas (sim, estou sendo generoso!) é um pulo.

✅ Correção

chmod o-w /usr/local/bin/*

Validar se não existe nenhum herói da resistência:

find /usr/local/bin -perm -0002

Deixar serviços não utilizados rodando

Bom... isso dispensa comentários. Vamos as correções:

✅ Correção

sudo systemctl list-units --type =service --state=running  
sudo systemctl disable <serviço>  
sudo systemctl stop <serviço>

Eu ainda sou a favor de utilizar umask. Mas é para casos extremos.

Com esses comandos você colocará mais proteção no seu servidor.

Instalando o fail2ban no rocky linux

Detalhes
Escrito por: Marcos de Lima Carlos
Categoria: Segurança
Publicado: 28 Junho 2026
Acessos: 97

Atualmente é comum quando queremos bloquear ataques por força bruta a um servidor configurarmos o fail2ban, mas ainda dá pra fazer muito mais coisas que o normal com ele. Este artigo vai mostrar como instalar o fail2ban no rocky linux.

Passo 1: Habilitar o repositório EPEL

utilize as linhas abaixo para habilitar os repositórios EPEL

sudo dnf install epel-release -y
sudo dnf update -y

Passo 2: Instalar os pacotes do Fail2ban

Instalaremos os pacotes do fail2ban e o suporte ao firewalld (estou supondo que você está utilizando o firewall padrão do linux):

sudo dnf install fail2ban fail2ban-firewalld -y

Passo 3: Configuração do Fail2Ban

Vamos configurar o fail2ban para monitorar o serviço de SSH para que não tenhamos dores de cabeça.

Dica - Não mexa diretamente no arquivo /etc/fail2ban/jail.conf Crie uma copia e faça as modificações.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Você pode querer ajustar alguns parâmetros para que eles atendam suas necessidades.


[DEFAULT]
# Tempo que o IP ficará banido (ex: 1h)
bantime = 1h

# Janela de tempo para contar as tentativas falhas (ex: 10m)
findtime = 10m

# Número máximo de tentativas antes do banimento
maxretry = 5

# Mude para usar o firewalld em vez do iptables
banaction = firewallcmd-new
backend = systemd

Passo 4: Criando um jail para o SSHD

Para fazer isso crie um arquivo chamado /etc/fail2ban/jail.d/10-sshd.conf

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 1h
findtime = 10

Passo 5: Iniciando a habilitando o serviço

Para inicializar e habilitar digite o comando abaixo:

sudo systemctl enable fail2ban --now

Para verificar:

sudo systemctl status fail2ban

Alguns comandos úteis

Para verificar quais jails estão ativos:

sudo fail2ban-client status

Para verificar os ips banidos por um determinando jail: (escolhemos o serviço de sshd)

sudo fail2ban-client status sshhd

Exploraremos num futuro artigo as possibilidades de proteção de um servidor com fail2ban.

Procedimentos de Segurança para SSH

Detalhes
Escrito por: Redação
Categoria: Segurança
Publicado: 26 Junho 2026
Acessos: 80

Você instalou um servidor SSH com saída para a internet. A conexão direta ao servidor não é a melhor prática, mas em alguns casos é a que está disponível. Este artigo mostrará práticas adicionais para melhorar a segurança do seu servidor.

Aqui estamos utilizando o rocky linux. Eu adoto uma versão padrão RHEL por padrão. Caso você esteja utilizando outro tipo de distribuição, o caminho dos arquivos podem não ser os mesmos.

Desabilitando a autenticação por senha

A autenticação por senha é o elo mais fraco de um serviço SSH. O grande problema de senhas é que elas podem ser vazadas, podem ser reutilizadas em outro lugar, etc. Um serviço de brute force pode ajudar a quebrá-la entre outras coisas. Para mitigar isso vamos fazer a cópia de uma chave SSH para o servidor.

O primeiro passo é gerar a chave:

ssh-keygen -t ed25519 -C "Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo." -f ~/.ssh/id_ed25519

Copie a sua chave para o servidor:

ssh-copy-id -i ~/.ssh/id_ed25519.pub usuário@seu-ip-do-servidor

Você pode testar o seu acesso conectando no servidor.

O próximo passo é fazer as alterações na configuração do SSH.

Vamos então editar o arquivo abaixo:

sudo nano /etc/ssh/sshd_config

Agora procure ou adicione as opções:

PasswordAuthentication no  

Vamos ao que faz cada função:

PasswordAuthentication no - Desabilita a autenticação por senha do serviço.

Agora teste a configuração:

sudo sshd -t 

Reinicie o serviço:

systemctl restart sshd

Utilizamos ed25519 ao invés de RSA porque é o recomendado atualmente (junho de 2026). Um último ponto é que você pode querer proteger o seu arquivo de chave com senha ao criar. Isso pode ser interessante porque mesmo que tenham acesso ao arquivo é necessário senha.

Desativar Login como Root

Por que? Porque todo servidor possui um usuário root. Se você deixa habilitado é uma porta de entrada. Lembre-se de que o comando é usuario@servidor. Caso queira acesso raiz use um usuário com propriedades sudo ou escale para root.

Edite o arquivo:

sudo nano /etc/sshd/sshd_config

Agora edite o parâmetro:

PermitRootLogin no

Agora teste a configuração:

sudo sshd -t 

Reinicie o serviço:

systemctl restart sshd

Isso evitará problemas futuros.

Utilize uma lista de permissões

Agora que você entendeu o passo acima, entenderá porque utilizar uma lista de permissões é um bom recurso.

Edite o arquivo:

sudo nano /etc/sshd/sshd_config

Utilize os parâmetros:

# Restringir quais usuários podem fazer login via SSH:  
AllowUsers admin deploy  
  
# Restringir o acesso a um grupo específico:  
AllowGroups ssh-users

Agora teste a configuração:

sudo sshd -t 

Reinicie o serviço:

systemctl restart sshd

Se você mexe com servidores externos lembre-se de que os ataques por brute-force são feitos por Bots com usuários pré-configurados. É fácil escalar os problemas.

Restringir acesso SSH por endereço IP

Isso pode ser uma boa quanto mais o risco aumenta. Ah... mas na minha casa é dns dinâmico? Bom... neste caso você pode utilizar um jump server. Um jump server é um servidor pequeno (VPS) que possui acesso a outros servidores. A grande vantagem disso é que eles possuem IP fixo e no mundo das regras de firewall IP Fixo é vida!

Alterar a porta padrão

Esse também é interessante, mas pode complicar se não for bem projetado.

Edite o arquivo:

sudo nano /etc/sshd/sshd_config

Edite o parâmetro

Port 2222

Estamos colocando a porta 2222 ao invés da 22.

Agora teste a configuração:

sudo sshd -t 

Reinicie o serviço:

systemctl restart sshd

Implementando MFA no SSH

Para instalar o MFA no rocky linux você terá que executar os seguintes passos:

sudo dnf install epel-release -y
sudo dnf install google-authenticator -y

Execute o comando:

google-authenticator
  • Do you want authentication tokens to be time-based? y (Isso garante que os códigos mudem a cada 30 segundos).
  • QR Code: Um QR code gigante vai aparecer na tela. Abra o app do seu celular (Google Authenticator, Authy, etc.) e escaneie.
  • Códigos de backup: Abaixo do QR code, aparecerão seus códigos de emergência (emergency scratch codes). Salve-os em um lugar seguro. Se perder o celular, eles são sua única salvação.
  • Do you want me to update your "~/.google_authenticator" file? y (Salva as configurações).
  • Disallow multiple uses of the same authentication token? y (Evita ataques de replay).
  • Permitir janela de tempo maior (compensar relógios dessincronizados)? n (A menos que você tenha problemas frequentes de fuso horário, responda "não" por segurança).
  • Enable rate-limiting? y (Evita ataques de força bruta no próprio código do MFA).

Agora você precisa editar o arquivo do PAM:

sudo nano /etc/pam.d/sshd

Adicione a linha:

auth required pam_google_authenticator.so

Nota: Se você quiser que o MFA seja obrigatório apenas para quem faz login com senha (e ignorado para quem usa chave SSH pública), adicione nullok ao final: auth required pam_google_authenticator.so nullok. Se quiser MFA para todo mundo, deixe sem o nullok.

Vamos editar as configurações do SSH:

sudo nano /etc/ssh/sshd_config

Procure e altere as seguintes diretivas (se não existirem, adicione-as):

KbdInteractiveAuthentication yes

Se você usa Chave SSH (PublickeyAuthentication yes) e quer exigir a chave MAIS o código do MFA, adicione também esta linha no final do arquivo:

AuthenticationMethods publickey,keyboard-interactive

Passo crítico - ⚠

ATENÇÃO: Não feche a sua sessão atual do terminal! Se algo der errado, você perderá o acesso ao servidor. Abra uma nova janela de terminal para testar.

sudo systemctl restart ssh

Como testar

Abra um novo terminal no seu computador e tente conectar:

ssh usuario@ip_do_servidor

Se configurou Chave + MFA: O servidor vai aceitar sua chave e, em seguida, pedirá o Verification code.

Se configurou Senha + MFA: Ele pedirá a senha do usuário e, depois, o Verification code.

Se você conseguir entrar e o código for solicitado, parabéns! Seu SSH está blindado.