Pesquisa de site

Configuração inicial do servidor com Ubuntu 20.04/18.04 e 16.04


Este tutorial irá guiá-lo nas primeiras etapas básicas que você precisa para configurar um novo servidor Ubuntu instalado para aumentar a segurança e a confiabilidade do seu servidor.

As configurações explicadas neste tópico são quase as mesmas para todos os sistemas de servidores Ubuntu, em relação à plataforma do sistema operacional subjacente, esteja o Ubuntu instalado em um servidor bare-metal, em uma máquina virtual privada ou em uma máquina virtual desenvolvido em uma nuvem pública VPS.

Requisitos

  • Instalação do servidor Ubuntu 20.04
  • Instalação do servidor Ubuntu 18.04
  • Instalação do servidor Ubuntu 16.04

Atualizar e atualizar o sistema Ubuntu

O primeiro passo que você precisa tomar no caso de uma nova instalação do servidor Ubuntu ou de um novo Ubuntu VPS implantado é garantir que o sistema e todos os componentes do sistema, como o kernel, o gerenciador de pacotes apt e todos os outros pacotes instalados estão atualizados com as últimas versões lançadas e patches de segurança.

Para atualizar o servidor Ubuntu, faça login no console do servidor com uma conta com privilégios de root ou diretamente como root e execute os comandos abaixo para realizar o processo de atualização e upgrade.

sudo apt update 

Após executar o comando de atualização, você verá o número de pacotes disponíveis para o processo de atualização e o comando usado para listar as atualizações dos pacotes.

sudo apt list --upgradable

Depois de consultar a lista de pacotes disponíveis para atualização, emita o comando abaixo para iniciar o processo de atualização do sistema.

sudo apt upgrade

Para remover todos os pacotes deb baixados localmente e todos os outros caches do apt-get, execute o comando abaixo.

sudo apt autoremove
sudo apt clean

Crie uma nova conta no Ubuntu

Por padrão, como medida de segurança, a conta root está completamente desabilitada no Ubuntu. Para criar uma nova conta no sistema, faça login no sistema com a conta de usuário com privilégios de root e crie uma nova conta com o comando abaixo.

Esta nova conta receberá privilégios de root por meio do comando sudo e será usada para realizar tarefas administrativas no sistema. Certifique-se de configurar uma senha forte para proteger esta conta. Siga o prompt adduser para configurar os detalhes do usuário e a senha.

sudo adduser ubuntu_user

Se esta conta for atribuída a outro administrador do sistema, você pode forçar o usuário a alterar sua senha na primeira tentativa de login, emitindo o seguinte comando.

sudo chage -d0 ubuntu_user

Por enquanto, o novo usuário adicionado não pode realizar tarefas administrativas por meio do utilitário sudo. Para conceder privilégios administrativos a esta nova conta de usuário, você deve adicionar o usuário ao grupo de sistema “sudo” emitindo o comando abaixo.

sudo usermod -a -G sudo ubuntu_user

Por padrão, todos os usuários pertencentes ao grupo “sudo” têm permissão para executar comandos com privilégios de root por meio do utilitário sudo. O comando Sudo deve ser usado antes de escrever o comando necessário para execução, conforme mostrado no exemplo abaixo.

sudo apt install package_name

Teste se o novo usuário tem privilégios de root concedidos, fazendo login no sistema e executando o comando apt update prefixado com sudo.

su - ubuntu_user
sudo apt update

Configure o nome do host do sistema no Ubuntu

Normalmente, o nome do host da máquina é configurado durante o processo de instalação do sistema ou quando o VPS é criado na nuvem. No entanto, você deve alterar o nome da sua máquina para melhor refletir o destino do seu servidor ou para descrever melhor a sua finalidade final.

Em uma grande empresa, as máquinas recebem nomes complexos para identificar facilmente a máquina nos racks do datacenter. Por exemplo, se a sua máquina Ubuntu irá operar um servidor de e-mail, o nome da máquina deve refletir esse fato e você pode configurar o nome do host da máquina como mx01.mydomain.lan, por exemplo.

Para mostrar detalhes sobre o nome do host da sua máquina, execute o seguinte comando.

hostnamectl

Para alterar o nome da sua máquina, emita o comando hostnamectl com o novo nome que você irá configurar para a sua máquina, conforme ilustrado no trecho abaixo.

sudo hostnamectl set-hostname tecmint

Verifique o novo nome do seu sistema com um dos comandos abaixo.

hostname
hostname -s
cat /etc/hostname 

Configure SSH com autenticação de chave pública no Ubuntu

