Manual de instalação de um servidor Linux para o cliente

1 - Instalando o Linux

O Linux homologado para o sistema é o Debian 11.

1.1 Instalando o Linux:

Baixe o ISO do Debian 11 clicando aqui, e proceda com a instalação conforme as orientações desse artigo.

Demonstração:

Particionamento:

/swap   ( dobro da memória )

/           ( 20%  do restante disponível)

/var       ( 80% do restante disponível)

 

1.2 Instale as ferramentas:

apt install sudo

sudo apt update && sudo apt install nano && sudo apt-get install mlocate && sudo apt install htop && sudo updatedb

1.3 Fixando o IP do servidor

Obtenha o nome da rede com o comando abaixo:

ip addr show

Abra o arquivo interfaces:

sudo nano /etc/network/interfaces

Configure conforme o exemplo abaixo, onde o nome da rede é eth0 e o IP fixo é 192.168.0.250:

auto eth0

iface eth0 inet static

address 192.168.0.250

gateway 192.168.0.1

netmask 255.255.255.0

 

1.4 UFW Firewall  

sudo apt update && sudo apt install ufw && sudo ufw enable

sudo ufw status

1.4.1 Habilitando SSH

sudo apt update && sudo apt install openssh-server && sudo systemctl enable ssh

sudo systemctl status ssh

Configure o acesso via ssh somente a sub rede do cliente:

sudo ufw default deny incoming
sudo ufw default allow outgoing

sudo ufw allow from [Sub rede]/24 to any port 7410 proto tcp

( Exemplo: sudo ufw allow from 192.168.2.0/24 to any port 7410 proto tcp)

Confira a situação

sudo ufw status

1.4.2 Permitindo acesso via root e configurando porta

nano /etc/ssh/sshd_config

Ache a configuração "PermitRootLogin", remova o "#" e coloque  "yes". Resultado:

PermitRootLogin yes 

Altere a porta da conexão via SSH

Port 7410 

A configuração deve ficar confirme a imagem abaixo:

Reinicie o serviço

sudo systemctl restart ssh

 

Em um novo terminal, acesse o servidor via SSH utilizando a porta 7410. 

 

Liste todas as permissões do UFW:

ufw status

Remova todas as permissões para a porta 22, conforme exemplos abaixo:

sudo ufw delete allow 22

sudo ufw delete allow from 192.168.2.0/24 to any port 22 proto tcp  (Nota: troque 192.168.2.0 pelo IP que aparece na lista)

Liste todas as permissões do UFW e confira se todas as permissões para a porta 22 foram removidas:

ufw status

 

1.4.3 Instalando e configurando o Fail2ban

Copie e execute o seguinte comandos:

echo "==> Instalando o Fail2Ban..."
sudo apt update -y
sudo apt install fail2ban -y
sudo mkdir -p /etc/fail2ban/jail.d
sudo bash -c 'cat > /etc/fail2ban/jail.d/ssh-custom.conf <<EOF
[sshd]
enabled = true
port = 7410
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 900
ignoreip = 127.0.0.1/8
backend = systemd
EOF'
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
sudo fail2ban-client status sshd
echo "Fail2Ban configurado com sucesso para SSH na porta 7410!"

Para acessar a situação atual do Fail2Ban, execute o seguinte comando:

sudo fail2ban-client status sshd

1.4.4 Dê permissão somente ao usuário root para comandos sudo e utilizar o cron.

Execute esse comando para limitar o acesso ao cron 

echo "root" | sudo tee /etc/cron.allow

Execute esse comando para listar os usuários com permissão de executar comandos como sudo:

sudo grep -r "ALL" /etc/sudoers /etc/sudoers.d/ 2>/dev/null

Deve retornar somente esses dois usuários:

IMPORTANTE: Se o comando acima listar usuários diferentes de root e %sudo, remova as permissões desses usuários. Exemplo: "sudo deluser market sudo".

 

1.4.5 Desabilitando qualquer tipo de hibernação

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

 

 

2 - Instalando o Postgres

