Skip to content

Template Padrão PMDF: Ubuntu Server

Nota

Última atualização: Agosto 2025

🐧 Ubuntu 24.04.2 LTS - Status: Produção

Template padronizado para servidores Ubuntu sem utilização de Docker



🎯 Objetivo

🎯 Propósito Principal

Criar, configurar e implementar uma template (ou imagem) padrão de sistema operacional Linux contendo a distribuição Ubuntu 24.04.2 LTS atualizada, fornecendo a documentação e treinamento sobre o uso da template.

📋 Justificativa

🔒 Segurança em Foco

Fortalecer os principais itens do sistema operacional Linux Ubuntu 24.04.2 LTS para impedir o acesso não autorizado, considerando a segurança, flexibilidade e risco de acordo com a Norma ISO/IEC 27002.

A proposta não é criar um novo conceito de sistema Linux ou mesmo uma nova distribuição Linux, mas sim ajustar os principais itens que em grande percentual afetam a saúde do sistema e aumentam os riscos de acessos indevidos.

ISO/IEC 27002 | Segurança | Padronização


📖 Descrição Detalhada

💿 Instalação do Sistema Operacional

📝 Template Base: O template a ser criado seguirá as seguintes premissas:

Especificações Básicas:

  • 🖥️ Sistema: Ubuntu 24.04.2 LTS (64 bits)
  • 🏷️ Hostname: a ser definido pela PMDF
  • 🔑 Senha root: a ser definido pela PMDF
  • 👤 Login padrão local: suporte
  • 🔒 Senha da conta padrão: a ser definido pela PMDF

💽 Particionamento do Disco com LVM

🖥️ Configuração de Hardware Base

Especificação de Hardware Recomendada

  • 💻 CPU: 2 vCPUs
    Processamento recomendado para cargas de trabalho básicas
  • 🧠 Memória: 4 GB RAM
    Suficiente para serviços padrão e aplicações básicas
  • 💾 Disco: 60 GB
    Espaço adequado para sistema e aplicações

⚠️ Importante sobre o Diretório /boot

O diretório /boot não deve ser instalado como LVM. Este diretório contém o kernel e arquivos de inicialização do sistema e deve ser separado para garantir que falhas no sistema de arquivos raiz não afetem o boot.

📝 Nota sobre /boot

A instalação padrão do Ubuntu 24.04 LTS ocupa aproximadamente 95 MB no diretório /boot. Configuramos este valor para 2GB prevendo futuras implementações, já que este é um disco sem LVM e não permite alterações posteriores de tamanho.

📊 Estrutura de Particionamento LVM

O disco conterá o tamanho total de 58GB (57.996G) em LVM, divididos conforme abaixo:

PartiçãoTamanhoVolume GroupDescrição
/3 GBvg-pm-rootSistema Raiz
swap2 GBswapMemória Virtual
/tmp512 MBvg-pm-tmpArquivos Temporários
/home2 GBvg-pm-homeDiretórios dos Usuários
/usr15 GBvg-pm-usrProgramas e Bibliotecas
/var34,5 GBvg-pm-varDados Variáveis

💡 Dica: Esta estrutura de particionamento foi projetada para otimizar a segurança e o desempenho do sistema, separando dados críticos em partições independentes.

🛠️ Processo de Instalação

Configurações Iniciais Necessárias

  • 🔒 Servidor SSH: Para acesso remoto seguro ao servidor após a instalação
  • 🛠️ Utilitários de Sistema: Ferramentas básicas necessárias para administração do sistema

⚠️ Recomendação Importante:

Durante a instalação do Ubuntu 24.04.2 live-server, é recomendado desconectar a rede durante o processo de instalação. Isto resulta em uma instalação mais enxuta, pois alguns pacotes (como manuais) não serão instalados inicialmente.

💡 Esta abordagem reduz o tamanho inicial da imagem e minimiza a exposição à rede durante a configuração base.


📀 Instalação do Ubuntu 24.04.2 LTS

1️⃣ Iniciando a Instalação

Tela inicial de instalação do Ubuntu Server

Tela inicial de instalação do Ubuntu Server

2️⃣ Seleção do Idioma

🌍 O sistema irá carregar uma imagem do kernel na memória e apresentar a primeira tela de seleção da linguagem. Utilizaremos como padrão English.

Seleção do idioma do sistemaSeleção do idioma do sistema

3️⃣ Atualização do Instalador

🔄 Na tela InstaLler update available, que informa sobre uma versão mais nova do instalador, selecione Continue without updating. Faremos as atualizações posteriormente.

Opção de atualização do instaladorOpção de atualização do instalador

4️⃣ Configuração do Teclado

⌨️ Na tela Keyboard configuration, altere o layout do teclado para Português Brazil e clique em done.

Configuração do layout do tecladoConfiguração do layout do teclado

5️⃣ Tipo de Instalação

💾 Em Choose the type of installation, selecione Ubuntu Server e clique em done.

Seleção do tipo de instalaçãoSeleção do tipo de instalação

6️⃣ Configuração de Rede

🌐 Na tela Network configuration, optaremos por configurar a rede posteriormente. Selecione Continue without network.

Configuração de rede inicial

7️⃣ Configuração de Proxy

🔄 Em Proxy configuration, mantenha o campo em branco e clique em Done.

Configuração de proxy do sistemaConfiguração de proxy do sistema

8️⃣ Espelho do Ubuntu

🔄 Em Ubuntu archive mirror configuration, clique em Done. Como não há conexão de rede, não será necessário configurar repositórios neste momento.

Configuração do mirror do UbuntuConfiguração do mirror do Ubuntu

9️⃣ Configuração de Armazenamento

💽 No Guided storage configuration, siga estes passos:

  1. Selecione Custom storage layout
  2. Clique em Done
  3. Na tela Storage configuration:
    • Selecione free space
    • Escolha Add GPT Partition
    • Pressione Enter

Tela de seleção do particionamentoTela de seleção do particionamento

1️⃣0️⃣ Configuração da Partição /boot

💾 Configure a primeira partição:

  • Tamanho: 2G para /boot
  • Clique em Create

Configuração do tamanho da partição /bootConfiguração do tamanho da partição /boot

1️⃣1️⃣ Configuração do Sistema de Arquivos

⚙️ A partição /boot utilizará o sistema de arquivos ext4 (não LVM).

Passos:

  1. Clique em Back para retornar à tela inicial
  2. Selecione Use an entire disk
  3. Escolha Set up this disk as an LVM group

Configuração do LVMConfiguração do LVM

1️⃣2️⃣ Desmontagem da Partição Raiz

🔧 Na seção FILE SYSTEM SUMMARY:

  1. Localize a partição /
  2. Clique sobre ela
  3. Selecione Unmount

Desmontagem da partição raizDesmontagem da partição raiz

1️⃣3️⃣ Remoção do Volume Lógico

🗑️ Para remover o volume lógico padrão:

  1. Localize ubuntu-lv
  2. Clique sobre ele
  3. Selecione Delete
  4. Confirme selecionando Delete novamente
  5. Pressione Enter

Remoção do volume lógico padrãoRemoção do volume lógico padrão

  1. Selecionar o Volume Group ubuntu-vg (new) para renomear clicando em Edit.

Renomear Volume Group

1️⃣5️⃣ Configuração do Volume Group

✏️ Configure o nome do Volume Group:

  1. Digite vg-pm
  2. Clique em Save

Salvando o novo nome do Volume GroupSalvando o novo nome do Volume Group

1️⃣6️⃣ Criação dos Volumes Lógicos

✅ Agora temos:

  • /boot separado com sistema de arquivos EXT4
  • Volume Group pronto para criar volumes lógicos

Próximos passos:

  1. Clique em free space
  2. Selecione Create Logical Volume

Preparação para criação dos volumes lógicosPreparação para criação dos volumes lógicos

1️⃣7️⃣ Configuração do Volume Root

💾 Configure o volume raiz:

  1. Name: lv-root
  2. Size: 3G
  3. Format: ext4
  4. Mount point: /
  5. Clique em Create

Configuração do volume lógico raizConfiguração do volume lógico raiz

1️⃣8️⃣ Criação dos Volumes Adicionais

📊 Para os próximos volumes:

  1. Selecione free space
  2. Crie a partição swap
  3. Em Format, selecione swap

💡 Dica: Siga a tabela de particionamento apresentada anteriormente

Criação dos volumes lógicos adicionaisCriação dos volumes lógicos adicionais

1️⃣9️⃣ Continuação do Particionamento

🔄 Continue criando as partições restantes:

  1. /tmp
  2. /home
  3. /usr
  4. /var

💡 Dica: Consulte a tabela de tamanhos fornecida anteriormente para cada partição

📊 Tabela de Particionamento

PartiçãoTamanhoNome do VG-LVPropósito
/3 GBvg-pm-rootSistema Base
swap2 GBswapMemória Virtual
/tmp512 MBvg-pm-tmpArquivos Temporários
/home2 GBvg-pm-homeDiretórios dos Usuários
/usr15 GBvg-pm-usrProgramas e Bibliotecas
/var34,5 GBvg-pm-varLogs e Dados Variáveis
2️⃣0️⃣ Verificação do Esquema Final