Para aumentar o grau de segurança do sistema de um servidor Ubuntu, você deve configurar a autenticação de chave pública SSH para uma conta local. Para gerar o par de chaves SSH, a chave pública e privada, especificando um comprimento de chave, como 2.048 bits, execute o seguinte comando no console do servidor.

Certifique-se de estar conectado ao sistema com o usuário para o qual está configurando a chave SSH.

su - ubuntu_user
ssh-keygen -t RSA -b 2048

Enquanto a chave é gerada, você será solicitado a adicionar uma senha para protegê-la. Você pode inserir uma senha forte ou optar por deixá-la em branco se quiser automatizar tarefas por meio do servidor SSH.

Após a geração da chave SSH, você pode copiar a chave pública para um servidor remoto executando o comando abaixo. Para instalar a chave pública no servidor SSH remoto, você precisará de uma conta de usuário remoto com as permissões e credenciais adequadas para fazer login no servidor remoto.

ssh-copy-id remote_user@remote_server

Você poderá fazer login automaticamente via SSH no servidor remoto usando o método de autenticação de chave pública. Você não precisará adicionar a senha do usuário remoto ao usar a autenticação de chave pública SSH.

Depois de fazer login no servidor remoto, você pode começar a executar comandos, como comando w para listar usuários ssh conectados remotamente, conforme mostrado na imagem abaixo.

Digite exit no console para fechar a sessão SSH remota.

ssh remote_user@remote_server
w
exit

Para ver o conteúdo da sua chave SSH pública e instalar manualmente a chave em um servidor SSH remoto, emita o seguinte comando.

cat ~/.ssh/id_rsa.pub

Servidor SSH seguro no Ubuntu

Para proteger o daemon SSH, você deve alterar o número da porta SSH padrão de 22 para uma porta aleatória, superior a 1024, e proibir o acesso SSH remoto à conta root via senha ou chave, abrindo o arquivo de configuração principal do servidor SSH e fazendo as seguintes alterações.

sudo vi /etc/ssh/sshd_config

Primeiro, pesquise a linha comentada #Port22 e adicione uma nova linha abaixo (substitua o número da porta de escuta de acordo):

Port 2345

Não feche o arquivo, role para baixo e procure a linha #PermitRootLogin yes, descomente a linha removendo o sinal # (hashtag) do início da linha e modifique a linha para se parecer com o trecho abaixo.

PermitRootLogin no

Em seguida, reinicie o servidor SSH para aplicar as novas configurações e teste a configuração tentando efetuar login de uma máquina remota neste servidor com a conta root através do novo número de porta. O acesso à conta root via SSH deve ser restrito.

sudo systemctl restart sshd

Além disso, execute netstat ou comando ss e filtre a saída por meio do comando grep para mostrar o novo número da porta de escuta do servidor SSH.

sudo ss -tlpn| grep ssh
sudo netstat -tlpn| grep ssh

Existem situações em que você pode querer desconectar automaticamente todas as conexões SSH remotas estabelecidas em seu servidor após um período de inatividade.

Para ativar esse recurso, execute o comando abaixo, que adiciona a variável bash TMOUT ao arquivo oculto .bashrc da sua conta e força todas as conexões SSH feitas com o nome do usuário seja desconectado ou abandonado após 5 minutos de inatividade.

echo 'TMOUT=300' >> .bashrc

Execute o comando tail para verificar se a variável foi adicionada corretamente no final do arquivo .bashrc. Todas as conexões SSH subsequentes serão fechadas automaticamente após 5 minutos de inatividade a partir de agora.

tail .bashrc

Na captura de tela abaixo, a sessão SSH remota da máquina drupal para o servidor Ubuntu por meio da conta ubuntu_user expirou e o logout automático ocorreu após 5 minutos.

Configurar o Firewall do Ubuntu UFW

Todo servidor precisa de um firewall bem configurado para proteger o sistema no nível da rede. O servidor Ubuntu usa o aplicativo UFW para gerenciar as regras do iptables no servidor.

Verifique o status do aplicativo firewall UFW no Ubuntu emitindo os comandos abaixo.

sudo systemctl status ufw
sudo ufw status

Normalmente, o daemon do firewall UFW está instalado e funcionando no servidor Ubuntu, mas as regras não são aplicadas por padrão. Antes de ativar a política de firewall UFW em seu sistema, primeiro você deve adicionar uma nova regra para permitir que o tráfego SSH passe pelo firewall através da porta SSH alterada. A regra pode ser adicionada executando o comando abaixo.

sudo ufw allow 2345/tcp

Depois de permitir o tráfego SSH, você pode ativar e verificar o aplicativo de firewall UFW com os seguintes comandos.

