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
/bootnã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ção | Tamanho | Volume Group | Descrição |
|---|---|---|---|
/ | 3 GB | vg-pm-root | Sistema Raiz |
swap | 2 GB | swap | Memória Virtual |
/tmp | 512 MB | vg-pm-tmp | Arquivos Temporários |
/home | 2 GB | vg-pm-home | Diretórios dos Usuários |
/usr | 15 GB | vg-pm-usr | Programas e Bibliotecas |
/var | 34,5 GB | vg-pm-var | Dados 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
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 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 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 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ção
6️⃣ Configuração de Rede
🌐 Na tela Network configuration, optaremos por configurar a rede posteriormente. Selecione Continue without network.

7️⃣ Configuração de Proxy
🔄 Em Proxy configuration, mantenha o campo em branco e clique em Done.
Configuraçã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 Ubuntu
9️⃣ Configuração de Armazenamento
💽 No Guided storage configuration, siga estes passos:
- Selecione Custom storage layout
- Clique em Done
- Na tela Storage configuration:
- Selecione free space
- Escolha Add GPT Partition
- Pressione Enter
Tela 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 /boot
1️⃣1️⃣ Configuração do Sistema de Arquivos
⚙️ A partição
/bootutilizará o sistema de arquivos ext4 (não LVM).Passos:
- Clique em Back para retornar à tela inicial
- Selecione Use an entire disk
- Escolha Set up this disk as an LVM group
Configuração do LVM
1️⃣2️⃣ Desmontagem da Partição Raiz
🔧 Na seção FILE SYSTEM SUMMARY:
- Localize a partição /
- Clique sobre ela
- Selecione Unmount
Desmontagem da partição raiz
1️⃣3️⃣ Remoção do Volume Lógico
🗑️ Para remover o volume lógico padrão:
- Localize ubuntu-lv
- Clique sobre ele
- Selecione Delete
- Confirme selecionando Delete novamente
- Pressione Enter
Remoção do volume lógico padrão
- Selecionar o Volume Group ubuntu-vg (new) para renomear clicando em Edit.

