Este guia reúne algumas dicas e recomendações para aumentar a segurança do seu servidor Linux. Como os servidores (virtuais) precisam ser acessíveis externamente, é sempre recomendável aplicar uma proteção básica contra acessos indesejados — e não deixar isso de lado.
Estas instruções não são exaustivas. Você pode encontrar informações mais detalhadas em outras áreas da documentação da ZAP. (por exemplo, 2FA (SSH))
A maneira mais simples de proteger seu servidor é sempre a mesma, independentemente do servidor: use senhas seguras, atualize seus serviços regularmente e preste atenção aos serviços que instala e aos tutoriais que segue.
| Serviço | Porta |
|---|---|
| SSH | 22 |
| FTP | 21 |
| 25 | |
| DNS | 53 |
| HTTP | 80 |
| HTTPS | 443 |
Serviços como SSH ou FTP usam sempre as mesmas portas por padrão (algumas delas estão listadas na tabela acima). Se um invasor externo tentar atacar seu serviço SSH por força bruta, primeiro precisará saber qual porta é usada pelo SSH. Se você não configurar essas portas de outra forma, as portas 22 e 21 costumam ser as mais prováveis, permitindo executar comandos diretamente no servidor ou acessar arquivos por FTP.
Para evitar isso, recomendamos configurar portas personalizadas para os serviços padrão. Na próxima seção, você verá como fazer isso:
A porta escolhida deve estar entre 1024 e 65535 e não pode estar sendo usada!
Use cat /etc/services para ver algumas portas padrão e evitar escolher uma porta que já esteja ocupada.
Para alterar a porta SSH, você precisa editar o arquivo de configuração. Normalmente, ele fica em /etc/ssh/sshd_config. Caso não esteja nesse local, você pode procurá-lo com o seguinte comando:
find / -name "sshd_config" 2>/dev/null
Agora, abra o arquivo com o nano (como root ou usando sudo).
sudo nano /etc/ssh/sshd_config
Insira a porta desejada após Port. Se a linha Port estiver comentada (ou seja, #Port 22), remova o "#" e substitua 22 pela porta desejada. Salve o arquivo (no Nano, use Ctrl + o) e feche-o (no Nano, use Ctrl + x).
Agora, é necessário reiniciar o serviço SSH para que as alterações entrem em vigor.
# Unter Ubuntu/Debian/CentOS z.B.
sudo systemctl restart sshd
Se você instalou um serviço FTP como o proFTPd, também pode alterar a porta facilmente editando o arquivo de configuração. O procedimento é semelhante ao do serviço SSH.
Encontre o arquivo de configuração proftpd.conf.
find / -name "proftpd.conf" 2>/dev/null
Normalmente, o arquivo fica em /etc/proftpd.conf (CentOS) ou /etc/proftpd/proftpd.conf (Ubuntu, Debian).
Abra o arquivo com o nano, remova o "#" antes de port e insira a porta desejada depois dele. Siga as instruções acima para não inserir uma porta inválida.
Use Ctrl + W para pesquisar no nano.
nano /etc/proftpd/proftpd.conf
O Fail2Ban é um serviço que bloqueia endereços IP que tentam fazer login no servidor com possíveis intenções maliciosas. Ele monitora os arquivos de log em busca de atividades suspeitas e protege seu sistema de forma relativamente simples e eficaz.
Após a instalação, o Fail2Ban já inclui configurações predefinidas para alguns serviços usados com frequência, incluindo:
- apache
- lighttpd
- sshd
- qmail
- postfix
- Courier Mail Server Outros serviços podem ser adicionados facilmente com uma expressão regular (RegEx) e a indicação do arquivo de log desejado.
/var/log/auth.log. Esse arquivo contém todas as tentativas de login SSH, sejam elas bem-sucedidas ou não.
Veja esta entrada:
Dec 2 12:59:19 vps-zap515723-2 sshd[364126]: Failed password for root from 92.117.xxx.xxx port 52504 ssh2
O Fail2Ban usa esse arquivo de log e monitora falhas de autenticação. Como o arquivo de log contém diretamente o endereço IP do invasor, o Fail2Ban pode bloquear esse IP após algumas tentativas malsucedidas.
Primeiro, conecte-se ao seu servidor Linux. Se precisar de ajuda, siga nosso guia Primeiro acesso (SSH). Você deve executar os comandos como root ou usando sudo.
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban
Após a instalação, você pode verificar o status diretamente com o systemctl: (Use Ctrl+C para sair do systemctl.)
systemctl status fail2ban.service
* fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor pres>
Active: active (running) since Sat 2023-12-02 13:10:33 UTC; 24s ago
Docs: man:fail2ban(1)
Process: 23988 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, statu>
Main PID: 23989 (fail2ban-server)
CPU: 409ms
CGroup: /system.slice/fail2ban.service
`-23989 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Starting Fail2Ban Service...
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Started Fail2Ban Service.
Dec 02 13:10:34 vps-zap515723-1 fail2ban-server[23989]: Server ready
O Fail2Ban já está instalado, mas ainda não está ativo nem configurado. Consulte /etc/fail2ban; os seguintes arquivos devem estar presentes:
action.d fail2ban.d jail.conf paths-arch.conf paths-debian.conf
fail2ban.conf filter.d jail.d paths-common.conf paths-opensuse.conf
Para criar uma “Jail” ativa, é necessário criar um arquivo chamado jail.local. Basta copiar o conteúdo de jail.conf para o novo arquivo e abri-lo:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Agora, você pode definir todas as configurações no arquivo jail.local, inclusive quais serviços serão monitorados.
Concentre-se apenas na seção após [Default]. A seção Default contém as configurações gerais básicas.
Role um pouco a página até encontrar esta seção e ajuste-a, por exemplo, da seguinte forma:
| Atributo | Explicação | Valor |
|---|---|---|
| ignoreip | Endereços IP que não devem ser bloqueados | 127.0.0.1/8 |
| ignorecommand | Não é relevante. | |
| bantime | Por quanto tempo um endereço IP permanece bloqueado | 1h |
| findtime | Período durante o qual as tentativas de login malsucedidas são contabilizadas | 10m |
| maxretry | Número de tentativas malsucedidas que resultam em um bloqueio | 5 |
# kann mit Leerzeichen (und/oder Komma) getrennt definiert werden.
#ignoreip = 127.0.0.1/8 ::1
# ignorecommand = /path/to/command <ip>
ignorecommand =
# "bantime" ist die Anzahl der Sekunden, die ein Host gesperrt ist.
bantime = 1h
# Ein Host wird gesperrt, wenn er "maxretry" Fehler innerhalb von "findtime"
# Sekunden erzeugt hat.
findtime = 10m
# "maxretry" ist die Anzahl der Fehler, bevor ein Host gesperrt wird.
maxretry = 5
Agora, você concluiu as configurações básicas. Para monitorar o serviço SSH, por exemplo, role mais para baixo até a seção [sshd]. Se você alterou a porta, informe-a em port.
A seção [sshd] ficará assim:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Como você pode ver, também é possível definir configurações individuais para cada serviço (por exemplo, maxretry, que é menor do que o valor padrão). Embora você tenha definido configurações gerais, ainda pode configurar a maioria delas separadamente para cada serviço. Se não fizer isso, serão usadas as configurações gerais.
Agora, basta reiniciar o Fail2Ban para iniciar o monitoramento.
sudo systemctl restart fail2ban.service
Se você tiver acesso a uma VPN ou a um segundo servidor, pode tentar fazer com que o Fail2Ban bloqueie seu IP para testar se o serviço está funcionando. Com uma VPN ou um hotspot do celular, você deve obter outro endereço IP para testar o Fail2Ban.
Não faça esse teste na sua rede habitual, pois seu próprio endereço IP pode ser bloqueado e você pode perder o acesso.
Tente estabelecer uma conexão SSH com seu servidor (usando outro endereço IP!) e digite uma senha incorreta em cada tentativa. O resultado deve ser semelhante a este:
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
root@185.223.29.xxx: Permission denied (publickey,password).
root@vps-zap515723-2:/var/log# ssh root@185.223.29.179
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
^C
root@vps-zap515723-2:/var/log# ssh root@185.223.29.xxx
ssh: connect to host 185.223.29.xxx port 22: Connection refused
Como você pode ver, a conexão com seu servidor protegido pelo Fail2Ban agora é recusada (Connection refused em vez de Permission denied).
Agora, consulte o status do Fail2Ban. Você verá que um endereço IP foi bloqueado.
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 4
| |- Total failed: 8
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: xxx
Se quiser desbloquear o IP, use o seguinte comando: fail2ban-client set sshd unbanip {deine IP}.
Se houver um número incomum de IPs bloqueados, recomendamos aumentar o tempo de bloqueio a cada tentativa malsucedida para reduzir o número de tentativas de login possíveis.
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime = 1h
# Bantime sollte mit jeder Sperre dieser IP steigen
bantime.increment = true
# Skalierungsfaktor von 24 Stunden (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Maximale Sperrzeit = 5 Wochen
bantime.maxtime = 5w