✅ Após criar todas as partições, seu esquema de disco deve se parecer com isto:

Esquema final do particionamentoEsquema final do particionamento

2️⃣1️⃣ Confirmação e Formatação

⚠️ Atenção:

  1. Clique em Done
  2. Uma mensagem de confirmação aparecerá
  3. Clique em Continue para prosseguir com a formatação

💡 Dica: Esta ação é irreversível e apagará todos os dados do disco

Tela de confirmação da formatação

2️⃣2️⃣ Configuração do Perfil

👤 Na tela Profile configuration:

Os seguintes dados devem ser definidos pela PMDF:

  • Nome de usuário
  • Nome da máquina (hostname)
  • Senha de acesso

💡 Nota: Os dados mostrados na imagem são apenas exemplos

Configuração do perfil do sistemaConfiguração do perfil do sistema

2️⃣3️⃣ Ubuntu Pro

🔄 Na tela do Ubuntu Pro:

  1. Mantenha a opção padrão (Skip)
  2. Clique em Continue

💡 Dica: A configuração do Ubuntu Pro pode ser feita posteriormente, se necessário

Tela de configuração do Ubuntu ProTela de configuração do Ubuntu Pro

2️⃣4️⃣ Configuração SSH

🔒 Na tela SSH configuration:

  1. Marque a opção Install OpenSSH server
  2. Clique em Done

💡 Dica: O SSH permitirá acesso remoto seguro ao servidor

Configuração do servidor SSHConfiguração do servidor SSH

2️⃣5️⃣ Processo de Instalação

🔄 Durante a instalação:

  • O processo será rápido (sem configuração de rede)
  • Aguarde a conclusão
  • Clique em Reboot Now ao finalizar

Tela de instalação do sistemaTela de instalação do sistema

2️⃣6️⃣ Primeira Inicialização

⚠️ Atenção:

  • A máquina irá reiniciar automaticamente
  • O primeiro boot pode ser mais lento (rede desabilitada)
  • Faça login para verificar se tudo está funcionando
2️⃣7️⃣ Desligamento do Sistema

🔌 Para desligar a máquina com segurança, execute:

shell
sudo poweroff

💡 Dica: Aguarde o desligamento completo antes de prosseguir

🛠️ Iniciando as configurações do novo servidor


🌐 Configuração de Rede

📡 Configuração da Interface de Rede

🎯 Objetivo: Estabelecer conectividade de rede segura e confiável

1️⃣ Identificação da Interface

🔍 Descobrir Interface de Rede:

shell
ip a s

Exemplo: Interface de rede identificada como enp0s3Exemplo: Interface de rede identificada como enp0s3

💡 Dicas:

  • Anote o nome da interface (ex: enp0s3)
  • Verifique o estado (UP/DOWN)
  • Observe endereços MAC e IP atuais
2️⃣ Configuração via Netplan

📝 Editar Configuração:

shell
sudo vim /etc/netplan/50-cloud-init.yaml

⚙️ Parâmetros Importantes:

  • Endereçamento IP fixo
  • Máscara de rede
  • Gateway padrão
  • Servidores DNS
3️⃣ Exemplo de Configuração

Configuração Netplan com endereçamento estáticoConfiguração Netplan com endereçamento estático

🔒 Boas Práticas:

  • Use endereços IP fixos para servidores
  • Configure DNS redundante
  • Documente as configurações
  • Mantenha backup do arquivo

⚠️ Importante: Você precisará das seguintes informações:

  • Endereço IP
  • Máscara de rede
  • Gateway padrão
  • Servidores DNS
4️⃣ Aplicação e Validação

🔄 Aplicar Configurações:

shell
# Validar sintaxe do Netplan
sudo netplan try

# Aplicar configurações
sudo netplan apply

⚠️ Importante:

  • netplan try testa a configuração antes de aplicar
  • Reverte automaticamente em caso de erro
  • Fornece 120 segundos para confirmar as mudanças

🛡️ Hardening: Configurações padrão de segurança do netplan:

  • Donos do arquivo devem ser: <user:group> root:root
  • Permissões devem ser 600
shell
# Modificar owners
sudo chown root:root /etc/netplan/50-cloud-init.yaml

# Modificar permissões
sudo chmod 600 /etc/netplan/50-cloud-init.yaml
5️⃣ Verificação do Estado

🔍 Validar Configuração:

shell
# Verificar endereços IPv4
ip -4 -br a

# Testar conectividade
ping -c 4 gateway.local

Confirmação do endereçamento IP configuradoConfirmação do endereçamento IP configurado

Checklist de Validação:

  • Interface no estado UP
  • IP configurado corretamente
  • Máscara de rede correta
  • Conectividade com gateway
  • Resolução DNS funcionando

🛠️ Solução de Problemas:

  • Verifique logs: sudo journalctl -xe
  • Confirme sintaxe: sudo netplan --debug generate
  • Teste DNS: nslookup exemplo.com
6️⃣ Atualização do Sistema

🔄 Processo de Atualização:

shell
# Atualizar lista de pacotes
sudo apt update

# Verificar atualizações disponíveis
apt list --upgradable

# Instalar atualizações de segurança
sudo apt upgrade -y

💡 Dicas de Atualização:

  • Verifique logs de erro
  • Observe pacotes retidos
  • Confirme espaço em disco
  • Mantenha histórico de atualizações
7️⃣ Instalação de Pacotes Essenciais

📦 Ferramentas Básicas:

shell
# Instalar utilitários essenciais
sudo apt install -y vim htop tmux net-tools

# Verificar instalação
dpkg -l | grep -E "vim|htop|tmux|net-tools"

�️ Pacotes Instalados:

  • vim: Editor de texto avançado
  • htop: Monitor de sistema interativo
  • tmux: Multiplexador de terminal
  • net-tools: Ferramentas de rede clássicas

💡 Nota sobre Segurança:

  • Instale apenas pacotes necessários
  • Mantenha lista mínima de software
  • Remova pacotes não utilizados
  • Documente pacotes instalados

📦 Gestão de Software

� Gerenciamento de Pacotes

📋 Auditoria de Software

🎯 Objetivo: Manter um inventário limpo e seguro de software instalado

1️⃣ Inventário de Pacotes

📊 Gerar Lista de Pacotes:

shell
# Lista detalhada com nome e versão
dpkg -l | awk '{print $2,$3}' | sed '1,5d' > /tmp/pacotes_instalados.txt

# Lista apenas pacotes essenciais
dpkg-query -Wf '${Package;-40}${Priority}\n' | grep priority > /tmp/pacotes_essenciais.txt

# Exibir resultados
echo "=== Todos os Pacotes ==="
cat /tmp/pacotes_instalados.txt
echo -e "\n=== Pacotes Essenciais ==="
cat /tmp/pacotes_essenciais.txt

💡 Dicas de Auditoria:

  • Revise regularmente pacotes instalados
  • Mantenha documentação atualizada
  • Compare com linha base de segurança
  • Identifique pacotes não utilizados

🧹 Limpeza do Sistema

🎯 Objetivo: Remover softwares desnecessários e reduzir superfície de ataque

1️⃣ Identificação de Pacotes
shell
# Listar pacotes não utilizados
sudo apt autoremove --dry-run

# Encontrar pacotes órfãos
deborphan

# Verificar pacotes instalados manualmente
aptitude search '~i!~M'
2️⃣ Remoção Segura

⚠️ Processo de Remoção:

shell
# Remover pacote específico com configurações
sudo apt purge pacote1 pacote2

# Remover dependências não utilizadas
sudo apt autoremove --purge

# Limpar cache de pacotes
sudo apt clean

🛡️ Práticas de Segurança:

  • Faça backup antes de remover
  • Verifique dependências
  • Documente alterações
  • Teste após remoção
  • Mantenha logs de mudanças

⚠️ Cuidados Importantes:

  1. Sempre verifique dependências
  2. Faça backup de configurações
  3. Use --dry-run para testar
  4. Mantenha registro de alterações
  5. Valide funcionalidades após remoção

⚙️ Configuração Base do Sistema

🔄 Atualização e Manutenção Inicial

📋 Processo de Atualização Segura

🎯 Objetivo: Garantir que o sistema esteja completamente atualizado e seguro

1️⃣ Verificação Preliminar
shell
# Verificar espaço em disco
df -h

# Verificar repositórios configurados
cat /etc/apt/sources.list
2️⃣ Atualização do Sistema
shell
# Atualizar índices
sudo apt update

# Instalar atualizações
sudo apt upgrade -y

# Remover pacotes desnecessários
sudo apt autoremove -y

# Limpar cache
sudo apt clean

💡 Boas Práticas:

  • Verifique espaço antes de atualizar
  • Monitore logs durante o processo
  • Mantenha snapshot/backup
  • Documente alterações importantes