A versão homologada para o sistema é a do PostgreSQL 13:

2.1 - Instalação:

sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-13
sudo apt-get -y install postgresql-contrib-13

sudo apt-get install postgresql-13-postgis-3


sudo systemctl start postgresql@13-main.service
sudo systemctl enable postgresql@13-main.service

 

Instalação concluída. Confira a situação do serviço do PG:

sudo systemctl status postgresql@13-main.service

2.2 - Dando permissão para o acesso a porta do PG pela subrede que o sistema estará utilizando:

sudo ufw allow  from  [Sub rede]/24 to any port 5432

(Exemplo: sudo ufw allow  from 192.168.2.0/24 to any port 5432)

 

3 - Configurando o Postgres 

3.1 - Configuração padrão:

postgresql.conf

Acesse o arquivo de configuração:

nano /etc/postgresql/13/main/postgresql.conf

Altere as seguintes configurações:

listen_addresses='*'

max_locks_per_transaction=1000

datestyle = 'iso, mdy'


log_destination  = 'stderr'
logging_collector  = on
log_directory  = 'pg_log' # directory where log files are written
log_filename = 'postgresql-%Y_%H.log'
log_file_mode = 0640
log_truncate_on_rotation  = on
log_rotation_age   = 1d
log_rotation_size  = 64MB


client_min_messages  = log
log_min_messages   = notice
log_min_error_statement = warning
log_min_duration_statement = 40000 


log_checkpoints = on
log_connections = off
log_disconnections = off
log_duration  = off
log_error_verbosity = default
log_hostname  = off
log_line_prefix = '%t [%p]: [%l] user=%u,db=%d,app=%a,host=%h'
log_lock_waits = on
log_statement  = 'ddl'
log_temp_files  = -1


log_timezone = 'America/Sao_Paulo'

 

Alterando a senha do usuário postgres

sudo -u postgres psql
postgres=# \password postgres
Enter new password: <new-password>
postgres=# \q

3.1.1 Alterando todos os tipos de acesso do pg_hba.conf para MD5

Execute os comandos abaixo para alterar o arquivo pg_hba.conf:

sed -i '/^local/s/peer/md5/' /etc/postgresql/13/main/pg_hba.conf

sed -i '/^host/s/ident/md5/' /etc/postgresql/13/main/pg_hba.conf

3.1.2 Especifique quem terá acesso ao bando de dados

Acesse o arquivo pg_hba.conf para adicionar a configuração que dá acesso aos bancos das outras máquinas:

nano /etc/postgresql/13/main/pg_hba.conf

Informe as faixas de IPs que terão acesso:

Adicione a faixa de IP para o docker:

host all all 172.19.0.0/16 md5

Adicione a faixa de IP da rede local do cliente:

host all all [Sub rede]/24 md5

(Exemplo: host all all 192.168.1.0/24 md5)

Exemplo:

IMPORTANTE: Coloque o método md5 em todos os itens.

 

3.2 - Configurações conforme a máquina:

3.2.1 - Acesse o site PGTune clicando aqui, informe as configurações da máquina do cliente a configuração necessária para o PostgreSQL. 

Por exemplo, caso a máquina tiver 16GB de memória e 4 CPUs, ao informar esses dados e clicar em "Generate" temos as configurações apresentadas abaixo:

NOTA: Para confirmar como o campo Data Storage deve ser preenchido use o seguinte comando: cat /sys/block/sda/queue/rotational (Se a saída for 1 , o disco é HDD. Se a saída for 0 (zero), o disco é SDD)

NOTA 2 IMPORTANTE: Para saber quantos de memória tem o linux basta executar o comando free -h e para saber quantos de CPU tem basta executar o comando nproc ou lscpu.

3.2.2 - Abra o arquivo de configurações do Postgres, com o comando abaixo, e altere as configurações sugeridas acima.

nano /etc/postgresql/13/main/postgresql.conf

3.2.3 - Reinicie o PG:

sudo systemctl restart postgresql@13-main.service

 

4 - Instalando o Docker 

