Ir para o conteúdo

Servidor Dedicado: Dicas de Segurança para Linux

Descubra como melhorar a segurança do seu servidor Linux com dicas importantes para evitar acessos não autorizados e proteger seus serviços → Saiba mais agora

10 de novembro de 202610 min de leitura8 visualizações0 útil

Introdução

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.

Informações

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))

Dica

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.

Configuração de portas dos seus serviços

ServiçoPorta
SSH22
FTP21
Mail25
DNS53
HTTP80
HTTPS443

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:

Atenção

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.

Alterar a porta SSH

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:

Code
find / -name "sshd_config" 2>/dev/null

Abra o arquivo com nano (como root ou usando sudo).

Code
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.

Code
# Em Ubuntu/Debian/CentOS, por exemplo
sudo systemctl restart sshd

Alterar a porta FTP

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

Code
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.

Dica

Use Ctrl + W para buscar no nano.

Code
nano /etc/proftpd/proftpd.conf

Proteção adicional com Fail2Ban

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.
Como exemplo, veja uma entrada em /var/log/auth.log. Este arquivo contém todas as tentativas de login SSH, bem-sucedidas ou não.

Aqui está a entrada:

Code
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.

Instalando o Fail2Ban

Conecte-se ao seu servidor Linux. Se precisar, siga nosso guia Primeiro acesso (SSH). Execute os comandos como root ou com sudo.

Code
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)

Code
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

Configurando o Fail2Ban

O Fail2Ban está instalado, mas ainda não ativo ou configurado. Veja o diretório /etc/fail2ban, onde devem estar os arquivos:

Code
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:

Code
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:

AtributoDescriçãoValor
ignoreipIPs que não serão bloqueados127.0.0.1/8
ignorecommandNão relevante
bantimeTempo que um IP fica bloqueado1h
findtimePeríodo para considerar tentativas falhas10m
maxretryNúmero de tentativas falhas antes do bloqueio5
Code
# 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:

Code
[sshd]

enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Dica

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.

Code
sudo systemctl restart fail2ban.service

Verificando o funcionamento do Fail2Ban

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.

Atenção

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:

Code
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.

Code
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}.

Informações

Se houver muitos bloqueios, é recomendável aumentar o tempo de bloqueio a cada tentativa para reduzir as tentativas possíveis.

Code
[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

FAQ

Perguntas frequentes

Use senhas seguras, atualize seus serviços regularmente e preste atenção aos serviços que instala e aos guias que segue.
O login SSH por senha pode ser facilmente atacado por força bruta, especialmente com senhas fracas. Recomenda-se usar autenticação apenas por chave SSH e desativar o login por senha.
O SSH usa a porta 22 por padrão. Como serviços como SSH e FTP usam sempre as mesmas portas padrão, elas são alvos comuns de ataques automatizados – por isso, é recomendável adotar medidas de proteção.

Feedback

Este artigo foi útil?

Sua opinião nos ajuda a definir prioridades e a melhorar os conteúdos.

0 de 0 As avaliações consideraram este artigo útil.

Ajuda personalizada

As instruções não são suficientes?

A nossa equipe de suporte da ZAP conhece seu produto — descreva brevemente seu problema e ajudaremos pessoalmente.

O Zappy conhece este guia e te responde direto no chat.