Script profissional de configuração automatizada para servidores Linux em ambiente de produção
Automatize segurança, monitoramento e backup com um único script interativo, seguindo as melhores práticas da indústria.
O script oferece uma solução completa de hardening e configuração de servidor com as seguintes caracterÃsticas:
- Interface Interativa: Menus coloridos e intuitivos com navegação fácil entre as diferentes seções de configuração
- Valores Padrão Inteligentes: Todas as configurações possuem valores padrão recomendados baseados em padrões de mercado
- Personalização Completa: Cada parâmetro pode ser ajustado conforme as necessidades especÃficas do ambiente
- Backup Automático: Cria backup de todos os arquivos de configuração antes de modificá-los
- Logging Detalhado: Registra todas as operações executadas com timestamps para auditoria
- Validação de Configurações: Verifica a sintaxe e valida as configurações antes de aplicá-las
- Suporte Multi-Distribuição: CompatÃvel com Ubuntu, Debian, CentOS, RHEL e Fedora
- Rollback Facilitado: Mantém backups que permitem reverter alterações em caso de problemas
| Componente | Especificação |
|---|---|
| Sistema Operacional | Ubuntu 18.04+, Debian 10+, CentOS 7+, RHEL 7+, Fedora 30+ |
| Privilégios | Acesso root (sudo) |
| Shell | Bash 4.0 ou superior |
| Espaço em Disco | MÃnimo 500 MB livres para logs e backups |
| Memória RAM | MÃnimo 1 GB (2 GB recomendado) |
O script instala automaticamente as dependências necessárias durante a execução. As seguintes ferramentas podem ser instaladas conforme a configuração escolhida:
- ufw - Firewall simplificado para Linux
- fail2ban - Proteção contra ataques de força bruta
- libpam-pwquality - Biblioteca para polÃtica de senhas
- unattended-upgrades - Atualizações automáticas de segurança
- htop, iotop, nethogs, ncdu, sysstat - Ferramentas de monitoramento
Para instalar o script em seu servidor, execute os seguintes comandos:
# Fazer download do script
wget https://github.com/eltongomez/server-setup/raw/main/erp-server-setup.sh
# Tornar o script executável
chmod +x erp-server-setup.sh
# Verificar a integridade (opcional)
bash -n erp-server-setup.shExecute o script com privilégios de root:
sudo ./erp-server-setup.shAo iniciar o script, você será apresentado ao menu principal com as seguintes opções:
| Opção | Descrição |
|---|---|
| 1. Configuração Completa | Executa todas as configurações recomendadas em sequência |
| 2. Segurança | Acessa o submenu de configurações de segurança |
| 3. Monitoramento | Acessa o submenu de ferramentas de monitoramento |
| 4. Backup | Acessa o submenu de configuração de backup |
| 5. Sistema | Acessa o submenu de configurações do sistema |
| 6. Gerar Relatório | Cria um relatório detalhado das configurações aplicadas |
| 7. Sair | Encerra o script |
A opção de Configuração Completa é recomendada para novos servidores. Ela executa automaticamente todas as etapas de hardening e configuração, solicitando confirmação e personalização apenas para os parâmetros mais crÃticos.
Esta opção configura:
- SSH Seguro: Altera a porta padrão, desabilita login root e configura autenticação por chave
- Firewall UFW: Configura regras básicas de firewall permitindo apenas portas essenciais
- Fail2Ban: Protege contra ataques de força bruta com banimento automático de IPs suspeitos
- PolÃtica de Senhas: Implementa requisitos de complexidade e expiração de senhas
- Atualizações Automáticas: Configura instalação automática de patches de segurança
- Hardening do Kernel: Aplica configurações de segurança no nÃvel do kernel via sysctl
- Ferramentas de Monitoramento: Instala htop, iotop, nethogs e outras ferramentas essenciais
- Rotação de Logs: Configura logrotate para gerenciar o crescimento dos arquivos de log
- Script de Backup: Cria e agenda backups automáticos do sistema e dados
O script configura o SSH seguindo as melhores práticas de segurança. Durante a configuração, você será questionado sobre:
- Porta SSH: Por padrão, o SSH usa a porta 22. É recomendável alterar para uma porta não padrão (ex: 2222) para reduzir tentativas de ataque automatizadas.
- Login Root: Desabilitar o login direto do usuário root força o uso de contas de usuário normais com sudo, criando uma camada adicional de auditoria.
- Autenticação por Senha: Desabilitar a autenticação por senha e usar apenas chaves SSH elimina a possibilidade de ataques de força bruta em senhas.
Exemplo de Configuração:
Porta SSH [22]: 2222
Desabilitar login root via SSH? [S/n]: S
Desabilitar autenticação por senha? [s/N]: N
O Uncomplicated Firewall (UFW) é configurado com uma polÃtica padrão de negar todas as conexões de entrada e permitir todas as conexões de saÃda. O script permite adicionar exceções para serviços especÃficos:
- Porta SSH: Automaticamente liberada com base na porta configurada
- HTTP/HTTPS: Portas 80 e 443 para servidores web
- Portas Customizadas: Você pode adicionar quantas portas adicionais forem necessárias
Exemplo de Configuração:
Porta SSH para liberar [22]: 2222
Liberar portas HTTP (80) e HTTPS (443)? [S/n]: S
Deseja adicionar portas customizadas? [s/N]: S
Digite a porta (ou 'fim' para terminar): 5432
Protocolo (tcp/udp) [tcp]: tcp
O Fail2Ban monitora os logs do sistema e bane automaticamente endereços IP que apresentam comportamento malicioso, como múltiplas tentativas de login falhadas.
Parâmetros configuráveis:
- Tempo de Banimento: Duração em segundos que um IP permanece banido (padrão: 3600 segundos = 1 hora)
- Máximo de Tentativas: Número de tentativas falhadas antes do banimento (padrão: 5 tentativas)
- Janela de Tempo: PerÃodo em que as tentativas são contabilizadas (padrão: 600 segundos = 10 minutos)
A polÃtica de senhas implementa requisitos de complexidade usando a biblioteca PAM (Pluggable Authentication Modules):
| Parâmetro | Padrão | Descrição |
|---|---|---|
| Comprimento MÃnimo | 12 caracteres | Tamanho mÃnimo da senha |
| Classes de Caracteres | 3 | Número mÃnimo de tipos (maiúsculas, minúsculas, números, especiais) |
| Caracteres Repetidos | 3 | Máximo de caracteres idênticos consecutivos |
| Expiração | 90 dias | Dias até a senha expirar |
| Intervalo MÃnimo | 7 dias | Dias mÃnimos entre mudanças de senha |
| Aviso de Expiração | 14 dias | Dias de aviso antes da expiração |
O script configura o sistema para instalar automaticamente atualizações de segurança, reduzindo a janela de vulnerabilidade a exploits conhecidos. As atualizações são aplicadas diariamente durante a madrugada para minimizar impacto nos usuários.
Para distribuições baseadas em Debian/Ubuntu, o unattended-upgrades é configurado para:
- Atualizar apenas pacotes de segurança
- Remover pacotes de kernel antigos automaticamente
- Remover dependências não utilizadas
- Opcionalmente reiniciar o servidor às 03:00 se necessário
As configurações de hardening do kernel via sysctl incluem proteções contra diversos tipos de ataque:
- Proteção contra IP Spoofing: Valida a origem dos pacotes de rede
- Desabilitar IP Forwarding: Impede que o servidor atue como roteador
- Proteção SYN Flood: Ativa SYN cookies para prevenir ataques de negação de serviço
- Ignorar ICMP Redirects: Previne redirecionamento malicioso de tráfego
- Randomização de Espaço de Endereços: Dificulta exploits de buffer overflow
- Restrição de Acesso ao Kernel: Limita acesso a informações sensÃveis do kernel
O script instala um conjunto de ferramentas essenciais para monitoramento do servidor:
| Ferramenta | Função |
|---|---|
| htop | Monitor interativo de processos com interface colorida e ordenação flexÃvel |
| iotop | Monitor de I/O de disco mostrando quais processos estão lendo/escrevendo |
| nethogs | Monitor de uso de rede por processo, útil para identificar consumo excessivo |
| ncdu | Analisador de uso de disco com interface interativa para navegação |
| sysstat | Conjunto de ferramentas para coleta de estatÃsticas de desempenho (sar, iostat, mpstat) |
Após a instalação, você pode usar estas ferramentas a qualquer momento:
# Monitor de processos
htop
# Monitor de I/O de disco
sudo iotop
# Monitor de uso de rede
sudo nethogs
# Analisar uso de disco
ncdu /
# EstatÃsticas de CPU
mpstat 1 5
# EstatÃsticas de I/O
iostat -x 1 5A rotação de logs previne que os arquivos de log cresçam indefinidamente e consumam todo o espaço em disco. O script configura o logrotate para:
- Rotação Diária: Logs são rotacionados diariamente
- Retenção Configurável: Você define por quantos dias manter os logs (padrão: 30 dias)
- Compressão Opcional: Logs antigos podem ser comprimidos para economizar espaço
- Rotação Inteligente: Apenas rotaciona se o arquivo não estiver vazio
O script cria um sistema completo de backup que inclui:
Componentes do Backup:
- Configurações do sistema (SSH, firewall, Fail2Ban, etc.)
- Dados da aplicação ERP (se existirem em
/opt/erp/data) - Banco de dados PostgreSQL (dump completo)
- Checksums SHA256 para verificação de integridade
Parâmetros Configuráveis:
| Parâmetro | Descrição | Padrão |
|---|---|---|
| Diretório de Destino | Onde os backups serão armazenados | /backup/erp |
| Retenção | Dias para manter backups antigos | 30 dias |
| Agendamento | Frequência de execução automática | Diário às 03:00 |
Estrutura do Backup:
/backup/erp/
├── erp-backup-20251228-030000/
│ ├── system-config.tar.gz
│ ├── app-data.tar.gz
│ ├── database.sql.gz
│ └── checksums.txt
├── erp-backup-20251229-030000/
│ └── ...
O script oferece três opções de agendamento:
- Diário (03:00): Backup executado todos os dias às 3h da manhã
- Semanal (Domingo 03:00): Backup executado apenas aos domingos
- Personalizado: Você define a expressão cron manualmente
Exemplos de Expressões Cron:
# Diário às 03:00
0 3 * * *
# Semanal aos domingos às 03:00
0 3 * * 0
# A cada 6 horas
0 */6 * * *
# Segunda a sexta às 23:00
0 23 * * 1-5Você pode executar um backup manualmente a qualquer momento:
sudo /usr/local/bin/erp-backup.shOs logs de backup são salvos em /var/log/erp-backup.log.
Serviços desnecessários aumentam a superfÃcie de ataque e consomem recursos do sistema. O script identifica e oferece a opção de desabilitar:
- avahi-daemon: Serviço de descoberta de rede (Zeroconf/Bonjour)
- cups: Sistema de impressão CUPS
- bluetooth: Serviço Bluetooth
- iscsid: Daemon iSCSI (necessário apenas se usar storage iSCSI)
Cada serviço é apresentado individualmente para que você decida se deseja desabilitá-lo.
Esta opção executa uma atualização completa do sistema operacional, instalando todos os pacotes disponÃveis:
# Ubuntu/Debian
apt update && apt upgrade -y
# CentOS/RHEL/Fedora
yum update -yO relatório de configuração fornece uma visão geral do estado atual do servidor, incluindo:
- Informações do sistema (distribuição, kernel, uptime)
- Status dos serviços de segurança (firewall, Fail2Ban, SSH)
- Ferramentas de monitoramento instaladas
- Configuração de backup
- Localização dos logs
O relatório é salvo em /var/log/erp-setup/config-report-YYYYMMDD-HHMMSS.txt e também exibido na tela.
O script cria e utiliza a seguinte estrutura de diretórios:
/var/log/erp-setup/
├── setup-20251228-140000.log # Log de execução do script
└── config-report-20251228-140500.txt # Relatório de configuração
/var/backups/erp-setup/
├── sshd_config.backup-20251228-140100
├── jail.local.backup-20251228-140200
└── ... # Backups de arquivos de configuração
/usr/local/bin/
└── erp-backup.sh # Script de backup automatizado
/etc/ssh/sshd_config.d/
└── erp-hardening.conf # Configurações SSH personalizadas
/etc/sysctl.d/
└── 99-erp-hardening.conf # Configurações de hardening do kernel
/etc/fail2ban/
└── jail.local # Configurações do Fail2Ban
/etc/security/
└── pwquality.conf # PolÃtica de senhas
/etc/apt/apt.conf.d/
├── 50unattended-upgrades # Configuração de atualizações automáticas
└── 20auto-upgrades # Frequência de atualizações
/etc/logrotate.d/
└── erp-custom # Configuração de rotação de logs
Problema: Mensagem de erro "Permission denied"
Solução: Certifique-se de que o script tem permissão de execução e está sendo executado como root:
chmod +x erp-server-setup.sh
sudo ./erp-server-setup.shProblema: Não consegue conectar via SSH após alterar a porta ou desabilitar autenticação por senha
Solução: Se você alterou a porta SSH, conecte usando:
ssh -p NOVA_PORTA usuario@servidorSe desabilitou autenticação por senha sem configurar chave SSH, você precisará acessar o servidor fisicamente ou via console remoto e restaurar o backup:
sudo cp /var/backups/erp-setup/sshd_config.backup-* /etc/ssh/sshd_config
sudo systemctl restart sshdProblema: Firewall está bloqueando conexões necessárias
Solução: Adicione a porta necessária ao firewall:
sudo ufw allow PORTA/tcp
sudo ufw statusProblema: Script de backup retorna erro
Solução: Verifique o log de backup para identificar o problema:
sudo tail -f /var/log/erp-backup.logProblemas comuns incluem:
- Espaço em disco insuficiente no diretório de backup
- Permissões incorretas no diretório de destino
- Banco de dados não está rodando
Se você precisar reverter alguma configuração, todos os arquivos originais foram salvos em /var/backups/erp-setup/ com timestamp. Para restaurar:
# Listar backups disponÃveis
ls -lh /var/backups/erp-setup/
# Restaurar um arquivo especÃfico
sudo cp /var/backups/erp-setup/ARQUIVO.backup-TIMESTAMP /caminho/original/ARQUIVO
# Reiniciar o serviço correspondente
sudo systemctl restart SERVICOTodos os logs do script são salvos em /var/log/erp-setup/ com timestamp. Para visualizar:
# Ver o último log
sudo tail -f /var/log/erp-setup/setup-*.log
# Buscar por erros
sudo grep -i error /var/log/erp-setup/*.log
# Buscar por avisos
sudo grep -i warning /var/log/erp-setup/*.log- Teste em Ambiente de Desenvolvimento: Execute o script primeiro em um servidor de teste para familiarizar-se com as opções e validar o comportamento
- Faça Backup Manual: Antes de executar o script em produção, faça um snapshot ou backup completo do servidor
- Documente as Escolhas: Anote as configurações personalizadas que você escolher para referência futura
- Planeje uma Janela de Manutenção: Algumas configurações (especialmente SSH) podem interromper conexões ativas
- Tenha Acesso Alternativo: Certifique-se de ter acesso ao console fÃsico ou KVM em caso de problemas com SSH
- Teste Todas as Conexões: Verifique se consegue conectar via SSH, acessar serviços web, etc.
- Monitore os Logs: Acompanhe os logs por alguns dias para identificar falsos positivos no Fail2Ban
- Valide os Backups: Execute uma restauração de teste para garantir que os backups estão funcionando
- Documente o Ambiente: Atualize sua documentação com as novas configurações de segurança
- Treine a Equipe: Certifique-se de que a equipe conhece as novas polÃticas de senha e procedimentos de acesso
- Revise os Logs Regularmente: Verifique os logs de segurança e backup semanalmente
- Atualize o Script: Mantenha o script atualizado com novas versões e patches de segurança
- Teste os Backups: Execute restaurações de teste mensalmente
- Revise as Regras de Firewall: Periodicamente revise e remova regras desnecessárias
- Monitore Alertas do Fail2Ban: Investigue IPs banidos com frequência para identificar ataques persistentes
O script foi desenvolvido com segurança em mente:
- Sem Coleta de Dados: Nenhuma informação é enviada para servidores externos
- Código Aberto: Todo o código está disponÃvel para inspeção
- Backups Locais: Todos os backups e logs são armazenados localmente no servidor
- Validação de Entrada: Todas as entradas do usuário são validadas antes de serem aplicadas
- Execução Segura: O script usa
set -euo pipefailpara falhar rapidamente em caso de erro
- O script foi testado principalmente em Ubuntu 20.04+ e Debian 11+. Outras distribuições podem requerer ajustes
- A configuração de banco de dados assume PostgreSQL. Outros bancos de dados requerem modificação do script de backup
- O script não configura SELinux (apenas sysctl). Para servidores RHEL/CentOS, considere configurar SELinux separadamente
- Não há suporte para ambientes containerizados (Docker, Kubernetes)
Para reportar problemas, sugerir melhorias ou contribuir com o projeto:
- Issues: Reporte bugs ou solicite features
- Pull Requests: Contribuições são bem-vindas
- Documentação: Ajude a melhorar esta documentação
Este script é fornecido "como está", sem garantias de qualquer tipo. Use por sua conta e risco.
- Lançamento inicial
- Configuração completa de segurança (SSH, firewall, Fail2Ban)
- PolÃtica de senhas e atualizações automáticas
- Hardening do kernel
- Ferramentas de monitoramento
- Sistema de backup automatizado
- Interface interativa com menus coloridos
- Sistema de logging e auditoria
- Suporte para Ubuntu, Debian, CentOS, RHEL e Fedora