NOTA: Para acessar a documentação oficial do Docker clique aqui.

4.1 Instalando o Docker no Debian:

Como garantia, clique aqui para remover pacotes antigos que possam estar instalados.

Configure o repositório do docker e instale a última versão utilizando os comandos listados aqui

Teste para ver se deu tudo certo, execute o seguinte comando:

sudo docker run hello-world

Se aparecer Hello World está tudo funcionando corretamente.

Para mais informações consulte o site oficial.

4.2 Permitir acesso ao PG

Dê permissão para o docker acessar a porta do PG:

sudo ufw allow  from 172.19.0.0/16 to any port 5432

4.3 Instale a ferramenta Portainer:

Clique aqui para saber sobre como instalar os serviços da Market

 

5 - Atualização geral dos pacotes de segurança e sistema. 

Execute o comando abaixo para atualizar e reiniciar o linux:

sudo apt full-upgrade -y

sudo reboot

NOTA: Repita esses comandos quando quiser atualizar o sistema e seus pacotes de segurança.

 

6 - Para restaurar uma base de dados da Market, acesse o artigo abaixo:

Como restaurar uma base de dados em um novo servidor linux do cliente?

 

 

7 - Configurar para parar o banco de dados ao desligar a máquina 

NOTA: Quando desliga o servidor enquanto está sendo acessado e com processos em andamento pode corromper as bases de dados. Com este script valos parar o serviço antes de desligar a máquina, isso vai fazer com que o PostgreSQL encerre todos os processo em segurança.

Crie o script:

sudo nano /usr/local/sbin/stop_pg.sh

Conteúdo:

#!/bin/bash
NOW=$(date '+%Y-%m-%d %H:%M:%S')
echo "[Shutdown Hook - $NOW] Stopping PostgreSQL 13..." >> /var/log/postgresql_shutdown_hook.log
if /usr/bin/systemctl stop postgresql@13-main.service; then
  echo "[Shutdown Hook - $NOW] PostgreSQL stopped successfully." >> /var/log/postgresql_shutdown_hook.log
else
  echo "[Shutdown Hook - $NOW] Failed to stop PostgreSQL!" >> /var/log/postgresql_shutdown_hook.log
fi

Dê permissão:

sudo chmod +x /usr/local/sbin/stop_pg.sh

Crie um serviço:

sudo nano /etc/systemd/system/postgresql-shutdown-hook.service

Conteúdo:

[Unit]
Description=Shutdown hook para parar PostgreSQL 13
DefaultDependencies=no
Before=poweroff.target reboot.target halt.target shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/stop_pg.sh
RemainAfterExit=yes

[Install]
WantedBy=halt.target reboot.target shutdown.target

 

Habilite o serviço:

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable postgresql-shutdown-hook.service


Caso queira testar desligue e ligue a máquina novamente e consulte os logs:

cat /var/log/postgresql_shutdown_hook.log

 


Comandos úteis:

Verificar o espaço em disco, selecione o diretório e execute o comando abaixo:

echo; pwd; echo; ls -AlhF; echo; du -h --max-depth=1; echo; du -sh

Listar informações sobre os discos

fdisk -l

NOTA: No comando df -h o espaço utilizado pelo docker não é real, o que aparece é apenas um espelho do root.
DICA: Caso o disco estiver cheio entre na pasta /var/log/postgresql e remova todos os logs, isso vai dar um espaço suficiente para restabelecer o sistema e ver o que ocorreu. Se ainda não foi o suficiente, copie um diretório de algum serviço que esteja parado da pasta /var para a pasta /home, apague a pasta original e tente restabelecer o serviço do PG. Com o serviço restabelecido e com mais espaço, volte a pasta que foi removida para o seu local original. ( Para copiar utilize o comando "cp -RT [Diretório origem] [Diretório destino]")

 


Sistema operacional \ Linux

Escrito por Josué Diniz Lourenço e revisado por Matheus Leandro Ferreira em 09/05/2025.


Link público: www.conhecimento.market.com.br/artigo/629