⚠️ Pontos de Atenção:

  • Reinicie se necessário
  • Verifique serviços críticos
  • Monitore uso de recursos
  • Valide funcionalidades após update

💡 O que cada comando faz:

  • apt update: Atualiza a lista de pacotes disponíveis
  • apt upgrade -y: Instala as atualizações disponíveis sem solicitar confirmação
  • apt autoremove -y: Remove pacotes desnecessários automaticamente

⚠️ Importante:

  • Este processo pode demorar alguns minutos
  • Mantenha a conexão de rede estável
  • Não interrompa o processo de atualização

🤖 Sistema de Atualizações Automáticas

� Visão Geral

🎯 Objetivo: Implementar atualizações automáticas seguras e controladas

1️⃣ Instalação e Habilitação

shell
# Instalar pacote de atualizações automáticas
sudo apt install unattended-upgrades -y

# Habilitar o serviço
sudo dpkg-reconfigure --priority=low unattended-upgrades

# Verificar status
sudo systemctl status unattended-upgrades

2️⃣ Configuração do Comportamento

⚙️ Ajuste das Configurações:

shell
# Editar configuração principal
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades

# Configurar atualizações periódicas
sudo vim /etc/apt/apt.conf.d/20auto-upgrades

Exemplo de configuração do unattended-upgrades

🛡️ Recomendações de Segurança:

  • Atualize apenas de fontes confiáveis
  • Configure blacklist de pacotes críticos
  • Habilite notificações de erros
  • Mantenha logs detalhados
  • Configure janela de manutenção

3️⃣ Gestão de Pacotes Críticos

🎯 Objetivo: Controlar atualizações de pacotes sensíveis para evitar interrupções não planejadas

📋 Configuração da Blacklist

⚙️ Editar Lista de Exclusões:

shell
# Arquivo de configuração
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades

📝 Exemplo de Configuração:

text
Unattended-Upgrade::Package-Blacklist {
    // Kernel e módulos
    "linux-*";           // Atualizações de kernel
    "nvidia-*";          // Drivers de vídeo

    // Serviços críticos
    "nginx";            // Servidor web
    "apache2";          // Servidor web
    "php*";             // Pacotes PHP
    "mariadb*";         // Banco de dados
    "mysql*";           // Banco de dados
    "postgresql*";      // Banco de dados

    // Serviços corporativos
    "samba*";           // Compartilhamento de arquivos
    "bind9*";           // Servidor DNS
    "docker*";          // Container runtime
};

⚙️ Política de Atualizações:

  1. Kernel (linux-*):

    • Atualização manual planejada
    • Teste em ambiente de homologação
    • Janela de manutenção definida
  2. Serviços Críticos:

    • Avaliação de impacto necessária
    • Backup antes da atualização
    • Plano de rollback documentado
  3. Serviços Corporativos:

    • Coordenação com equipe de infraestrutura
    • Notificação prévia aos usuários
    • Monitoramento pós-atualização

🔍 Monitoramento:

shell
# Verificar tentativas de atualização
sudo cat /var/log/unattended-upgrades/unattended-upgrades.log

# Verificar pacotes retidos
apt-mark showhold

🌐 Configuração do Sistema DNS

📋 Visão Geral

🎯 Objetivo: Configurar resolução de nomes robusta e redundante

1️⃣ Configuração Base do DNS

📝 Editar Arquivo de Configuração:

shell
sudo vim /etc/resolv.conf

⚙️ Configuração Recomendada:

vim
# Configuração DNS Corporativo
# ===========================

# Domínio Principal
domain pmdf.local
search pmdf.local pmdf.intranet

# Servidores DNS
# Primário (AD)
nameserver 10.95.203.40
# Secundário (AD)
nameserver 10.95.203.41
# Fallback (Local)
nameserver 127.0.0.53

# Opções Avançadas
options rotate
options timeout:1
options attempts:2
options ndots:2

�️ Parâmetros de Segurança:

ParâmetroValorPropósito
rotate-Balanceamento entre servidores
timeout1Timeout de consulta em segundos
attempts2Tentativas antes de falhar
ndots2Pontos para consulta qualificada

2️⃣ Validação da Configuração

shell
# Testar resolução interna
nslookup server1.pmdf.local

# Testar resolução externa
dig @10.95.203.40 www.exemplo.com

# Verificar configuração atual
resolvectl status

🔒 Arquitetura DNS:

  1. DNS Interno (Primário)

    • Microsoft Active Directory
    • Resolução de nomes corporativos
    • Gerenciamento centralizado
  2. DNS Local (Secundário)

    • Systemd-resolved
    • Cache local
    • Fallback para consultas

⚠️ Considerações Importantes:

  • Mantenha sincronização com AD
  • Monitore latência de consultas
  • Configure logs de DNS
  • Implemente políticas de cache

🛡️ Proteção do Diretório Temporário

Bloqueio de Execuções em /tmp

⚠️ Contexto de Segurança: O diretório /tmp é compartilhado por todos os usuários e frequentemente é alvo de ataques:

  • Usuários maliciosos podem colocar scripts prejudiciais
  • Execução não autorizada de código pode comprometer o sistema
  • É necessário restringir permissões de execução

Configuração da Montagem Segura

🔒 Para proteger o sistema:

  1. Edite o arquivo de configuração de montagem:
shell
sudo vim /etc/fstab
  1. Localize a linha da partição /tmp
  2. Adicione a opção noexec para impedir execução de arquivos

💡 Dica: A opção noexec impede a execução de qualquer arquivo binário ou script no diretório

shell
sudo vim /etc/fstab

📝 Adicione ou modifique a linha da partição /tmp:

vim
/tmp    ext4    defaults,noexec    0    1

Aplicando as Alterações

🔄 Siga os passos abaixo para aplicar as mudanças:

1️⃣ Recarregue o daemon do systemd:

shell
sudo systemctl daemon-reload

2️⃣ Remonte a partição /tmp com as novas configurações:

shell
sudo mount -o remount /tmp

3️⃣ Verifique se as alterações foram aplicadas:

shell
sudo mount | grep /tmp

💡 Dica: O comando acima deve mostrar a opção noexec na saída


🛡️ Proteção do Diretório Home

Bloqueio de Execuções em /home

⚠️ Contexto de Segurança: O diretório /home contém os diretórios dos usuários e também precisa de proteção:

  • Pode conter scripts maliciosos
  • Usuários podem tentar executar programas não autorizados
  • É importante restringir execuções desnecessárias

Configuração da Montagem Segura do /home

🔒 Edite o arquivo de configuração de montagem:

shell
sudo vim /etc/fstab

📝 Adicione ou modifique a linha da partição /home:

vim
/home    ext4    defaults,nodev,nosuid    0    1

💡 Explicação das opções:

  • nodev: Impede a criação de dispositivos especiais
  • nosuid: Desabilita bits SUID/SGID para prevenir escalação de privilégios

Aplicando as Alterações

Aplicando as Configurações do /home

🔄 Execute os seguintes comandos:

1️⃣ Recarregue o daemon do systemd:

shell
sudo systemctl daemon-reload

2️⃣ Verifique a montagem do /home:

shell
sudo mount | grep /home

💡 Dica: Verifique se as opções nodev e nosuid aparecem na saída


🛡️ Proteção do Diretório /var

Bloqueio de Execuções em /var

⚠️ Contexto de Segurança: O diretório /var contém dados variáveis e logs do sistema:

  • Pode ser alvo de ataques de execução de código
  • Contém arquivos temporários de serviços
  • Requer proteção contra execuções não autorizadas

Configuração da Montagem Segura

🔒 Configure o arquivo /etc/fstab:

shell
sudo vim /etc/fstab

📝 Adicione ou modifique a linha da partição /var:

vim
/var    ext4    defaults,nodev,nosuid    0    1

Aplicando as Configurações

🔄 Execute os comandos:

1️⃣ Recarregue o daemon do systemd:

shell
sudo systemctl daemon-reload

2️⃣ Verifique a montagem do /var:

shell
sudo mount | grep /var

💡 Dica: Confirme se as opções nodev e nosuid estão ativas


🔐 Acesso Remoto

🔑 Implementação de Políticas de Senha com PAM

🛡️ Objetivo: Implementar políticas robustas de senha para prevenir o uso de senhas fracas e vulneráveis no sistema.

1️⃣ Instalação dos Componentes PAM

📦 Instale as bibliotecas necessárias para o controle de qualidade de senhas:

shell
sudo apt install libpam-pwquality libpwquality-common libpwquality1

💡 Componentes instalados:

  • libpam-pwquality: Módulo PAM para políticas de senha
  • libpwquality-common: Arquivos comuns da biblioteca
  • libpwquality1: Biblioteca principal

2️⃣ Configuração das Políticas de Senha

⚙️ Configure as regras de complexidade de senha:

shell
sudo vim /etc/security/pwquality.conf

📝 Adicione as seguintes políticas:

vim
# Configurações de Complexidade de Senha
# =====================================