sudo ufw enable
sudo ufw status

Para adicionar novas regras de firewall para outros serviços de rede instalados posteriormente em seu servidor, como servidor HTTP, servidor de e-mail ou outros serviços de rede, use os exemplos de comandos de firewall abaixo como guia.

sudo ufw allow http  #allow http traffic
sudo ufw allow proto tcp from any to any port 25,443  # allow https and smtp traffic

Para listar todas as regras de firewall, execute o comando abaixo.

sudo ufw status verbose

Definir horário do servidor Ubuntu

Para controlar ou consultar o relógio do servidor Ubuntu e outras configurações de hora relacionadas, execute o comando timedatectl sem argumento.

Para alterar as configurações de fuso horário do seu servidor, primeiro execute o comando timedatectl com o argumento list-timezones para listar todos os fusos horários disponíveis e, em seguida, defina o fuso horário do seu sistema conforme mostrado no trecho abaixo.

sudo timedatectl 
sudo timedatectl list-timezones 
sudo timedatectl set-timezone Europe/Vienna

O novo cliente daemon systemd systemd-timesyncd pode ser utilizado no Ubuntu para fornecer um horário preciso para o seu servidor na rede e sincronizar o horário com um servidor peer de horário superior.

Para aplicar esse novo recurso do Systemd, modifique o arquivo de configuração do daemon systemd-timesyncd e adicione os servidores NTP geograficamente mais próximos à linha de instrução NTP, conforme mostrado no trecho do arquivo abaixo:

sudo nano /etc/systemd/timesyncd.conf

Adicione a seguinte configuração ao arquivo timesyncd.conf:

[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org
FallbackNTP=ntp.ubuntu.com

Para adicionar os servidores NTP geograficamente mais próximos, consulte a lista de servidores do projeto de pool NTP no seguinte endereço: http://www.pool.ntp.org/en/

Depois, reinicie o daemon Systemd timesync para refletir as alterações e verificar o status do daemon executando os comandos abaixo. Após a reinicialização, o daemon começará a sincronizar a hora com o novo peer do servidor NTP.

sudo systemctl restart systemd-timesyncd.service 
sudo systemctl status systemd-timesyncd.service

Desative e remova serviços desnecessários no Ubuntu

Para obter uma lista de todos os serviços de rede TCP e UDP em funcionamento por padrão em seu servidor Ubuntu, execute o comando ss ou netstat.

sudo netstat -tulpn
OR
sudo ss -tulpn

A partir da versão Ubuntu 16.10, o resolvedor DNS padrão agora é controlado pelo serviço resolvido pelo systemd, conforme revelado pela saída de netstat ou comandosss.

Você também deve verificar o status do serviço resolvido pelo systemd executando o seguinte comando.

sudo systemctl status systemd-resolved.service

O serviço resolvido pelo systemd vincula-se a todas as interfaces de rede habilitadas e escuta nas portas 53 e 5355 TCP e UDP.

Executar o daemon DNS de cache resolvido pelo sistema em um servidor de produção pode ser perigoso devido ao grande número de ataques DDOS realizados por hackers mal-intencionados contra servidores DNS inseguros.

Para parar e desabilitar este serviço, execute os seguintes comandos.

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Verifique se o serviço foi interrompido e desativado emitindo o ss ou o comando netstat. As portas de escuta resolvidas pelo systemd, 53 e 5355 TCP e UDP, não devem ser listadas na saída do comando netstat ou ss, conforme ilustrado abaixo.

Você também deve reinicializar a máquina para desabilitar completamente todos os serviços daemon resolvidos pelo systemd e restaurar o arquivo /etc/resolv.conf padrão.

sudo ss -tulpn
sudo netstat -tulpn
sudo systemctl reboot

Embora você tenha desabilitado a execução de alguns serviços de rede indesejados em seu servidor, também há outros serviços instalados e em execução em seu sistema, como o processo lxc e o serviço snapd. Esses serviços podem ser facilmente detectados através dos comandos ps, top ou pstree.

sudo ps aux
sudo top
sudo pstree

Caso você não vá usar a virtualização de containers LXC em seu servidor ou começar a instalar software empacotado via gerenciador de pacotes Snap, você deve desabilitar e remover completamente esses serviços, emitindo os comandos abaixo.

sudo apt autoremove --purge lxc-common lxcfs
sudo apt autoremove --purge snapd

Isso é tudo! Agora, o servidor Ubuntu está preparado para instalar software adicional necessário para serviços ou aplicativos de rede personalizados, como instalar e configurar um servidor web, um servidor de banco de dados, um serviço de compartilhamento de arquivos ou outros aplicativos específicos.