1️⃣5️⃣ Configuração do Volume Group
✏️ Configure o nome do Volume Group:
- Digite vg-pm
- Clique em Save
Salvando 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:
- Clique em free space
- Selecione Create Logical Volume
Preparação para criação dos volumes lógicos
1️⃣7️⃣ Configuração do Volume Root
💾 Configure o volume raiz:
- Name:
lv-root- Size:
3G- Format:
ext4- Mount point:
/- Clique em Create
Configuração do volume lógico raiz
1️⃣8️⃣ Criação dos Volumes Adicionais
📊 Para os próximos volumes:
- Selecione free space
- Crie a partição swap
- Em Format, selecione swap
💡 Dica: Siga a tabela de particionamento apresentada anteriormente
Criação dos volumes lógicos adicionais
1️⃣9️⃣ Continuação do Particionamento
🔄 Continue criando as partições restantes:
/tmp/home/usr/var💡 Dica: Consulte a tabela de tamanhos fornecida anteriormente para cada partição
📊 Tabela de Particionamento
| Partição | Tamanho | Nome do VG-LV | Propósito |
|---|---|---|---|
/ | 3 GB | vg-pm-root | Sistema Base |
swap | 2 GB | swap | Memória Virtual |
/tmp | 512 MB | vg-pm-tmp | Arquivos Temporários |
/home | 2 GB | vg-pm-home | Diretórios dos Usuários |
/usr | 15 GB | vg-pm-usr | Programas e Bibliotecas |
/var | 34,5 GB | vg-pm-var | Logs 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 particionamento
2️⃣1️⃣ Confirmação e Formatação
⚠️ Atenção:
- Clique em Done
- Uma mensagem de confirmação aparecerá
- Clique em Continue para prosseguir com a formatação
💡 Dica: Esta ação é irreversível e apagará todos os dados do disco

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 sistema
2️⃣3️⃣ Ubuntu Pro
🔄 Na tela do Ubuntu Pro:
- Mantenha a opção padrão (Skip)
- Clique em Continue
💡 Dica: A configuração do Ubuntu Pro pode ser feita posteriormente, se necessário
Tela de configuração do Ubuntu Pro
2️⃣4️⃣ Configuração SSH
🔒 Na tela SSH configuration:
- Marque a opção Install OpenSSH server
- Clique em Done
💡 Dica: O SSH permitirá acesso remoto seguro ao servidor
Configuraçã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 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:
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:
ip a s
Exemplo: 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:
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á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:
# Validar sintaxe do Netplan
sudo netplan try
# Aplicar configurações
sudo netplan apply⚠️ Importante:
netplan trytesta 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
# Modificar owners
sudo chown root:root /etc/netplan/50-cloud-init.yaml
# Modificar permissões
sudo chmod 600 /etc/netplan/50-cloud-init.yaml5️⃣ Verificação do Estado
🔍 Validar Configuração:
# Verificar endereços IPv4
ip -4 -br a
# Testar conectividade
ping -c 4 gateway.local
Confirmaçã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:
# 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:
# 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çadohtop: Monitor de sistema interativotmux: Multiplexador de terminalnet-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:
# 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
# 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:
# 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:
- Sempre verifique dependências
- Faça backup de configurações
- Use
--dry-runpara testar- Mantenha registro de alterações
- 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
# Verificar espaço em disco
df -h
# Verificar repositórios configurados
cat /etc/apt/sources.list2️⃣ Atualização do Sistema
# 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íveisapt upgrade -y: Instala as atualizações disponíveis sem solicitar confirmaçãoapt 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
# 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-upgrades2️⃣ Configuração do Comportamento
⚙️ Ajuste das Configurações:
# 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
🛡️ 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:
# Arquivo de configuração
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades📝 Exemplo de Configuração:
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:
Kernel (
linux-*):
- Atualização manual planejada
- Teste em ambiente de homologação
- Janela de manutenção definida
Serviços Críticos:
- Avaliação de impacto necessária
- Backup antes da atualização
- Plano de rollback documentado
Serviços Corporativos:
- Coordenação com equipe de infraestrutura
- Notificação prévia aos usuários
- Monitoramento pós-atualização
🔍 Monitoramento:
# 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:
sudo vim /etc/resolv.conf⚙️ Configuração Recomendada:
# 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âmetro Valor Propósito rotate - Balanceamento entre servidores timeout 1 Timeout de consulta em segundos attempts 2 Tentativas antes de falhar ndots 2 Pontos para consulta qualificada
2️⃣ Validação da Configuração
# 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:
DNS Interno (Primário)
- Microsoft Active Directory
- Resolução de nomes corporativos
- Gerenciamento centralizado
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:
- Edite o arquivo de configuração de montagem:
sudo vim /etc/fstab
- Localize a linha da partição
/tmp- Adicione a opção
noexecpara impedir execução de arquivos💡 Dica: A opção
noexecimpede a execução de qualquer arquivo binário ou script no diretório
sudo vim /etc/fstab📝 Adicione ou modifique a linha da partição
/tmp:
/tmp ext4 defaults,noexec 0 1Aplicando as Alterações
🔄 Siga os passos abaixo para aplicar as mudanças:
1️⃣ Recarregue o daemon do systemd:
sudo systemctl daemon-reload2️⃣ Remonte a partição /tmp com as novas configurações:
sudo mount -o remount /tmp3️⃣ Verifique se as alterações foram aplicadas:
sudo mount | grep /tmp💡 Dica: O comando acima deve mostrar a opção
noexecna saída
🛡️ Proteção do Diretório Home
Bloqueio de Execuções em /home
⚠️ Contexto de Segurança: O diretório
/homeconté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:
sudo vim /etc/fstab📝 Adicione ou modifique a linha da partição
/home:
/home ext4 defaults,nodev,nosuid 0 1💡 Explicação das opções:
nodev: Impede a criação de dispositivos especiaisnosuid: Desabilita bits SUID/SGID para prevenir escalação de privilégiosAplicando as Alterações
Aplicando as Configurações do /home
🔄 Execute os seguintes comandos:
1️⃣ Recarregue o daemon do systemd:
sudo systemctl daemon-reload2️⃣ Verifique a montagem do /home:
sudo mount | grep /home💡 Dica: Verifique se as opções
nodevenosuidaparecem na saída
🛡️ Proteção do Diretório /var
Bloqueio de Execuções em /var
⚠️ Contexto de Segurança: O diretório
/varconté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:
sudo vim /etc/fstab📝 Adicione ou modifique a linha da partição
/var:
/var ext4 defaults,nodev,nosuid 0 1Aplicando as Configurações
🔄 Execute os comandos:
1️⃣ Recarregue o daemon do systemd:
sudo systemctl daemon-reload2️⃣ Verifique a montagem do /var:
sudo mount | grep /var💡 Dica: Confirme se as opções
nodevenosuidestã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:
sudo apt install libpam-pwquality libpwquality-common libpwquality1💡 Componentes instalados:
libpam-pwquality: Módulo PAM para políticas de senhalibpwquality-common: Arquivos comuns da bibliotecalibpwquality1: Biblioteca principal
2️⃣ Configuração das Políticas de Senha
⚙️ Configure as regras de complexidade de senha:
sudo vim /etc/security/pwquality.conf📝 Adicione as seguintes políticas:
# 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:
sudo sed -i 's/nullok*//g' /etc/pam.d/common-auth⚠️ Importante: Este comando remove a opção
nullokdo 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:
sudo vim /etc/ssh/sshd_config📝 Adicione as seguintes configurações:
# 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:
- A lista
AllowUsersdeve ser configurada conforme necessidadePasswordAuthenticationestá desativado para maior segurança- 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:
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:
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:
sudo systemctl status fail2ban✅ O que verificar:
- Status deve mostrar: active (running)
- Pressione
qpara 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:
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:
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
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
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:
sudo ufw statusVisualização Detalhada:
sudo ufw status verbose💡 Dica: A opção
verbosemostra 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ê
.confprimeiro, depois.local
🛡️ Proteção Contra Atualizações: Crie uma cópia local do arquivo de configuração:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local⚠️ Importante: Sempre faça alterações no arquivo
.localpara evitar que atualizações do sistema sobrescrevam suas configurações
2️⃣ Configuração da Proteção SSH
📝 Edite o arquivo de configuração local:
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
/sshdno vim para encontrar rapidamente a seção
3️⃣ Configuração da Jail SSH
⚙️ Adicione ou modifique a seguinte configuração:
[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çãoport: Porta(s) monitorada(s)filter: Padrão de detecção de tentativasmaxretry: Tentativas antes do bloqueiofindtime: Período para contar tentativasbantime: Duração do bloqueioignoreip: IPs confiáveis
4️⃣ Configuração da Porta SSH
🔌 Configuração da Porta:
# 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:
banaction = ufw⚙️ Como Funciona:
- Fail2ban usa regras definidas em
/etc/fail2ban/action.d/ufw.conf- Cria regras de bloqueio automaticamente no UFW
- Bloqueia apenas as portas específicas configuradas
6️⃣ Ajuste Fino dos Parâmetros
⚡ Parâmetros Recomendados:
# 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âmetro Descrição Valores Sugeridos bantime Duração do bloqueio 1h (1 hora), 1d (1 dia) findtime Janela de monitoramento 10m (10 min), 30m (30 min) maxretry Tentativas permitidas 3-5 tentativas
7️⃣ Exemplo de Configuração Completa
📝 Configuração Recomendada do SSH:
[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/248️⃣ Aplicando as Configurações
🔄 Reinicie o serviço Fail2ban para aplicar as alterações:
sudo systemctl restart fail2ban9️⃣ Verificação do Status
🔍 Verifique se o Fail2ban está funcionando corretamente:
# Verificar status do serviço
sudo fail2ban-client status
# Verificar status específico do SSH
sudo fail2ban-client status sshdHavendo erros no start do fail2ban, é possível diagnosticar:
sudo fail2ban-client -dO 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
### 🔒 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.logno Ubuntubackend: Geralmente definido como 'auto' ou 'systemd'banaction: Useufw-allportspara 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:
[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_1eOUTRO_IP_FIXOpelos 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:
sudo systemctl restart fail2banVerificação de Status
🔍 Verificações Importantes:
1️⃣ Status do Serviço:
sudo systemctl status fail2ban2️⃣ Status da Proteção SSH:
sudo fail2ban-client status sshd🧪 Teste de Configuração
Teste de Bloqueio
🔬 Procedimento de Teste:
- Use uma máquina externa (não listada em
ignoreip) - Tente login SSH com credenciais incorretas
- Repita até exceder
maxretrydentro dofindtime - Verifique se o IP foi bloqueado
Verificação de Logs
📋 Monitoramento em Tempo Real:
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:
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:
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:
sudo fail2ban-client status🔒 Monitoramento do SSH
📊 Verificação de Status:
sudo fail2ban-client status sshd💡 Dica: Mostra tentativas de login mal sucedidas e IPs banidos
🛡️ Gestão de Bloqueios
⚙️ Desbloquear IP Específico:
sudo fail2ban-client set sshd unbanip IP_ADDRESS⚠️ Atenção: Substitua
IP_ADDRESSpelo endereço IP real
📋 Monitoramento de Logs
🔍 Logs do Fail2Ban:
sudo less /var/log/fail2ban.log💡 Conteúdo: Tentativas de invasão, bloqueios e desbloqueios
🔐 Logs de Autenticação SSH:
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 bloqueiofindtime: Janela de monitoramentomaxretry: 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:
sudo apt install -y auditd audispd-plugins💡 Notas:
- O serviço
auditdinicia automaticamente com o sistema- As configurações são preservadas entre reinicializações
- O plugin
audispdpermite 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:
- Detectar alterações não autorizadas em
/etc/passwde/etc/shadow- Registrar uso dos comandos
passwdegpasswd- Monitorar criação e modificação de grupos
Configuração das Regras de Senha
📝 Criação do Arquivo de Regras:
sudo vim /etc/audit/rules.d/passwd.rules⚙️ Regras de Auditoria:
# 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ídaauid>=1000: Aplica apenas a usuários reais (não sistema)perm=x: Monitora execução do comandokey=: 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
sudo vim /etc/audit/rules.d/root.rules⚙️ Regras de Auditoria de Privilégios:
# 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:
sudo vim /etc/audit/rules.d/perm.rules📋 Regras de Auditoria de Permissões:
# 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:
sudo auditctl -D2️⃣ Carregar novas regras:
sudo augenrules --load3️⃣ Verificar configuração:
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:
session required pam_tty_audit.so disable=* enable=root log_passwd💡 O que isso faz:
disable=*: Desativa auditoria para todos os usuáriosenable=root: Ativa apenas para o usuário rootlog_passwd: Registra tentativas de alteração de senha
📋 Configuração do Auditd
🔐 Passo 2: Configurar Regras de Auditoria Root
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
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
#
# 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:
sudo systemctl restart systemd-logind.service🖥️ Passo 3: Modo de Inicialização
⚙️ Configurar Modo Texto:
sudo systemctl set-default multi-user.target🔍 Verificar Configuração:
sudo systemctl get-default💡 Resultado Esperado:
multi-user.target
🔄 Aplicação Imediata
⚡ Ativar Sem Reiniciar:
# Definir e aplicar imediatamente
sudo systemctl set-default multi-user.target
sudo systemctl isolate multi-user.target📋 Verificações Finais:
- Confirmar número de TTYs ativos
- Testar acesso aos terminais disponíveis
- Verificar modo de inicialização
sudo systemctl set-default multi-user.target
sudo systemctl isolate multi-user.targetAlternativamente, 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:
sudo visudo# 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:
%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/shadowUm exemplo prático. Foi criado um grupo chamado Linux_Admins no AD. Membros desse grupo podem executar apenas os seguintes comandos:
%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:
- Minimizar programas com SETUID
- Manter apenas os essenciais (ex:
passwd)- Auditar regularmente permissões
- Documentar exceções necessárias
🔍 Auditoria de SETUID
📊 Identificação: Localizar programas com SETUID root:
# 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:
- Manter lista base de programas SETUID aprovados
- Revisar permissões periodicamente
- Documentar exceções necessárias
- Implementar alertas para mudanças
- 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
/procsão temporárias (até reinicialização)
🛡️ Desativação do IP Forwarding
🎯 Objetivo: Prevenir transmissão não autorizada de pacotes entre interfaces
⚙️ Configuração:
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:
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:
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:
- Monitora conexões TCP incompletas
- Utiliza SYN cookies quando necessário
- Previne esgotamento de recursos
⚠️ Persistência das Configurações
📝 Importante Saber:
- Alterações em
/procsã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
sudo vim /etc/sysctl.d/99-custom-network.conf📋 Passo 2: Adicionar Configurações
🛡️ Configurações de Segurança:
# 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- Aplicar as configurações:
sudo sysctl --systemLimitar 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
sudo apt install figlet lolcat- Verificando fontes
cd /usr/share/figlet/3️⃣ Configuração da Mensagem de Boas-Vindas
📝 Editar Arquivo:
sudo vim /etc/bash.bashrc⚙️ Adicionar ao Final do Arquivo:
# 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:
# 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:
sudo vim /etc/profile.d/tmout.sh⚙️ Definir Timeout:
# 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:
sudo vim /etc/profile.d/histtimeformat.sh⚙️ Definir Formato:
# 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.
- Editar o arquivo
/etc/bash.bashrce incluir o seguinte conteúdo:
sudo vim /etc/bash.bashrcAlterar abaixo da linha if ! [ -n "${SUDO_USER}" -a -n "${SUDO_PS1}" ]; then deixando exatamente assim:
# 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
🛡️ Configuração para o usuário root
📝 Editar arquivo do root:
sudo vim /root/.bashrc✏️ Comentar as linhas de PS1 locais:
#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
ℹ️ 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:
# 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:
# 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:
# 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:
# 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:
# 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/syslog3️⃣ Limpeza de Arquivos Temporários
🗑️ Limpar Diretórios Temp:
# 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:
# Remover chaves existentes
sudo rm -f /etc/ssh/ssh_host_*
# Preparar para regeneração na próxima inicialização
sudo dpkg-reconfigure openssh-server2️⃣ Reset de Identificadores do Sistema
🆔 Limpar IDs Únicos:
# 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:
# 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:
# 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:
- Mantenha registro das personalizações feitas
- Documente quaisquer desvios do padrão
- Atualize a documentação da template
- Registre a data de criação da imagem
- Defina ciclo de atualização da template
🔄 Próximos Passos
⚡ Ações Finais:
- Desligar o sistema limpo
- Criar snapshot de segurança
- Converter em template
- Testar criação de clone
- Validar funcionalidades base