# Requisitos Básicos
minlen          = 8     # Mínimo de 8 caracteres

# Requisitos de Caracteres
dcredit         = -1    # Requer pelo menos 1 número
ucredit         = -1    # Requer pelo menos 1 letra maiúscula
lcredit         = -1    # Requer pelo menos 1 letra minúscula
ocredit         = -1    # Requer pelo menos 1 caractere especial

# Verificações de Segurança
dictcheck       = 1     # Ativa verificação contra palavras do dicionário
enforce_for_root        # Aplica regras também para o usuário root
usercheck       = 1     # Proíbe senhas contendo nome do usuário

# Palavras Proibidas
badwords        = pm pmdf policia polícia policiamilitar políciamilitar pmdf1809
# Obs.: A verificação não diferencia maiúsculas/minúsculas

💡 Explicação das Políticas:

  • Comprimento: Mínimo de 8 caracteres
  • Complexidade: Requer números, maiúsculas, minúsculas e caracteres especiais
  • Segurança: Verifica contra dicionários e palavras proibidas
  • Abrangência: Aplicada a todos os usuários, incluindo root
  • Personalização: Lista de palavras proibidas específicas da PMDF

3️⃣ Segurança Adicional de Login

🛡️ Proteção contra login sem senha:

shell
sudo sed -i 's/nullok*//g' /etc/pam.d/common-auth

⚠️ Importante: Este comando remove a opção nullok do PAM, impedindo logins sem senha


🔍 Gestão de Portas e Serviços

Portas e Serviços Desnecessários

📌 Nota sobre a Template:

  • A imagem base já está otimizada e enxuta
  • Não é necessário configuração adicional neste momento

🔄 Gerenciamento Futuro:

  • As portas serão configuradas conforme os serviços necessários
  • Monitoramento mensal será implementado via:
    • Ansible (automação)
    • Wazuh (segurança)

🔒 Hardening do SSH

Fortalecimento do Serviço SSH

🛡️ Contexto: O SSH é o método mais seguro para acesso remoto em sistemas Linux, mas requer configurações adicionais para maximizar a segurança.

Configuração do SSH

⚙️ Edite o arquivo de configuração principal:

shell
sudo vim /etc/ssh/sshd_config

📝 Adicione as seguintes configurações:

vim
# Configurações de Segurança SSH
# =============================

> 💡 **Explicação das Configurações:**
> 
> **Configurações Básicas:**
> - Porta personalizada reduz ataques automatizados
> - Protocolo 2 oferece criptografia mais forte
> - Restrição por IP limita pontos de acesso
>
> **Restrições de Acesso:**
> - Bloqueio de root aumenta a segurança
> - Proibição de senhas vazias é essencial
> - Limite de tentativas previne força bruta
>
> **Desativação de Recursos:**
> - X11 desativado reduz superfície de ataque
>
> **Personalização:**
> - Banner fornece avisos legais e informações

# Configurações Básicas
# ===================
Port <número>          # Altere para uma porta não padrão
Protocol 2             # Usar apenas SSH versão 2 (mais seguro)
ListenAddress <ip>     # Restringe SSH à interface específica

# Restrições de Acesso
# ===================
PermitRootLogin prohibit-password    # Proíbe login direto como root
PermitEmptyPasswords no              # Proíbe senhas vazias
MaxAuthTries 3                       # Máximo de 3 tentativas de login

# Desativação de Recursos
# =====================
X11Forwarding no      # Desativa encaminhamento de interface gráfica

# Personalização
# =============
Banner /etc/ssh/sshd-banner    # Mensagem de boas-vindas pré-login

# Timeouts e Limites
# =================
LoginGraceTime 2m     # Timeout de 2 minutos para login

# Controle de Acesso
# ================
## AllowUsers <usuário1> <usuário2>    # Lista de usuários permitidos

# Autenticação
# ===========
PasswordAuthentication no    # Desativa autenticação por senha
                             # Uso de senha é necessário para integração com AD

⚠️ Observações Importantes:

  1. A lista AllowUsers deve ser configurada conforme necessidade
  2. PasswordAuthentication está desativado para maior segurança
  3. Configurações podem precisar de ajustes para integração com AD

Aplicando as Configurações

🔄 Reinicie o serviço SSH para aplicar as mudanças:

shell
sudo systemctl restart ssh

🛡️ Proteção Contra Ataques de Força Bruta

Instalação do Fail2ban

🔒 Objetivo: Implementar proteção adicional contra tentativas de invasão e ataques de força bruta ao serviço SSH.

1️⃣ Instalação do Software

📦 Instale o Fail2ban:

shell
sudo apt install -y fail2ban

💡 O que é o Fail2ban?

  • Sistema de prevenção de intrusões
  • Monitora logs de serviços
  • Bloqueia IPs que mostram atividade maliciosa
  • Proteção efetiva contra ataques de força bruta

2️⃣ Verificação do Serviço

🔍 Verifique se o Fail2ban está rodando corretamente:

shell
sudo systemctl status fail2ban

O que verificar:

  • Status deve mostrar: active (running)
  • Pressione q para sair da visualização
  • Verifique se não há erros nos logs

🛡️ Configuração do Firewall (UFW)

1️⃣ Verificação do Status

🔍 Verifique o estado atual do firewall:

shell
sudo ufw status

💡 Dica: O comando mostrará se o firewall está ativo e suas regras

2️⃣ Ativação do Firewall

⚠️ Atenção: Se o UFW não estiver ativo, habilite-o:

shell
sudo ufw enable

⚠️ Importante: O comando solicitará confirmação antes de ativar o firewall

3️⃣ Configuração de Regras para SSH

🔐 Configuração Crítica: É essencial configurar as regras SSH ANTES de ativar o firewall para evitar perda de acesso.

Opção 1: Permitir SSH por Nome do Serviço
shell
sudo ufw allow ssh

💡 Nota: Este comando permite acesso à porta padrão do SSH (22)

Opção 2: Permitir SSH por Número da Porta
shell
sudo ufw allow 22/tcp

💡 Dica: Use esta opção se precisar especificar uma porta diferente da padrão

⚠️ Atenção:

  • Certifique-se de permitir a porta correta do SSH
  • Se você alterou a porta padrão do SSH, use o número da porta correspondente
  • Teste o acesso SSH antes de encerrar a sessão atual

4️⃣ Verificação do Status do Firewall

🔍 Verifique as regras atuais do firewall:

Visualização Básica:

shell
sudo ufw status

Visualização Detalhada:

shell
sudo ufw status verbose

💡 Dica: A opção verbose mostra informações adicionais como políticas padrão e detalhes de regras


🔒 Configuração do Fail2ban

1️⃣ Criação do Arquivo de Configuração Local

⚙️ Estrutura de Configuração:

  • Arquivos .conf: Configurações padrão
  • Arquivos .local: Personalizações do usuário
  • Sistema lê .conf primeiro, depois .local

🛡️ Proteção Contra Atualizações: Crie uma cópia local do arquivo de configuração:

shell
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

⚠️ Importante: Sempre faça alterações no arquivo .local para evitar que atualizações do sistema sobrescrevam suas configurações

2️⃣ Configuração da Proteção SSH

📝 Edite o arquivo de configuração local:

shell
sudo vim /etc/fail2ban/jail.local

🔍 Localização da Configuração SSH:

  • Procure pela seção [sshd]
  • Normalmente já existe, mas pode estar comentada
  • Se não existir, você pode adicioná-la manualmente

💡 Dica de Edição: Use /sshd no vim para encontrar rapidamente a seção

3️⃣ Configuração da Jail SSH

⚙️ Adicione ou modifique a seguinte configuração:

vim
[sshd]
enabled         = true        # Ativa a proteção para SSH
port           = ssh         # Porta do serviço SSH (ou número específico)
filter         = sshd        # Filtro para detectar tentativas de invasão
logpath        = %(sshd_log)s  # Arquivo de log a ser monitorado
maxretry       = 3          # Número máximo de tentativas
findtime       = 10m        # Janela de tempo para contagem de tentativas
bantime        = 1h         # Tempo de bloqueio do IP
ignoreip       = 127.0.0.1  # IPs que não serão bloqueados

💡 Explicação dos Parâmetros:

  • enabled: Ativa/desativa a proteção
  • port: Porta(s) monitorada(s)
  • filter: Padrão de detecção de tentativas
  • maxretry: Tentativas antes do bloqueio
  • findtime: Período para contar tentativas
  • bantime: Duração do bloqueio
  • ignoreip: IPs confiáveis

4️⃣ Configuração da Porta SSH

🔌 Configuração da Porta:

vim
# Opção 1: Usando nome do serviço
port = ssh

# Opção 2: Usando número da porta
port = 22

# Opção 3: Múltiplas portas
port = 22,2222

💡 Dica: Use a opção que corresponde à sua configuração do SSH

5️⃣ Integração com UFW

🛡️ Configuração do Firewall:

vim
banaction = ufw

