O Debian Linux (pronunciado ‘débian’) é um dos sistemas operacionais mais estáveis do mundo, fato conseguido através de uma enorme disciplina de desenvolvimento e releases. Embora o Debian não costume apresentar as últimas versões dos softwares, sempre tem a última versão estável. E, salvo raras exceções, é exatamente isto que quero de um servidor, e por isso uso o Debian para todos os servidores.
Então veja como fazer uma instalação básica do Debian Buster (Debian 10) que seja robusto o suficiente para ir para produção. Estes são os primeiros passos para montar qualquer servidor que vamos ver mais à frente.
Nota: Este artigo prevê conhecimentos prévios em infraestrutura de TI, embora você não precise saber nada de Linux. Mas não vou explicar como funciona seu software de virtualização ou conceitos de rede.
Para esta instalação, vamos criar uma máquina virtual (VM), mas os passos são similares para servidores físicos.
- Baixe o instalador ISO Netinst PC 64-bits do Debian. Aqui está o link da versão 10.4 mas se não achar basta baixar do site debian.org.
- Usando seu software de virtualização, crie uma nova Máquina Virtual (eu uso o Libvirt no Linux mas o mesmo se aplica para o VMWare ESX, Virtualbox, Hyper-V…). Selecione Debian como sistema operacional, ou Linux 64 bits se não estiver disponível. Crie um disco de no mínimo 10GB com alocação dinâmica, se possível de tipo SCSI, 1 vCPU e 512MB de RAM. Estes valores podem ser alterados conforme a necessidade mas servem para dar um bom pontapé inicial.
- Configure a placa de rede virtual para o modo bridge de modo que seu servidor virtual tenha um IP válido na rede. Se optar por usar um IP com NAT saiba como configurar seu hypervisor para que seu servidor virtual seja acessível a partir de outros pontos da rede.
- Monte o ISO do Debian que acabou de baixar no dispositivo CD-ROM da máquina virtual, configure para que seja o primeiro dispositivo de boot e inicie a VM.
Instalação do Passo a Passo
Como estamos numa VM com pouca memória, seleciona o instalador de texto (e não o instalador gráfico) através da opção Install
Em seguida vai receber um aviso de memória reduzida. Não se preocupe – o instalador vai rodar normalmente, mas em inglês. Selecione Continue
Escolha South America para a região da instalação
Selecione o país da instalação, no nosso caso Brazil.
Escolha o layout de teclado. Normalmente usa-se a opção Brazilian para os teclados nacionais ABNT. Para teclados americanos, use American English.
Identificação
A seguir vamos definir o hostname, ou o nome do servidor. Evite nomes com mais de 15 caracteres e use letras minúsculas. Facilita adotar um nome que indique o propósito do servidor. Por exemplo, se estivermos instalando um servidor web, poderíamos chamá-lo servweb.
O próximo passo é definir o domínio de rede. Em ambientes corporativos, poderá usar seu domínio DNS ou um subdomínio. Se você já tem um Active Directory, por exemplo, provavelmente vai querer usar o mesmo domínio do seu AD visto que ele já tem um servidor DNS interno.
Usuários
A seguir vamos definir a senha para o usuário root. Root é semelhante à conta Administrador do Windows, mas com poderes ainda maiores. Todo sistema Linux tem esta conta e não pode ser renomeada – por isso a senha de root deve ser bem segura. Por isso, nada de usar S3un0m3 e achar que está seguro. Use um gerador de senha aleatória para uma senha com pelo menos 10 dígitos e bem aleatória. Eu gosto deste aqui. Anote num lugar seguro – você só vai usar esta senha em situações muito especiais, então não se preocupe em torná-la fácil de lembrar.
Digite a senha para Root. Se desejar pode selecionar Show Password in Clear para ver o que está digitando. Daí selecione Continue e repita o processo para confirmar.
Como a conta root é tão especial, raramente é usada para login. Ao invés disso, usamos uma conta normal que precisamos criar agora. Selecione o nome para esta conta. Pode ser algo legível como “Operador de Servidor”, mas como este é um servidor sem interface gráfica eu gosto de simplificar e usar o login da conta tanto para o nome como para o id. Então usei usuarioadm.
Agora informamos o id da conta. Se usou uma descrição longa na tela anterior, aqui precisa usar apenas letras minúsculas, sem espaço nem caracteres especiais. Vou repetir usuarioadm – este será o id que usaremos para fazer logon.
Agora é hora de definir a senha para a conta de usuário. Mais uma vez, use uma senha segura, aleatória, para minimizar o risco de acesso não autorizado. Pode selecionar Show Password in Clear para ver a senha e Continue para seguir. Logo, repita a senha.
Relógio
Selecione o fuso horário, neste caso Sao Paulo.
Particionamento de Disco
Agora precisamos definir como o disco vai ser preparado. Num sistema Linux em servidor física , é importante usarmos o Encrpyted LVM para encriptar o disco, o que vai dar mais segurança contra roubo de dados. Também vamos nos preocupar com RAID para redundância e velocidade. Mas no caso de uma VM, que é o que estamos fazendo, basta que a camada física do servidor (host) se encarregue destes detalhes – então vamos selecionar Guided – use entire disk
Os detalhes desta tela podem mudar um pouco dependendo da configuração do seu host virtual (IDE ou SCSCI, por exemplo). No meu caso temos volume virtual de 10GB do tipo SCSI. Basta selecionar a única opção apresentada e continuar.
A tela a seguir permite definir o particionamento. Novamente, isto é extremamente importante numa máquina física, mas menos importante numa máquina virtual. Por que? Tem a ver com como o Linux/Unix trata o sistema de arquivos, em que todo o armazenamento tem uma única raiz chamada “/”. Particionar certas partes do sistema de arquivos permite estabelecer cotas e impedir que dados de usuários encham o disco e travem o sistema.
No nosso caso temos a praticidade de um ambiente virtualizado em que o “disco” pode crescer via software, e além disso normalmente não teremos usuários logando diretamente no servidor. Por isso vamos escolher All files in one partition.
Chegamos naquela parte em que as mudanças serão escritas no disco e serão irreversíveis. Ótimo momento para você repensar sua vida se estiver fazendo isto numa máquina física que já tem dados instalados. Como somos valentes e estamos criando uma VM nova, sem dados, vamos em frente clicando Finish partitioning and write changes to disk
E, pra fazer você pensar bem no que está fazendo, precisa confirmar clicando Yes.
Pacotes
A partir daqui a tela fica um pouco bagunçada – provavelmente um bug do instalador do Debian na combinação texto/baixa memória. Basta ignorar.
A tela seguinte permite adicionar CDs ou DVDs como repositórios de pacotes. Isto normalmente não faz sentido em servidores conectados à internet, então vamos selecionar No.
Vamos selecionar um espelho (mirror) para o repositório de pacotes do Debian. Isto permitirá uma melhor performance para download de software e atualizações. Note que você deve escolher uma localidade próxima do ponto de vista da topologia de rede, e não necessariamente em sentido geográfico. Isto vai depender da sua conexão à internet. Primeiro selecionamos o País – geralmente vai fazer sentido escolher Brazil (a não ser que esteja configurando uma VM num provedor de nuvem em outro país, por exemplo).
Em seguida escolha o servidor de espelho. Se não tiver certeza, use o padrão, ou use o ping para estes destinos em outra máquina para ver quais das opções está mais ‘perto’ de você.
Se estiver numa rede que bloqueia o acesso à internet e exige o uso de um proxy, informe na tela a seguir. Senão, deixe em branco. Daí clique em Continue
O Debian tem um pacote opcional chamado popularity-contest, ou ‘concurso de popularidade’. Este pacote permite à comunidade ver os softwares mais utilizados no site https://popcon.debian.org. É um pacote bastante benigno com envio de dados semanal apenas. Se desejar habilitar para ajudar a comunidade Debian, selecione Yes. Se não, No.
Tipo de servidor
A última seção da instalação permite pré-instalar alguns pacotes que darão certas funcionalidades ao seu servidor, como web server, servidor de impressão, e asism por diante. Poderá também instalar um desktop environment, ou ambiente gráfico. Embora para usuários vindos do Windows isto seja tentador, não faça isto a não ser que queira brincar num servidor de desenvolvimento. (Nem para desktops isto faz muito sentido, visto que outras distribuições como o Ubuntu terá versões mais recentes do ambiente gráfico e darão uma experiência melhor para usuários normais.)
Vamos deselecionar tudo, exceto a opção standard system utilities que deve ficar selecionada. Use a barra de espaços para alternar e as setas para mudar de opção. O bug na interface pode confundir um pouco, então tenha bastante atenção. Daí clique em Continue.
Finalizando a instalação
O último passo é a instalação do GRUB, que é quem efetivamente carrega o Linux após o boot. Selecione Yes.
Selecione o dispositivo apresentado começando com /dev/
Para finalizar a instalação de reiniciar o servidor, clique em Continue.
Pode ser necessário desmontar o ISO da instalação do Debian do CD-ROM virtual para que o servidor inicie corretamente.
Se tudo deu certo, você será recompensado com a gloriosa tela de login do Debian.
No mundo Unix/Linux, não se fala nada a não ser que se tenha algo de ruim a dizer. E, como tudo deu certo, você só ganha isto. Uma tela preta, com o nome do servidor e o prompt de login. Considere-se um sucesso e se dê um tapinha nas costas, e vamos em frente.
Pós-instalação
O primeiro login deverá ser feito com a conta root. Digite root no login, logo pressione enter e digite a senha que escolheu na instalação. Os caracteres digitados não vão aparecer.
O prompt # indica que o usuário root está sendo usado (em outros usuários o prompt é $).
A esta altura temos uma máquina Linux conectada à internet com endereço DHCP e sem pouquíssimo consumo de recursos – até porque até agora o servidor não faz muita coisa. O consumo de memória RAM é de apenas 46MB. Provavelmente menos do que o Windows 95…
Para que tenhamos um servidor em condições de sobreviver em produção, temos uma série de passos pela frente.
Instalando pacotes básicos
Precisamos instalar algumas ferramentas básicas de gerenciamento e segurança, comuns a qualquer papel que o servidor venha a ter.
O Debian leva muito a sério o conceito de Software Livre, e por padrão não instala pacotes que não sejam 100% livres. Como não somos tão restritivos, vamos configurar o repositório para incluir também outros pacotes.
A partir de agora será necessário digitar uma série de comandos no terminal. o Linux diferencia maiúsculas de minúsculas (por alguma razão estúpida), então certifique-se de digitar exatamente conforme abaixo:
sed -i 's/main/main contrib non-free/g' /etc/apt/sources.list
Se tudo deu certo não vai ter nenhum parabéns. Vamos em frente.
O próximo passo é atualizar a lista de pacotes e atualizar o sistema. Podemos fazer tudo num comando só:
apt update && apt upgrade -y
Para instalar alguns pacotes básicos de gerenciamento, digite:
apt install htop net-tools openssh-server sudo dnsutils
Isto instalará, entre outras coisas, o servidor SSH para acesso remoto e o sudo, um comando que equivale ao ‘executar como administrador’ do Windows e vai eliminar a necessidade de usar a conta root. Vamos adicionar o usuário que criamos na instalação ao grupo sudo para que ele possa executar comandos administrativos. Meu usuário se chama usuarioadm, mas lembre-se de usar o nome que você criou
adduser usuarioadm sudo
Configuração de Rede
O Debian habilita, por padrão, o protocolo IPv6. Na maior parte dos ambientes este protocolo não é necessário, então vamos desabilitá-lo. Mas, se você usar IPv6 no seu ambiente, pule o passo abaixo.
echo net.ipv6.conf.all.disable_ipv6 = 1 | tee -a /etc/sysctl.conf
A seguir vamos mudar a configuração da rede para usar um endereço estático, já que estamos falando de um servidor.
Primeiro, descubra o nome de seu adaptador ethernet. Pode ser algo como eth0 ou enp3s0 – vai depender do seu software de virtualização. Vamos descobrir:
ifconfig | grep ': f' |grep -v lo
(note que há um espaço entre : e f)
Isto deve produzir uma linha que contém o nome de sua interface antes de dois pontos (:).
Por exemplo, no meu caso a interface se chama enp3s0:
enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
Agora fazer a configuração da interface. Antes de continuar tenha em mãos seus dados de servidores DNS, domínio DNS, endereço de rede, máscara e um IP fixo reservado para seu uso. Use um IP fora da faixa de DHCP para evitar conflitos. Você pode obter estas informações com seu administrador de rede.
Vamos editar o arquivo /etc/network/interfaces no editor nano.
nano /etc/network/interfaces
Procure a linha iface … inet dhcp – e comente-a inserindo um # no inicio da linha.
#iface enp3s0 inet dhcp
Adicione o texto conforme o exemplo pra ficar similar ao bloco abaixo, mas substitua enp3s0 pelo nome de sua interface e coloque os detalhes de sua rede:
auto enp3s0 iface enp3s0 inet static address 192.168.0.25/24 gateway 192.168.0.1
Note a indentação das linhas para funcionamento correto da configuração.
Em address coloque o endereço IP estático para este servidor, seguido da máscara em bits (notação CIDR). Uma máscara 255.255.255.0 equivale a /24.
Em gateway, coloque o endereço do roteador.
Uma vez que tenha feito a edição, salve o arquivo com Ctrl-X, logo confirme com Y e dê enter para confirmar o nome do arquivo.
Agora vamos editar a configuração de DNS no arquivo /etc/resolv.conf
nano /etc/resolv.conf
Apague o conteúdo anterior e substitua por algo similar ao abaixo:
nameserver 192.168.0.2 nameserver 192.168.0.3 search meunegocio.com.br
Use uma linha nameserver para o IP de cada servidor DNS em sua rede. Em search coloque seu domínio de DNS.
Caso tenha mais de um servidor DNS e quiser distribuir a carga entre eles, inclua a seguinte linha:
options timeout:1 attempts:3 rotate
Novamente, salve o arquivo com Ctrl-X, logo confirme com Y e dê enter para confirmar o nome do arquivo.
Vamos recarregar os serviços de rede para que o novo IP comece a funcionar:
service networking restart ip a
Se tudo deu certo, o primeiro comando não dará nenhuma resposta. O segundo comando mostrará os dados das interfaces. A interface lo é loopback e pode ser ignorada. A outra interface deve aparecer já com o novo IP e máscara de subrede após a palavra inet:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:3e:5a:a7 brd ff:ff:ff:ff:ff:ff inet 192.168.0.25/24 brd 192.168.0.255 scope global enp3s0 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe3e:5aa7/64 scope link valid_lft forever preferred_lft forever
use também o comando ping para testar a resolução de nomes. Para terminar o ping, use Ctrl-C.
Se algo deu errado – revise o arquivo /etc/network/interfaces e repita.
A esta altura temos um servidor Debian atualizado, com a rede configurada e pronto pra ser acessado remotamente pra término da configuração. Este é uma boa hora para um reboot.
reboot
Configurações de Segurança
Atualizações automáticas
Faça o login com a conta que você criou no processo de instalação. No meu caso, é usuarioadm.
Note que já não vamos fazer login com a conta root para minimizar o risco. Crie este hábito também – faça login com uma conta normal e use o comando sudo antes de qualquer outro comando se precisar executá-lo com direitos administativos.
O Debian e seus derivados (Ubuntu por exemplo) são bem simples de atualizar – basta usar sudo apt update && sudo apt upgrade -y – mas podemos configurar que as atualizações sejam instaladas automaticamente neste servidor.
Para isso vamos instalar e em seguida configurar o pacote unattended-upgrades.
sudo apt install -y unattended-upgrades echo APT::Periodic::Update-Package-Lists "1"\; | sudo tee -a /etc/apt/apt.conf.d/20auto-upgrades echo APT::Periodic::Download-Upgradeable-Packages "1"\; | sudo tee -a /etc/apt/apt.conf.d/20auto-upgrades echo APT::Periodic::AutocleanInterval "7"\; | sudo tee -a /etc/apt/apt.conf.d/20auto-upgrades echo APT::Periodic::Unattended-Upgrade "1"\; | sudo tee -a /etc/apt/apt.conf.d/20auto-upgrades
As linhas começando com echo estão adicionando configurações ao arquivo /etc/apt/apt.conf.d/20-auto-upgrades. O servidor checará e aplicará diariamente pacotes sem intervenção manual.
Firewall
Agora vamos instalar e configurar o Firewall. Um firewall simples de usar e configurar é o ufw (Uncomplicated FireWall)
sudo apt install ufw echo IPV6=no | sudo tee -a /etc/ufw/ufw.conf sudo ufw allow ssh sudo ufw enable
A primeira linha instala o UFW, a segunda linha desabilita regras IPv6 (uma vez que nós desabilitamos o IPv6 no sistema). A terceira linha abre a porta SSH para permitir acesso remoto seguro ao administrador e a última ativa o firewall. Confirme com Y. Tenha em mente que toda vez que instalar um serviço de rede a este servidor precisará abrir a porta correspondente no UFW. Este artigo em português explica como usar o UFW.
Antimalware
O Linux não está imune a malware, infelizmente. Mesmo num servidor bem configurado e atualizado, é uma boa ideia.
Muitos dos fornecedores comerciais de Antivírus tem soluções para Linux, e se sua empresa já tem um contrato com um deles, poderá usar a solução corporativa pra unificar o gerenciamento. Se esta for uma opção pra você, veja com seu fornecedor para instruções de instalação no Debian Buster.
Neste caso vamos instalar o ClamAV, um antivírus open source sem custo.
sudo apt install clamav clamav-daemon
Vamos configurá-lo para inicializar junto com o sistema e atualizar automaticamente definições
sudo systemctl start clamav-daemon sudo systemctl enable clamav-daemon sudo systemctl start clamav-freshclam sudo systemctl enable clamav-freshclam
O ClamAV está instalado e ativo, e vai em seguida iniciar uma atualização e scan do sistema. Com isso o uso de CPU e memória subirá enquanto durar o scan.
Os logs do ClamAV estão no diretório /var/log/clamav e podem ser vistos usando o editor nano.
sudo nano -v /var/log/clamav/clamav.log sudo nano -v /var/log/clamav/freshclam.log
Use Ctrl-X para sair do nano.
Auditoria de Segurança
Vamos instalar o Lynis para auditar o sistema até aqui e nos dar recomendações de segurança.
sudo apt install gnupg apt-transport-https -y sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C80E383C3DE9F082E01391A0366C67DE91CA5D5F sudo wget -O - https://packages.cisofy.com/keys/cisofy-software-public.key | sudo apt-key add - echo 'Acquire::Languages "none";' | sudo tee /etc/apt/apt.conf.d/99disable-translations echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list sudo apt update && sudo apt install lynis
O Lynis está instalado. Para fazer uma auditoria do sistema, digite:
sudo lynis audit system
Isto vai produzir um relatório detalhado da segurança do sistema. Muitas das sugestões podem ser ignoradas, mas preste atenção em qualquer Warning. Revise as Sugestions para ver se tem algo que merece ser resolvido. Muitas das sugestões fazem sentido remediar se vamos ter usuários logando diretamente na máquina linux, mas em casos de servicos de backend, como Web server, Proxy, servidor de arquivos, DNS, DHCP isto não é necessário. Como este é nosso caso, não vamos tomar nenhuma ação adicional no momento.
Lembre de repetir a análise do Lynis quando configurar novos serviços no sistema.
sudo lynis audit system
Conclusão
Este artigo mostrou como configurar um servidor Linux básico seguro o suficiente para colocar em sua rede de produção. É claro que ele não terá muita utilidade até que você configure serviços de rede específicos nele, então veja os outros artigos desta série para configurar papéis específicos.
A seguir estão alguns dos passos adicionais que você pode realizar para melhorar a segurança e integração deste servidor a seu novo ambiente. À medida que os artigos forem sendo escritos você os verá aqui.
Configurações opcionais
- Adicione o Linux a um domínio do Active Directory para fazer login com contas do Windows
- Configure contas como Operadores de Servidor para que possam apenas desligar e reiniciar os servidores
- Configurar controle de intrusão com o Fail2ban
- Instalar um Agente de Transporte de email (MTA) para que você possa receber alertas do servidor
- Centralizar o gerenciamento de logs
Instalando Serviços ao servidor
- Configurando um servidor Web Linux
- Configurando um servidor Proxy com o Squid com autenticação Active Directory (AD) e vários níveis de acesso
- Configurando um servidor de arquivos e impressão para substituir o Windows Server
- Configurando um servidor VPN para permitir acesso remoto a seus usuários na pandemia
Referências: