Files
clube67_newwhats.local/clube67/newwhats.local/monitor_cal_install.sh
T

193 lines
8.3 KiB
Bash
Executable File

#!/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 <<EOF > /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 <<EOF > /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 <<EOF > /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 "========================================================================"