⚙️ Como Funciona:

  1. Fail2ban usa regras definidas em /etc/fail2ban/action.d/ufw.conf
  2. Cria regras de bloqueio automaticamente no UFW
  3. Bloqueia apenas as portas específicas configuradas

6️⃣ Ajuste Fino dos Parâmetros

Parâmetros Recomendados:

vim
# Configuração de Tempo e Tentativas
bantime  = 1h    # Tempo de bloqueio
findtime = 10m   # Janela de monitoramento
maxretry = 3     # Máximo de tentativas

📊 Guia de Configuração:

ParâmetroDescriçãoValores Sugeridos
bantimeDuração do bloqueio1h (1 hora), 1d (1 dia)
findtimeJanela de monitoramento10m (10 min), 30m (30 min)
maxretryTentativas permitidas3-5 tentativas

7️⃣ Exemplo de Configuração Completa

📝 Configuração Recomendada do SSH:

vim
[sshd]
enabled     = true
port        = ssh
filter      = sshd
logpath     = %(sshd_log)s
maxretry    = 3
findtime    = 10m
bantime     = 1h
banaction   = ufw
ignoreip    = 127.0.0.1 192.168.1.0/24

8️⃣ Aplicando as Configurações

🔄 Reinicie o serviço Fail2ban para aplicar as alterações:

shell
sudo systemctl restart fail2ban

9️⃣ Verificação do Status

🔍 Verifique se o Fail2ban está funcionando corretamente:

shell
# Verificar status do serviço
sudo fail2ban-client status

# Verificar status específico do SSH
sudo fail2ban-client status sshd

Havendo erros no start do fail2ban, é possível diagnosticar:

shell
sudo fail2ban-client -d

O erro pode ser somente algum erro de sintaxe nos arquivos jail.conf e jail.local

💡 Dicas de Monitoramento:

  • Verifique os logs em /var/log/fail2ban.log
  • Monitore tentativas bloqueadas
  • Verifique IPs banidos atualmente
  • Configure alertas para tentativas de invasão

vim
### 🔒 Configurações Avançadas do Fail2ban

