Este guia contém algumas dicas e recomendações para tornar seu servidor Linux mais seguro. Como os servidores precisam estar acessíveis externamente, uma proteção básica contra acessos indesejados é altamente recomendada e não deve ser negligenciada.
Por favor, note que estas instruções não são exaustivas e informações mais detalhadas podem ser encontradas em outras seções da documentação ZAP. (ex.: 2FA (SSH))
A maneira mais simples de proteger seu servidor é sempre a mesma, independentemente do tipo: use senhas seguras, atualize seus serviços regularmente e preste atenção aos serviços que instala e aos guias que segue.
| Serviço | Porta |
|---|---|
| SSH | 22 |
| FTP | 21 |
| 25 | |
| DNS | 53 |
| HTTP | 80 |
| HTTPS | 443 |
Serviços como SSH ou FTP usam por padrão sempre as mesmas portas (algumas listadas na tabela acima). Se um invasor externo tentar quebrar seu serviço SSH por força bruta, ele precisa primeiro saber qual porta o SSH está usando. Se você não alterar essas portas, as portas 22 e 21 geralmente são os alvos para executar comandos diretamente no servidor ou acessar arquivos via FTP.
Para evitar isso, recomendamos configurar as portas dos serviços padrão para valores personalizados. Na próxima seção você aprende como fazer isso:
A porta desejada deve estar entre 1024 e 65535 e não pode ser uma porta já em uso!
Use cat /etc/services para ver algumas portas padrão e evitar escolher uma porta já ocupada.
Para alterar a porta SSH, você deve editar o arquivo de configuração. Normalmente ele fica em /etc/ssh/sshd_config. Se não encontrar, use o comando:
find / -name "sshd_config" 2>/dev/null
Abra o arquivo com nano (como root ou usando sudo).
sudo nano /etc/ssh/sshd_config
Insira a porta desejada após Port. Se Port estiver comentado (ex.: #Port 22), remova o "#" e substitua o 22 pela porta desejada. Salve o arquivo (no Nano, Ctrl + o) e feche (Ctrl + x).
Reinicie o serviço SSH para aplicar as mudanças.
# Em Ubuntu/Debian/CentOS, por exemplo
sudo systemctl restart sshd
Se você instalou um serviço FTP como o proFTPd, também pode alterar a porta via arquivo de configuração, de forma semelhante ao SSH.
Encontre o arquivo proftpd.conf
find / -name "proftpd.conf" 2>/dev/null
Normalmente está em /etc/proftpd.conf (CentOS) ou /etc/proftpd/proftpd.conf (Ubuntu, Debian).
Abra com nano, remova o "#" antes de port e defina a porta desejada. Lembre-se das recomendações acima para não escolher uma porta inválida.
Use Ctrl + W para buscar no nano.
nano /etc/proftpd/proftpd.conf
Fail2Ban é um serviço que bloqueia IPs que tentam acessar o servidor com intenções provavelmente maliciosas. Ele monitora arquivos de log para detectar atividades suspeitas e protege seu sistema de forma simples e eficaz.
Após a instalação, o Fail2Ban já vem com configurações pré-definidas para alguns serviços comuns, incluindo:
- apache
- lighttpd
- sshd
- qmail
- postfix
- Courier Mail Server Outros serviços podem ser adicionados facilmente usando expressões regulares (RegEx) e especificando o arquivo de log desejado.
/var/log/auth.log. Este arquivo contém todas as tentativas de login SSH, bem-sucedidas ou não.
Aqui está a 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 para monitorar autenticações falhas. Como o log contém o IP do invasor, o Fail2Ban pode bloquear esse IP após algumas tentativas erradas.
Conecte-se ao seu servidor Linux. Se precisar, siga nosso guia Primeiro acesso (SSH). Execute os comandos como root ou com sudo.
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban
Após a instalação, verifique o status com systemctl: (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 está instalado, mas ainda não ativo ou configurado. Veja o diretório /etc/fail2ban, onde devem estar os arquivos:
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, crie um arquivo chamado jail.local. Copie o conteúdo de jail.conf para ele e abra:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Agora você pode fazer as configurações na jail.local, incluindo os serviços a monitorar.
Veja a seção [Default], que contém as configurações básicas.
Role até encontrar e ajuste, por exemplo, assim:
| Atributo | Descrição | Valor |
|---|---|---|
| ignoreip | IPs que não serão bloqueados | 127.0.0.1/8 |
| ignorecommand | Não relevante | |
| bantime | Tempo que um IP fica bloqueado | 1h |
| findtime | Período para considerar tentativas falhas | 10m |
| maxretry | Número de tentativas falhas antes do bloqueio | 5 |
# pode ser definido com espaços e/ou vírgulas
#ignoreip = 127.0.0.1/8 ::1
# ignorecommand = /path/to/command <ip>
ignorecommand =
# "bantime" é o tempo em segundos que um host fica bloqueado
bantime = 1h
# Um host é bloqueado se "maxretry" erros ocorrerem dentro de "findtime" segundos
findtime = 10m
# "maxretry" é o número de erros antes do bloqueio
maxretry = 5
Com isso, as configurações básicas estão feitas. Para monitorar o serviço SSH, role até a seção [sshd]. Se você alterou a porta, informe-a em port.
A seção [sshd] fica assim:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Você pode fazer configurações específicas para cada serviço (ex.: maxretry menor que o padrão). Se não fizer, o valor padrão será usado.
Agora reinicie o Fail2Ban para ativar a monitoração.
sudo systemctl restart fail2ban.service
Se tiver acesso a uma VPN ou outro servidor, pode testar o Fail2Ban bloqueando a si mesmo. Usando VPN ou hotspot do celular, você terá um IP diferente para testar.
Não faça isso na sua rede normal, pois seu IP pode ser bloqueado e você ficará trancado fora.
Tente conectar via SSH ao seu servidor (com outro IP!) e digite a senha errada várias vezes. O resultado deve ser:
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 vê, a conexão é recusada pelo servidor protegido pelo Fail2Ban (Connection refused em vez de Permission denied).
Mostre o status do Fail2Ban. Você verá que um 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
Para liberar um IP, use: fail2ban-client set sshd unbanip {seu IP}.
Se houver muitos bloqueios, é recomendável aumentar o tempo de bloqueio a cada tentativa para reduzir as tentativas possíveis.
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime = 1h
# O tempo de bloqueio aumenta a cada bloqueio desse IP
bantime.increment = true
# Fator de escala de 24 horas (1h,24h,48h,3d,4d...)
bantime.factor = 24
# Tempo máximo de bloqueio = 5 semanas
bantime.maxtime = 5w
