- Detalhes
- Escrito por: Marcos de Lima Carlos
- Categoria: Segurança
- 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.
- Detalhes
- Escrito por: Marcos de Lima Carlos
- Categoria: Segurança
- 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.
- Detalhes
- Escrito por: Redação
- Categoria: Segurança
- 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.