#### Opções de Banimento
> ⚙️ **Configuração Detalhada do SSH:**
```vim
[sshd]
enabled         = true          # Ativa a proteção
port            = ssh          # Porta do serviço
banaction       = ufw          # Integração com UFW
logpath         = %(sshd_log)s # Arquivo de log
backend         = %(sshd_backend)s # Sistema de log
maxretry        = 3            # Tentativas máximas
findtime        = 10m          # Janela de tempo
bantime         = 1h           # Duração do bloqueio

🔍 Detalhes Importantes:

  • logpath: Automaticamente definido como /var/log/auth.log no Ubuntu
  • backend: Geralmente definido como 'auto' ou 'systemd'
  • banaction: Use ufw-allports para bloquear todas as portas do IP banido

Lista de IPs Confiáveis

🛡️ Configuração de IPs Permitidos: Edite a seção [DEFAULT] no arquivo /etc/fail2ban/jail.local:

vim
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban
# will not ban a host IP found in this list. Several addresses can be
# defined using space (or comma) separator.
ignoreip = SEU_IP_FIXO_1 OUTRO_IP_FIXO

⚠️ Importante:

  • Substitua SEU_IP_FIXO_1 e OUTRO_IP_FIXO pelos IPs reais
  • Separe múltiplos IPs com espaços
  • Use notação CIDR para redes (ex: 192.168.1.0/24)

🔄 Gerenciamento do Serviço

Reinício do Serviço

🔄 Aplique as novas configurações:

shell
sudo systemctl restart fail2ban

Verificação de Status

🔍 Verificações Importantes:

1️⃣ Status do Serviço:

shell
sudo systemctl status fail2ban

2️⃣ Status da Proteção SSH:

shell
sudo fail2ban-client status sshd

🧪 Teste de Configuração

Teste de Bloqueio

🔬 Procedimento de Teste:

  1. Use uma máquina externa (não listada em ignoreip)
  2. Tente login SSH com credenciais incorretas
  3. Repita até exceder maxretry dentro do findtime
  4. Verifique se o IP foi bloqueado

Verificação de Logs

📋 Monitoramento em Tempo Real:

shell
sudo tail -f /var/log/fail2ban.log

🔍 O que Procurar nos Logs:

  • Mensagens de bloqueio de IPs
  • Tentativas de login malsucedidas
  • Padrões de ataque

Verificação do Firewall

🛡️ Confirmar Regras de Bloqueio:

shell
sudo ufw status numbered

💡 O que Verificar:

  • Nova regra de bloqueio no topo
  • Formato: [ 1] Deny IN from IP_BANIDO to any port 22
  • Regra pode variar conforme configuração do ufw.conf

Status da Proteção

📊 Verificar IPs Banidos:

shell
sudo fail2ban-client status sshd

🔍 Informações Exibidas:

  • Lista de IPs atualmente banidos
  • Contadores de tentativas
  • Status da jail SSH

🛠️ Comandos de Administração

Comandos Essenciais

⚙️ Gerenciamento do Fail2ban:

1️⃣ Status Geral:

shell
sudo fail2ban-client status

🔒 Monitoramento do SSH

📊 Verificação de Status:

shell
sudo fail2ban-client status sshd

💡 Dica: Mostra tentativas de login mal sucedidas e IPs banidos

🛡️ Gestão de Bloqueios

⚙️ Desbloquear IP Específico:

shell
sudo fail2ban-client set sshd unbanip IP_ADDRESS

⚠️ Atenção: Substitua IP_ADDRESS pelo endereço IP real

📋 Monitoramento de Logs

🔍 Logs do Fail2Ban:

shell
sudo less /var/log/fail2ban.log

💡 Conteúdo: Tentativas de invasão, bloqueios e desbloqueios

🔐 Logs de Autenticação SSH:

shell
sudo less /var/log/auth.log

💡 Conteúdo: Tentativas de login SSH e eventos de autenticação

🛡️ Proteção Integrada

🔐 Sistema de Defesa: O Fail2Ban trabalha em conjunto com o UFW para criar uma proteção robusta:

  • Monitora continuamente tentativas de login SSH
  • Utiliza o UFW para bloquear IPs que tentam ataques de força bruta
  • Fornece proteção automática contra tentativas de invasão

⚙️ Ajuste Fino

📝 Parâmetros Configuráveis:

  • bantime: Duração do bloqueio
  • findtime: Janela de monitoramento
  • maxretry: Tentativas permitidas

⚠️ Importante: Ajuste estes valores conforme suas necessidades de segurança

🔍 Sistema de Auditoria (Audit)

Visão Geral

🎯 Objetivo: Implementar um sistema robusto de auditoria para monitorar e registrar atividades críticas do sistema, incluindo chamadas de sistema e eventos de segurança.

📦 Instalação do Audit

⚙️ Instalação dos Componentes:

shell
sudo apt install -y auditd audispd-plugins

💡 Notas:

  • O serviço auditd inicia automaticamente com o sistema
  • As configurações são preservadas entre reinicializações
  • O plugin audispd permite encaminhamento de eventos

📋 Configuração de Regras

🔒 Propósito: Criar regras de auditoria para monitorar:

  • Alterações em arquivos de senhas
  • Execução de comandos privilegiados
  • Modificações em permissões de arquivos
  • Tentativas de acesso não autorizado

🔐 Monitoramento de Senhas e Usuários

🎯 Objetivos do Monitoramento:

  1. Detectar alterações não autorizadas em /etc/passwd e /etc/shadow
  2. Registrar uso dos comandos passwd e gpasswd
  3. Monitorar criação e modificação de grupos
Configuração das Regras de Senha

📝 Criação do Arquivo de Regras:

shell
sudo vim /etc/audit/rules.d/passwd.rules

⚙️ Regras de Auditoria:

vim
# Monitoramento de Arquivos de Sistema
# ===================================
# Arquivo /etc/passwd - Dados de usuários
-a always,exit -F arch=b64 -F path=/etc/passwd -F perm=wa -F auid>=1000 -F key=passwd_access

# Arquivo /etc/shadow - Senhas criptografadas
-a always,exit -F arch=b64 -F path=/etc/shadow -F perm=wa -F auid>=1000 -F key=shadow_access

# Monitoramento de Comandos de Senha
# ================================
# Comando passwd - Alteração de senhas
-a always,exit -F path=/usr/bin/passwd -F perm=x -F auid>=1000 -F auid!=unset -F key=passwd_access

# Comando gpasswd - Gerenciamento de grupos
-a always,exit -F path=/usr/bin/gpasswd -F perm=x -F auid>=1000 -F auid!=unset -F key=gpasswd_access

# Comando newgrp - Mudança de grupo
-a always,exit -F path=/usr/bin/newgrp -F perm=x -F auid>=1000 -F auid!=unset -F key=newgrp_access

💡 Explicação das Regras:

  • always,exit: Registra eventos na entrada e saída
  • auid>=1000: Aplica apenas a usuários reais (não sistema)
  • perm=x: Monitora execução do comando
  • key=: Tag para identificar eventos nos logs

🔐 Monitoramento de Privilégios Elevados

🎯 Objetivo: Auditar comandos que utilizam elevação de privilégios (sudo, su, sudoedit) para:

  • Garantir rastreabilidade de ações administrativas
  • Manter histórico de ações privilegiadas
  • Permitir investigação de incidentes
shell
sudo vim /etc/audit/rules.d/root.rules

⚙️ Regras de Auditoria de Privilégios:

vim
# Monitoramento de Comandos Privilegiados
# =====================================

# Comando su - Troca de usuário
-a always,exit -F path=/usr/bin/su -F perm=x -F auid>=1000 -F auid!=unset -F key=sudo_execution

# Comando sudo - Execução privilegiada
-a always,exit -F path=/usr/bin/sudo -F perm=x -F auid>=1000 -F auid!=unset -F key=sudo_execution

# Comando sudoedit - Edição privilegiada
-a always,exit -F path=/usr/bin/sudoedit -F perm=x -F auid>=1000 -F auid!=unset -F key=sudo_execution

# Comando doas - Alternativa ao sudo
-a always,exit -F path=/usr/bin/doas -F perm=x -F auid>=1000 -F auid!=unset -F key=sudo_execution

🔍 Detalhes do Monitoramento:

  • Registra todas as execuções de comandos privilegiados
  • Identifica o usuário real que iniciou a ação
  • Mantém log de todas as elevações de privilégio
  • Facilita auditoria de segurança e conformidade

🔒 Monitoramento de Permissões

🎯 Objetivo: Detectar e registrar:

  • Alterações em permissões de arquivos
  • Mudanças de propriedade
  • Modificações de atributos estendidos
  • Tentativas de escalação de privilégios

⚙️ Configuração das Regras:

shell
sudo vim /etc/audit/rules.d/perm.rules

📋 Regras de Auditoria de Permissões:

vim
# Monitoramento de Permissões de Arquivo (chmod)
# =========================================
# Arquitetura 64 bits
-a always,exit -F arch=b64 -S chmod -F auid>=1000 -F auid!=unset -F key=perm_mod
-a always,exit -F arch=b64 -S fchmod -F auid>=1000 -F auid!=unset -F key=perm_mod
-a always,exit -F arch=b64 -S fchmodat -F auid>=1000 -F auid!=unset -F key=perm_mod

# Arquitetura 32 bits
-a always,exit -F arch=b32 -S chmod -F auid>=1000 -F auid!=unset -F key=perm_mod
-a always,exit -F arch=b32 -S fchmod -F auid>=1000 -F auid!=unset -F key=perm_mod
-a always,exit -F arch=b32 -S fchmodat -F auid>=1000 -F auid!=unset -F key=perm_mod

# Monitoramento de Propriedade de Arquivo (chown)
# ==========================================
# Arquitetura 64 bits
-a always,exit -F arch=b64 -S chown -F auid>=1000 -F auid!=unset -F key=change_mod
-a always,exit -F arch=b64 -S fchown -F auid>=1000 -F auid!=unset -F key=change_mod
-a always,exit -F arch=b64 -S fchownat -F auid>=1000 -F auid!=unset -F key=change_mod
-a always,exit -F arch=b64 -S lchown -F auid>=1000 -F auid!=unset -F key=change_mod

# Arquitetura 32 bits
-a always,exit -F arch=b32 -S chown -F auid>=1000 -F auid!=unset -F key=change_mod
-a always,exit -F arch=b32 -S fchown -F auid>=1000 -F auid!=unset -F key=change_mod
-a always,exit -F arch=b32 -S fchownat -F auid>=1000 -F auid!=unset -F key=change_mod
-a always,exit -F arch=b32 -S lchown -F auid>=1000 -F auid!=unset -F key=change_mod

# Monitoramento de Atributos Estendidos
# ===================================
# Definição de Atributos (setxattr)
# Arquitetura 64 bits
-a always,exit -F arch=b64 -S setxattr -F auid>=1000 -F auid!=unset -F key=change_attr
-a always,exit -F arch=b64 -S lsetxattr -F auid>=1000 -F auid!=unset -F key=change_attr
-a always,exit -F arch=b64 -S fsetxattr -F auid>=1000 -F auid!=unset -F key=change_attr

# Arquitetura 32 bits
-a always,exit -F arch=b32 -S setxattr -F auid>=1000 -F auid!=unset -F key=change_attr
-a always,exit -F arch=b32 -S lsetxattr -F auid>=1000 -F auid!=unset -F key=change_attr
-a always,exit -F arch=b32 -S fsetxattr -F auid>=1000 -F auid!=unset -F key=change_attr

# Remoção de Atributos (removexattr)
# Arquitetura 64 bits
-a always,exit -F arch=b64 -S removexattr -F auid>=1000 -F auid!=unset -F key=change_attr
-a always,exit -F arch=b64 -S lremovexattr -F auid>=1000 -F auid!=unset -F key=change_attr
-a always,exit -F arch=b64 -S fremovexattr -F auid>=1000 -F auid!=unset -F key=change_attr

# Arquitetura 32 bits
-a always,exit -F arch=b32 -S removexattr -F auid>=1000 -F auid!=unset -F key=change_attr
-a always,exit -F arch=b32 -S lremovexattr -F auid>=1000 -F auid!=unset -F key=change_attr
-a always,exit -F arch=b32 -S fremovexattr -F auid>=1000 -F auid!=unset -F key=change_attr

# Monitoramento de Tentativas de Acesso
# ==================================
# Erros de Permissão (EACCES)
# Arquitetura 64 bits
-a always,exit -F arch=b64 -S creat,open,openat,open_by_handle_at,truncate,ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=unset -F key=try_access

# Arquitetura 32 bits
-a always,exit -F arch=b32 -S creat,open,openat,open_by_handle_at,truncate,ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=unset -F key=try_access

# Erros de Privilégio (EPERM)
# Arquitetura 64 bits
-a always,exit -F arch=b64 -S creat,open,openat,open_by_handle_at,truncate,ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=unset -F key=try_access

# Arquitetura 32 bits
-a always,exit -F arch=b32 -S creat,open,openat,open_by_handle_at,truncate,ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=unset -F key=try_access

🔄 Aplicação das Regras

⚙️ Atualização das Regras:

1️⃣ Limpar regras existentes:

shell
sudo auditctl -D

2️⃣ Carregar novas regras:

shell
sudo augenrules --load

3️⃣ Verificar configuração:

shell
sudo auditctl -l

💡 Dicas:

  • Execute os comandos na ordem apresentada
  • Verifique a saída de cada comando
  • Confirme se todas as regras foram carregadas
  • Monitore os logs após a aplicação

## 👥 Monitoramento de Comandos de Usuários

### 🔍 Visão Geral
> 📋 **Sistema de Auditoria:**
> O monitoramento de comandos é implementado usando duas tecnologias principais:
> - **PAM** (Pluggable Authentication Modules)
> - **auditd** (Sistema de Auditoria do Linux)

### 🛠️ Como Funciona
> 💡 **Processo de Auditoria:**
> 1. PAM fornece autenticação flexível
> 2. Módulo `pam_tty_audit` monitora entradas TTY
> 3. `auditd` registra todas as ações no terminal
> 4. Logs são armazenados em `/var/log/audit/audit.log`

### ⚙️ Configuração do PAM
> 📝 **Passo 1: Configurar Monitoramento TTY**
```shell
sudo vim /etc/pam.d/common-password

🔒 Adicionar Regra de Auditoria:

vim
session required pam_tty_audit.so disable=* enable=root log_passwd

💡 O que isso faz:

  • disable=*: Desativa auditoria para todos os usuários
  • enable=root: Ativa apenas para o usuário root
  • log_passwd: Registra tentativas de alteração de senha

📋 Configuração do Auditd

🔐 Passo 2: Configurar Regras de Auditoria Root

shell
sudo -i
echo '-a exit,always -F arch=b64 -F euid=0 -S execve' >> /etc/audit/rules.d/audit.rules
echo '-a exit,always -F arch=b32 -F euid=0 -S execve' >> /etc/audit/rules.d/audit.rules

🔍 Explicação das Regras:

  • Monitora todos os comandos executados como root
  • Abrange arquiteturas 32 e 64 bits
  • Registra chamadas do sistema execve

🔄 Aplicação das Configurações

⚙️ Passo 3: Ativar as Mudanças

shell
sudo systemctl restart auditd

⚠️ Importante:

  • Verifique os logs após o reinício
  • Confirme se os comandos estão sendo registrados
  • Monitore o tamanho do arquivo de log

## Contas de Usuários

### Adoção de senha randomizada para o “root”
Esta senha será definida através da funcionalidade de criação de senhas randomizadas da aplicação KeePass.
Por padrão, a PMDF terá uma única senha complexa de root para todo o parque Linux.

## Limitar a quantidade de TTYs

