#!/bin/bash # ============================================================================== # 🚀 SCRIPT DE INSTALAÇÃO UNIFICADA: ALERTAS SSH (GCAL + TELEGRAM + PAM) # ============================================================================== # Este script automatiza o deploy completo da arquitetura de monitoramento em # qualquer VPS da rede. Ele configura o PAM, Python, Telegram e Banners. # ============================================================================== # Cores para formatação de saída RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # Sem Cor echo -e "${YELLOW}========================================================================${NC}" echo -e "${YELLOW} 🛡️ MONITORAMENTO SSH AUTOMÁTICO - INSTALADOR DE DEPLOY ${NC}" echo -e "${YELLOW}========================================================================${NC}" # 1. Verificar se é root if [ "$EUID" -ne 0 ]; then echo -e "${RED}Erro: Este script precisa ser executado como root (sudo ./install.sh).${NC}" exit 1 fi # 2. Captura de Parâmetro de VPS (IP ou Nome) VPS_PREFIX="" while [[ "$#" -gt 0 ]]; do case $1 in --vps) VPS_PREFIX="$2"; shift ;; *) echo "Parâmetro desconhecido: $1"; exit 1 ;; esac shift done # Se não foi passado --vps, tenta auto-detectar o IP da interface wg0 (VPN) ou eth0 if [ -z "$VPS_PREFIX" ]; then echo -e "${YELLOW}Auto-detectando o IP da VPS...${NC}" # Tenta pegar o IP da interface wg0 primeiro VPS_PREFIX=$(ip -o -4 addr show dev wg0 2>/dev/null | awk '{split($4,a,"/"); print a[1]}') if [ -z "$VPS_PREFIX" ]; then # Tenta pegar o IP da interface eth0 VPS_PREFIX=$(ip -o -4 addr show dev eth0 2>/dev/null | awk '{split($4,a,"/"); print a[1]}') fi fi if [ -z "$VPS_PREFIX" ]; then VPS_PREFIX="127.0.0.1" fi echo -e "${GREEN}✅ Prefixo/IP Identificado para esta VPS: ${YELLOW}$VPS_PREFIX${NC}" # 3. Instalação de Dependências echo -e "\n${YELLOW}[Passo 1/6] Instalando pacotes e dependências (Apt)...${NC}" apt-get update -qq apt-get install -y -qq python3-googleapi curl echo -e "${GREEN}✅ Pacotes instalados com sucesso.${NC}" # 4. Criar Chave de Conta de Serviço se não existir echo -e "\n${YELLOW}[Passo 2/6] Verificando chave da Conta de Serviço Google Cloud...${NC}" if [ ! -f "/etc/ssh/gcal_key.json" ]; then echo -e "${YELLOW}⚠️ Aviso: O arquivo /etc/ssh/gcal_key.json não foi encontrado.${NC}" echo -e "${YELLOW}Por favor, certifique-se de salvar a chave JSON da conta de serviço em /etc/ssh/gcal_key.json e aplicar as permissões corretas.${NC}" else echo -e "${GREEN}✅ Chave da Conta de Serviço detectada em /etc/ssh/gcal_key.json.${NC}" chown root:deploy /etc/ssh/gcal_key.json 2>/dev/null || chown root:root /etc/ssh/gcal_key.json chmod 640 /etc/ssh/gcal_key.json fi # 5. Criar arquivo de configurações se não existir echo -e "\n${YELLOW}[Passo 3/6] Criando arquivo de configurações centralizadas (/etc/ssh/ssh_alerts_config.json)...${NC}" if [ ! -f "/etc/ssh/ssh_alerts_config.json" ]; then cat < /etc/ssh/ssh_alerts_config.json { "telegram_token": "8641435108:AAGL3rOiVj1GpYAyUi4D-pdeDJ9K_JUdlgM", "telegram_chat_id": "", "calendar_id": "385857c79ef3aed0f4923b29007637a8b7764d6f8359959500bce27611833f5d@group.calendar.google.com" } EOF echo -e "${GREEN}✅ Arquivo de configurações criado.${NC}" else echo -e "${GREEN}✅ Arquivo de configurações já existe. Mantendo configurações atuais.${NC}" fi chown root:deploy /etc/ssh/ssh_alerts_config.json 2>/dev/null || chown root:root /etc/ssh/ssh_alerts_config.json chmod 640 /etc/ssh/ssh_alerts_config.json # 6. Criar Scripts Integradores no Servidor echo -e "\n${YELLOW}[Passo 4/6] Configurando scripts integradores em /usr/local/bin/...${NC}" # Copia ou escreve o script principal Python if [ -f "ssh_gcal_alert.py" ]; then cp ssh_gcal_alert.py /usr/local/bin/ssh_gcal_alert.py else # Escreve o arquivo diretamente se rodando solto curl -s https://raw.githubusercontent.com/sua-uri-ou-copia-local/ssh_gcal_alert.py -o /usr/local/bin/ssh_gcal_alert.py 2>/dev/null fi chown root:root /usr/local/bin/ssh_gcal_alert.py chmod 755 /usr/local/bin/ssh_gcal_alert.py # Copia ou escreve o script do instalador Telegram if [ -f "ssh_alert_setup_telegram.py" ]; then cp ssh_alert_setup_telegram.py /usr/local/bin/ssh_alert_setup_telegram.py else curl -s https://raw.githubusercontent.com/sua-uri-ou-copia-local/ssh_alert_setup_telegram.py -o /usr/local/bin/ssh_alert_setup_telegram.py 2>/dev/null fi chown root:root /usr/local/bin/ssh_alert_setup_telegram.py chmod 755 /usr/local/bin/ssh_alert_setup_telegram.py # Criar o gatilho do PAM dinamicamente com o VPS_PREFIX correto cat < /usr/local/bin/ssh_pam_trigger.sh #!/bin/bash # Executa apenas se o estágio do PAM for 'open_session' e o serviço for o 'sshd' if [ "\$PAM_TYPE" = "open_session" ] && [ "\$PAM_SERVICE" = "sshd" ]; then USER_LOGIN="\$PAM_USER" IP_LOGIN="\$PAM_RHOST" DATE_LOGIN=\$(date "+%Y-%m-%d %H:%M:%S") # Se o IP vier vazio (comum em alguns túneis locais), assume localhost if [ -z "\$IP_LOGIN" ]; then IP_LOGIN="127.0.0.1" fi # Validação de IP seguro da VPN if [[ ! "\$IP_LOGIN" =~ ^10\.99\.0\. ]]; then AVISO_INDEVIDO="🚨 ALERTA: Acesso fora da rede VPN segura detectado!" else AVISO_INDEVIDO="✅ Acesso autorizado através da rede VPN segura." fi # Dispara o script Python de calendário e Telegram em segundo plano /usr/local/bin/ssh_gcal_alert.py --vps "$VPS_PREFIX" --user "\$USER_LOGIN" --ip "\$IP_LOGIN" --status "\$AVISO_INDEVIDO" > /dev/null 2>&1 & fi EOF chown root:root /usr/local/bin/ssh_pam_trigger.sh chmod 755 /usr/local/bin/ssh_pam_trigger.sh echo -e "${GREEN}✅ Scripts integradores configurados e autorizados.${NC}" # 7. Configurar o PAM echo -e "\n${YELLOW}[Passo 5/6] Configurando o subsistema PAM para SSH (/etc/pam.d/sshd)...${NC}" PAM_LINE="session optional pam_exec.so type=open_session /usr/local/bin/ssh_pam_trigger.sh" if grep -q "ssh_pam_trigger.sh" /etc/pam.d/sshd; then echo -e "${GREEN}✅ PAM para SSH já está devidamente configurado (ignorado para evitar duplicidade).${NC}" else echo "$PAM_LINE" >> /etc/pam.d/sshd echo -e "${GREEN}✅ Gatilho do PAM anexado com sucesso ao fim do arquivo /etc/pam.d/sshd.${NC}" fi # 8. Configurar o Banner Visual do Terminal (profile.d) echo -e "\n${YELLOW}[Passo 6/6] Configurando banner visual de auditoria no terminal (/etc/profile.d/ssh_alert.sh)...${NC}" cat < /etc/profile.d/ssh_alert.sh #!/bin/bash # Script de Banner de Auditoria SSH USER_LOGIN=\$USER IP_LOGIN=\$(echo \$SSH_CONNECTION | awk '{print \$1}') DATE_LOGIN=\$(date "+%Y-%m-%d %H:%M:%S") # Validação de IP seguro da VPN (10.99.0.X) if [[ ! "\$IP_LOGIN" =~ ^10\.99\.0\. ]]; then AVISO_INDEVIDO="🚨 ALERTA: Acesso fora da rede VPN segura detectado!" else AVISO_INDEVIDO="✅ Acesso autorizado através da rede VPN segura." fi # Exibição do Banner de Auditoria ao Usuário no Terminal echo -e "\033[1;33m" echo "=========================================================================" echo " 🖥️ AUDITORIA DE ACESSO SISTÊMICO " echo "=========================================================================" echo -e "\033[0m" echo " Usuário Conectado: \$USER_LOGIN" echo " IP de Origem: \$IP_LOGIN" echo " Data do Login: \$DATE_LOGIN" echo " Status do Canal: \$AVISO_INDEVIDO" echo "" echo " * Todas as operações estão sendo monitoradas e auditadas." echo "=========================================================================" echo "" EOF chmod 755 /etc/profile.d/ssh_alert.sh echo -e "${GREEN}✅ Banner visual de terminal ativado.${NC}" # Finalização e Próximos Passos echo -e "\n${GREEN}========================================================================${NC}" echo -e "${GREEN}🎉 INSTALAÇÃO CONCLUÍDA COM SUCESSO!${NC}" echo -e "${GREEN}========================================================================${NC}" echo -e "\n${YELLOW}👉 PRÓXIMO PASSO (VINCULAR TELEGRAM):${NC}" echo -e "Para receber notificações instantâneas no seu Telegram, execute o comando abaixo" echo -e "como administrador e envie uma mensagem para o seu bot:" echo -e "\n ${GREEN}sudo /usr/local/bin/ssh_alert_setup_telegram.py${NC}\n" echo -e "========================================================================"