A segurança é um aspecto crítico em qualquer sistema Linux, mesmo em tarefas do dia a dia. Neste artigo, veremos três pilares básicos para proteger seu servidor ou estação de trabalho:
- Hardening de SSH – reduzindo a superfície de ataque do serviço de acesso remoto.
- Fail2ban – bloqueando automaticamente tentativas de brute-force.
- Gestão de usuários, grupos e sudoers – controlando quem pode fazer o quê, e como.
1. Hardening de SSH
O SSH é o principal meio de acesso remoto em Linux. Por padrão, ele vem bastante “aberto” para facilitar testes, mas precisamos torná-lo mais restrito.
1.1 Alterar a porta padrão
Ao invés da porta 22, escolha uma porta alta (<1024 requer root, então acima de 1024):
# Edite o arquivo de configuração
sudo nano /etc/ssh/sshd_config
# Localize e altere:
Port 4321
# (Exemplo: porta 4321 em vez da 22)
1.2 Desabilitar login como root
Evita que o atacante tente diretamente a conta root:
# Ainda em /etc/ssh/sshd_config
PermitRootLogin no
1.3 Forçar autenticação por chave pública
- Gere o par de chaves no seu desktop (se ainda não tiver):
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_myserver
Copie a chave pública:
ssh-copy-id -i ~/.ssh/id_ed25519_myserver.pub -p 4321 user@meuservidor
No servidor, no mesmo sshd_config
, defina:
PubkeyAuthentication yes
PasswordAuthentication no
Reinicie o serviço:
sudo systemctl restart sshd
1.4 Exemplo completo de /etc/ssh/sshd_config
mínimo
Port 4321
ListenAddress 0.0.0.0
Protocol 2
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
MaxAuthTries 3
LoginGraceTime 30s
AllowUsers leandro joaoweb # somente contas permitidas
2. Fail2ban
O Fail2ban monitora logs e bloqueia IPs que enviam muitas falhas. É excelente para proteger SSH, HTTP e outros serviços.
2.1 Instalação
sudo apt update
sudo apt install fail2ban -y # Debian/Ubuntu
# ou
sudo dnf install fail2ban -y # RHEL/CentOS/Fedora
2.2 Configuração básica
- Copie o arquivo padrão para não sobrescrever em atualizações:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Edite /etc/fail2ban/jail.local
:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = 4321
logpath = /var/log/auth.log
# Exemplo de ação personalizada para e-mail
action = %(action_)s
%(mta)s-whois[name=SSH, dest="admin@exemplo.com"]
2.3 Exemplo de regra customizada para um serviço “webapp”
Suponha que o log de sua aplicação esteja em /var/log/webapp/access.log
. Crie um filtro em /etc/fail2ban/filter.d/webapp.conf
:
[Definition]
failregex = Authentication failure for user .* from <HOST>
ignoreregex =
E adicione ao jail.local
:
[webapp]
enabled = true
filter = webapp
port = http,https
logpath = /var/log/webapp/access.log
maxretry = 3
bantime = 2h
Reinicie o serviço:
sudo systemctl restart fail2ban
3. Usuários, Grupos e sudoers
Controlar acesso local é tão importante quanto acesso remoto.
3.1 Criando usuários e grupos
# Cria grupo ‘webmasters’
sudo groupadd webmasters
# Cria usuário ‘joaoweb’, adiciona ao grupo e define home
sudo useradd -m -s /bin/bash -G webmasters joaoweb
# Define senha
sudo passwd joaoweb
3.2 Permissões de arquivos
Exemplo: projeto web em /var/www/projeto
:
sudo mkdir -p /var/www/projeto
sudo chown -R root:webmasters /var/www/projeto
sudo chmod -R 750 /var/www/projeto
- 750: dono (root) rwx; grupo (webmasters) r-x; outros nenhum acesso.
3.3 Arquivo sudoers com visudo
Use sempre visudo
para evitar erros de sintaxe:
sudo visudo
Adicione no final:
# Permitir que membros de ‘webmasters’ reiniciem o serviço web sem senha
%webmasters ALL=(root) NOPASSWD: /bin/systemctl restart apache2
# Permitir ao usuário ‘joaoweb’ executar qualquer comando em /var/www/projeto
joaoweb ALL=(root) NOPASSWD: /usr/bin/chown -R webmasters:webmasters /var/www/projeto
3.4 Exemplo prático: manutenção de logs
Você pode dar permissão para limpar logs de uma aplicação sem expor todo o sudo:
# Crie um script em /usr/local/bin/limpa_logs.sh
sudo tee /usr/local/bin/limpa_logs.sh > /dev/null <<'EOF'
#!/bin/bash
find /var/log/webapp -type f -name '*.log' -mtime +7 -delete
EOF
sudo chmod +x /usr/local/bin/limpa_logs.sh
# Permita grupo ‘webmasters’ executá-lo com sudo
%webmasters ALL=(root) NOPASSWD: /usr/local/bin/limpa_logs.sh
Agora, qualquer membro de webmasters pode rodar:
sudo limpa_logs.sh
em precisar de senha, e sem ter acesso a outros comandos.
Conclusão
Com SSH endurecido, Fail2ban ativo e gestão de usuários/grupos bem configurados, você terá uma base sólida de segurança para o dia a dia em sistemas Linux.
- SSH: mude porta, use chaves, restrinja logins.
- Fail2ban: bloqueie brute-force automaticamente.
- Usuários & sudoers: princípio de menor privilégio, dê apenas o necessário.