### 📝 O que são TTYs?
> 💡 **Definição:**
> TTY (Teletypewriter) são terminais virtuais de console que:
> - Fornecem acesso via linha de comando
> - Funcionam independentemente da interface gráfica
> - Permitem acesso mesmo em caso de falha do sistema gráfico

> 🔍 **Características:**
> - Acesso direto ao sistema
> - Múltiplas sessões simultâneas
> - Interface textual eficiente
> - Recurso essencial para administração

### 🛠️ Configuração de TTYs
> ⚙️ **Objetivo:** Otimizar recursos limitando o número de terminais virtuais através do systemd-logind

#### 📝 Passo 1: Configuração do systemd
> 🔧 **Editar Configuração:**
```shell
sudo vim /etc/systemd/logind.conf

🔍 Localizar Diretiva:

  • Procure por NAutoVTs
  • Linha padrão: #NAutoVTs=6
  • Geralmente comentada com #
vim
# Antes:
#NAutoVTs=6

# Depois:
NAutoVTs=2  # Reduzido para melhor controle

⚠️ Considerações de Segurança:

  • Manter no mínimo 2 TTYs para redundância
  • TTY1: Interface gráfica (se habilitada)
  • TTY2: Terminal de emergência
  • Redução reduz superfície de ataque

📝 Passo 2: Aplicação das Configurações

🔄 Reiniciar Serviço:

shell
sudo systemctl restart systemd-logind.service

🖥️ Passo 3: Modo de Inicialização

⚙️ Configurar Modo Texto:

shell
sudo systemctl set-default multi-user.target

🔍 Verificar Configuração:

shell
sudo systemctl get-default

💡 Resultado Esperado: multi-user.target

🔄 Aplicação Imediata

Ativar Sem Reiniciar:

shell
# Definir e aplicar imediatamente
sudo systemctl set-default multi-user.target
sudo systemctl isolate multi-user.target

📋 Verificações Finais:

  1. Confirmar número de TTYs ativos
  2. Testar acesso aos terminais disponíveis
  3. Verificar modo de inicialização
shell
sudo systemctl set-default multi-user.target
sudo systemctl isolate multi-user.target

Alternativamente, uma reinicialização completa do sistema também aplicará as mudanças.

Implantação e restrição do comando “sudo” para os administradores

Para uma correta e segura administração do sistema Linux é preciso a adoção do gerenciador de elevação de permissões para contas de usuários comuns, chamado de sudo.

Executar o comando visudo e incluir a seguinte linha no final do arquivo:

shell
sudo visudo
vim
# Grupo local de administradores com restrições
%<nome-do-grupo> ALL=(ALL) NOPASSWD: ALL, \
    !/usr/bin/su, \
    !/bin/su, \
    !/usr/bin/passwd root, \
    !/bin/passwd root, \
    !/usr/sbin/visudo, \
    !/usr/bin/vim /etc/sudoers, \
    !/usr/bin/nano /etc/sudoers, \
    !/bin/nano /etc/sudoers, \
    !/usr/bin/vim /etc/passwd, \
    !/usr/bin/vim /etc/shadow

💡 Dicas:

  • Defina o grupo de administradores antes de aplicar a configuração.
  • O grupo pode conter usuários locais e do AD.
  • Documente e revise periodicamente os membros e permissões.

🔐 Proteção Adicional

🛡️ Evite bypass de restrições:

  • Comente inclusões em /etc/sudoers.d/ usando ## para evitar que administradores contornem as regras principais.

🌐 Integração com Active Directory

📝 Exemplo para grupo do AD:

vim
%domínio\\grupo ALL=(ALL) NOPASSWD: ALL, \
    !/usr/bin/su, \
    !/bin/su, \
    !/usr/bin/passwd root, \
    !/bin/passwd root, \
    !/usr/sbin/visudo, \
    !/usr/bin/vim /etc/sudoers, \
    !/usr/bin/nano /etc/sudoers, \
    !/bin/nano /etc/sudoers, \
    !/usr/bin/vim /etc/passwd, \
    !/usr/bin/vim /etc/shadow

Um exemplo prático. Foi criado um grupo chamado Linux_Admins no AD. Membros desse grupo podem executar apenas os seguintes comandos:

vim
%Linux_Admins ALL=(ALL) /usr/bin/apt update, /usr/bin/apt upgrade, /usr/sbin/reboot

🔒 Gerenciamento de Permissões SETUID

⚠️ Riscos de Segurança

🛡️ Contexto: Programas com bit SETUID, especialmente como root:

  • Executam com privilégios elevados
  • Representam risco significativo de segurança
  • Podem ser explorados para escalação de privilégios
  • Requerem gerenciamento cuidadoso

🛠️ Estratégia de Mitigação

📋 Abordagem:

  1. Minimizar programas com SETUID
  2. Manter apenas os essenciais (ex: passwd)
  3. Auditar regularmente permissões
  4. Documentar exceções necessárias

🔍 Auditoria de SETUID

📊 Identificação: Localizar programas com SETUID root:

shell
# Encontrar e salvar lista de programas SETUID
sudo find / -user root -perm -4000 > setuid-arquivos.txt 2> /dev/null

# Visualizar resultado
cat setuid-arquivos.txt | sort

📊 Monitoramento Contínuo

🔍 Verificações Regulares:

shell
# Script de verificação diária
sudo find / -type f -perm -4000 -print0 | xargs -0 ls -l

📋 O que Monitorar:

  • Novos programas SETUID
  • Alterações em permissões
  • Programas não autorizados
  • Modificações suspeitas

⚙️ Boas Práticas

🛡️ Recomendações:

  1. Manter lista base de programas SETUID aprovados
  2. Revisar permissões periodicamente
  3. Documentar exceções necessárias
  4. Implementar alertas para mudanças
  5. Usar controle de versão para tracking

🌐 Hardening do TCP/IP

📋 Visão Geral

🔒 Contexto de Segurança: O TCP/IP, embora robusto e resiliente, requer configurações adicionais de segurança para:

  • Prevenir ataques de rede
  • Mitigar vetores de ataque comuns
  • Proteger contra exploração de vulnerabilidades
  • Fortalecer a segurança da rede

⚙️ Configurações do Kernel

📍 Localização: /proc/sys/net/ipv4/

⚠️ Importante: Alterações em /proc são temporárias (até reinicialização)

🛡️ Desativação do IP Forwarding

🎯 Objetivo: Prevenir transmissão não autorizada de pacotes entre interfaces

⚙️ Configuração:

shell
sudo -i
echo 0 > /proc/sys/net/ipv4/ip_forward

💡 Benefícios:

  • Reduz superfície de ataque
  • Previne pivoteamento de rede
  • Aumenta isolamento de interfaces

🚫 Proteção contra ICMP Redirects

🎯 Objetivo: Prevenir manipulação maliciosa de rotas de rede

⚙️ Configuração:

shell
sudo -i
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

🛡️ Proteção Contra:

  • Determinação de rotas por atacantes
  • Man-in-the-middle attacks
  • Redirecionamento de tráfego

🌊 Proteção contra SYN Flood

🎯 Objetivo: Mitigar ataques DoS baseados em TCP

⚙️ Configuração:

shell
sudo -i
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

🛡️ Benefícios:

  • Previne ataques de SYN flood
  • Protege contra DoS
  • Mantém disponibilidade do serviço

💡 Como Funciona:

  1. Monitora conexões TCP incompletas
  2. Utiliza SYN cookies quando necessário
  3. Previne esgotamento de recursos

⚠️ Persistência das Configurações

📝 Importante Saber:

  • Alterações em /proc são temporárias
  • Reinicialização reverte as mudanças
  • Necessária configuração permanente
  • Útil para testes iniciais

🔒 Configuração Permanente

🎯 Objetivo: Tornar as configurações de segurança permanentes

📝 Passo 1: Criar Arquivo de Configuração

⚙️ Local: /etc/sysctl.d/99-custom-network.conf

shell
sudo vim /etc/sysctl.d/99-custom-network.conf

📋 Passo 2: Adicionar Configurações

🛡️ Configurações de Segurança:

vim
# Configurações de Segurança de Rede
# =================================

# IP Forwarding
# ------------
net.ipv4.ip_forward = 0                      # Desativa encaminhamento de pacotes

# ICMP Security
# ------------
net.ipv4.conf.all.accept_redirects = 0       # Bloqueia redirecionamentos ICMP
net.ipv4.conf.default.accept_redirects = 0   # Aplica para novas interfaces

# Source Routing
# -------------
net.ipv4.conf.all.accept_source_route = 0

# Você também pode querer configurar isso para a interface padrão
# net.ipv4.conf.default.accept_source_route = 0

# Habilitar TCP SYN Cookies (proteção contra SYN flood attacks)
net.ipv4.tcp_syncookies = 1
  1. Aplicar as configurações:
shell
sudo sysctl --system

Limitar a quantidade de logins por usuário - (PENDENTE)

Definir

Adoção de regras para remoção de contas não autenticadas por “x” meses - (PENDENTE)

Definir

Adoção de tempo para expiração de senhas - (PENDENTE)

Definir

Shell Security

Incluir texto de alerta em /etc/motd

A adoção de banners na autenticação de usuários foi documentada no item “Configuração reforçada do serviço remoto SSH”, mas este item é a definição de alerta após o usuário efetuar um login com sucesso no shell Linux. Com isso, iremos utilizar o texto de alerta atualmente já implementado na corporação.

Para isso, editar o arquivo /etc/motd e incluir o texto de alerta da corporação

Utilizando o figlet

Instalar o figlet e lolcat

shell
sudo apt install figlet lolcat
  • Verificando fontes
shell
cd /usr/share/figlet/
3️⃣ Configuração da Mensagem de Boas-Vindas

📝 Editar Arquivo:

shell
sudo vim /etc/bash.bashrc

⚙️ Adicionar ao Final do Arquivo:

shell
# Banner Institucional Colorido
figlet -w 120 -f standard Intranet | /usr/games/lolcat

# Mensagens de Segurança
echo " "
echo "########################################################"
echo " "
echo -e " * Servidor da PMDF * "
echo -e " * ACESSO RESTRITO * "
echo -e " * Todas as ações são monitoradas * "
echo " "
echo "########################################################"
echo " "
echo "📌 Para verificar seu IP digite [ hostname -I ]"
echo " "

🧹 Limpeza de Mensagens Padrão

🎯 Objetivo: Remover mensagens genéricas do sistema para manter apenas o banner personalizado

⚙️ Execução:

shell
# Desativar scripts de MOTD padrão
cd /etc/update-motd.d/
sudo chmod -x *

# Limpar mensagens de issue
sudo echo " " > /etc/issue
sudo echo " " > /etc/issue.net

💡 O que isso faz:

  • Remove scripts de MOTD dinâmicos
  • Limpa mensagens de pré-login
  • Mantém apenas nossa mensagem personalizada

⏲️ Configuração de Timeout Automático

🎯 Objetivo: Implementar logout automático para sessões inativas por motivos de segurança

1️⃣ Configuração da Variável TMOUT

📝 Criar Arquivo de Configuração:

shell
sudo vim /etc/profile.d/tmout.sh

⚙️ Definir Timeout:

shell
# Configurar logout automático após 10 minutos de inatividade
export TMOUT=600

💡 Detalhes:

  • TMOUT é medido em segundos
  • 600 segundos = 10 minutos
  • Afeta todas as sessões de shell
  • Protege contra sessões esquecidas

📅 Registro Temporal do Histórico de Comandos

🎯 Objetivo: Adicionar timestamps ao histórico de comandos para melhor auditoria

1️⃣ Configuração do HISTTIMEFORMAT

📝 Criar Arquivo de Configuração:

shell
sudo vim /etc/profile.d/histtimeformat.sh

⚙️ Definir Formato:

shell
# Adicionar data e hora ao histórico de comandos
export HISTTIMEFORMAT='%d/%m/%y %T '

💡 Explicação do Formato:

  • %d/%m/%y: Data no formato DD/MM/AA
  • %T: Hora no formato HH:MM:SS
  • Facilita auditoria e rastreamento
  • Aplica-se a todos os usuários

Adequação da variável PS1

Esta variável é utilizada no Shell Bash para alterar a “cara” do shell. É importante tal alteração para identificar a máquina ao qual o administrador está gerenciando, mitigando possíveis equívocos.

  1. Editar o arquivo /etc/bash.bashrc e incluir o seguinte conteúdo:
shell
sudo vim /etc/bash.bashrc

Alterar abaixo da linha if ! [ -n "${SUDO_USER}" -a -n "${SUDO_PS1}" ]; then deixando exatamente assim:

vim
# Prompt personalizado corporativo
PS1='\[\033[01;32m\]\u \[\033[0m\]@ \[\033[01;31m\]\h \[\033[01;33m\]\w \[\033[0m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

template-030

🛡️ Configuração para o usuário root

📝 Editar arquivo do root:

shell
sudo vim /root/.bashrc

✏️ Comentar as linhas de PS1 locais:

vim
#if [ "$color_prompt" = yes ]; then
# PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '#else
# PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
#fi

template-031

ℹ️ Observação:

  • As cores e o nome da máquina devem seguir o padrão definido pela corporação.

🎯 Preparação da Template Final

📋 Checklist de Finalização

⚠️ Atenção: Esta é a última etapa do processo!

Neste processo iremos “selar” a máquina construída com todas as ações impostas neste documento e criar uma template no vCenter (ProxMox) para uso geral de todas as futuras máquinas com sistema operacional Ubuntu Server 24.04.2 LTS da corporação.

As ações finais a serem efetuadas para finalmente criar a template são:

🌐 Limpeza de Configurações de Rede

🎯 Objetivo: Remover todas as configurações específicas de rede para permitir personalização nas novas instâncias

1️⃣ Identificação das Interfaces

🔍 Verificar Configuração Atual:

shell
# Listar interfaces e IPs
ip -4 -br a

# Verificar configurações netplan
ls -l /etc/netplan/

2️⃣ Remoção de Configurações

⚙️ Limpar Configurações:

shell
# Remover IPs das interfaces
for iface in $(ip -o -4 addr show | awk '{print $2}'); do
    sudo ip addr flush dev $iface
done

# Limpar netplan
sudo rm -f /etc/netplan/*.yaml

# Criar configuração base
sudo tee /etc/netplan/01-netcfg.yaml > /dev/null <<EOL
network:
  version: 2
  renderer: networkd
EOL

💡 Exemplo Prático:

shell
# Exemplo para interface específica
sudo ip addr del 192.168.0.9/24 dev enp0s3

🧹 Limpeza do Sistema de Arquivos

🎯 Objetivo: Remover arquivos temporários, caches e logs para criar uma imagem limpa

1️⃣ Limpeza de Pacotes e Cache

📦 Limpar Sistema de Pacotes:

shell
# Remover pacotes não necessários
sudo apt --purge autoremove -y

# Limpar cache do apt
sudo apt clean

# Verificar espaço recuperado
df -h /var/cache/apt/archives/

2️⃣ Limpeza de Logs

📝 Gerenciar Arquivos de Log:

shell
# Backup de logs importantes (opcional)
sudo mkdir -p /backup/logs
sudo cp /var/log/auth.log /backup/logs/

# Limpar diretório de logs
sudo find /var/log -type f -delete
sudo find /var/log -type f -name '*.gz' -delete
sudo find /var/log -type f -name '*.1' -delete

# Criar arquivos de log vazios essenciais
sudo touch /var/log/auth.log
sudo touch /var/log/syslog

3️⃣ Limpeza de Arquivos Temporários

🗑️ Limpar Diretórios Temp:

shell
# Limpar /tmp
sudo find /tmp -type f -delete
sudo find /tmp -mindepth 1 -type d -empty -delete

# Limpar outros diretórios temporários
sudo find /var/tmp -type f -delete
sudo find /var/cache -type f -delete

# Verificar limpeza
sudo du -sh /tmp /var/tmp /var/cache

🔐 Reset de Segurança

🎯 Objetivo: Remover chaves e identificadores únicos do sistema

1️⃣ Limpeza de Chaves SSH

🔑 Remover Chaves do Host:

shell
# Remover chaves existentes
sudo rm -f /etc/ssh/ssh_host_*

# Preparar para regeneração na próxima inicialização
sudo dpkg-reconfigure openssh-server

2️⃣ Reset de Identificadores do Sistema

🆔 Limpar IDs Únicos:

shell
# Limpar machine-id
sudo truncate -s 0 /etc/machine-id
sudo rm -f /var/lib/dbus/machine-id
sudo ln -s /etc/machine-id /var/lib/dbus/machine-id

# Verificar limpeza
test -s /etc/machine-id && echo "machine-id não está vazio!"

3️⃣ Limpeza de Histórico

🗑️ Remover Histórico de Comandos:

shell
# Limpar histórico de todos os usuários
sudo find /home -type f -name '.bash_history' -delete
sudo find /root -type f -name '.bash_history' -delete

# Limpar histórico atual
history -c

# Limpar outros arquivos de histórico
sudo find /home -type f -name '.*_history' -delete

✅ Verificação Final

📋 Checklist de Validação:

shell
# Verificar serviços essenciais
systemctl status ssh

# Verificar sistema de arquivos
df -h

# Verificar processos ativos
ps aux

# Verificar portas abertas
ss -tulpn

📝 Documentação

📘 Notas para Administrador:

  1. Mantenha registro das personalizações feitas
  2. Documente quaisquer desvios do padrão
  3. Atualize a documentação da template
  4. Registre a data de criação da imagem
  5. Defina ciclo de atualização da template

🔄 Próximos Passos

Ações Finais:

  1. Desligar o sistema limpo
  2. Criar snapshot de segurança
  3. Converter em template
  4. Testar criação de clone
  5. Validar funcionalidades base