Current File : //reporteCompleto.sh
#!/bin/bash

# Obtener IP del servidor
ip_servidor=$(curl -s https://api.ipify.org)

# Asignar nombre de servidor según IP
nombre_servidor="Desconocido"
case "$ip_servidor" in
  "72.29.91.210") nombre_servidor="A3" ;;
  "64.37.50.234") nombre_servidor="A4" ;;
  "138.128.182.130") nombre_servidor="B2" ;;
  "138.128.186.170") nombre_servidor="C2" ;;
  "107.190.131.66") nombre_servidor="D2" ;;
  "138.128.189.154") nombre_servidor="D3" ;;
  "138.128.191.106") nombre_servidor="E2" ;;
  "138.128.188.146") nombre_servidor="F2" ;;
  "107.161.188.154") nombre_servidor="H2H" ;;  # También era V4, eliminado
  "138.128.182.106") nombre_servidor="I2" ;;
  "98.142.101.90") nombre_servidor="I3" ;;
  "67.23.255.10") nombre_servidor="M1" ;;
  "67.23.242.18") nombre_servidor="O2" ;;
  "162.221.187.122") nombre_servidor="P2" ;;
  "64.37.50.122") nombre_servidor="R2" ;;
  "138.128.170.234") nombre_servidor="S3" ;;
  "98.142.102.50") nombre_servidor="S4" ;;
  "107.161.188.178") nombre_servidor="V5" ;;
  "107.190.136.42") nombre_servidor="V6" ;;
  "199.168.190.18") nombre_servidor="V7" ;;
  "67.23.248.2") nombre_servidor="V8" ;;
  "138.128.190.114") nombre_servidor="V9" ;;
  "198.136.52.186") nombre_servidor="V10" ;;
  "67.23.242.202") nombre_servidor="W1" ;;
  "98.142.108.122") nombre_servidor="X3" ;;
  "107.190.143.58") nombre_servidor="Y3" ;;
  "138.128.163.34") nombre_servidor="Z2" ;;
esac

# Archivo de reporte
reporte="/tmp/reporte_smartctl.txt"
> "$reporte"

# Cabecera
{
  echo "REPORTE DE ESTADO DEL SERVIDOR"
  echo "Nombre: $nombre_servidor"
  echo "IP: $ip_servidor"
  echo "Fecha: $(date)"
  echo "---------------------------------------"
  echo
  echo "🔧 ESTADO DE LOS DISCOS"
  echo
} >> "$reporte"

# Listar todos los discos físicos
discos=$(lsblk -dno NAME | grep -E '^sd|^nvme')

# Evaluar cada disco
for disco in $discos; do
  estado=$(sudo smartctl -H /dev/$disco 2>/dev/null | grep "SMART overall-health self-assessment test result")
  if echo "$estado" | grep -q "PASSED"; then
    echo "/dev/$disco: OK" >> "$reporte"
  else
    echo "/dev/$disco: FALLA" >> "$reporte"
  fi
done

echo -e "\n---------------------------------------\n" >> "$reporte"

########### DETECCIÓN DE SPAM ###########
echo "🚨 Cuentas autenticadas enviando correos (últimos 2 días):" >> $reporte
grep -a -E "$(date +%Y-%m-%d)|$(date +%Y-%m-%d --date='yesterday')" /var/log/exim_mainlog \
| grep -Eo "A=dovecot_(login|plain):[^ ]+" \
| awk -F: '{print $2}' | sort | uniq -c | sort -nr | head -n 10 >> $reporte

echo "" >> $reporte
echo "📁 Rutas que están enviando desde /home (últimas 36h):" >> $reporte
grep -a 'cwd=/home' /var/log/exim_mainlog \
| awk -v Date="$(date --date='36 hours ago' '+%Y-%m-%d %H:%M:%S')" '$0 > Date' \
| grep -o 'cwd=/home[^ ]*' | sort | uniq -c | sort -nr | head -n 10 >> $reporte

echo "---------------------------------------" >> $reporte

# Análisis de cuentas que más consumieron en las últimas 36 horas
echo "📊 USO DE CPU / MEMORIA / MYSQL (últimas 36 horas)" >> "$reporte"

s="$(date +%s --date='36 hours ago')"
t="$(date +%s)"

OUT=$(/usr/local/cpanel/bin/dcpumonview "$s" "$t" | grep -v Top | sed -e 's#<[^>]*># #g' | while read i; do
  NF=$(echo $i | awk '{print NF}')
  if [[ "$NF" == "5" ]]; then
    USER=$(echo $i | awk '{print $1}')
    OWNER=$(grep -e "^OWNER=" /var/cpanel/users/$USER 2>/dev/null | cut -d= -f2)
    echo "$OWNER $i"
  fi
done)

{
  echo
  echo "🔹 CPU (uso%) | Cuenta"
  echo "$OUT" | sort -nrk4 | awk '{printf"%s%% %s\n",$4,$2}' | head -5
  echo
  echo "🔹 Memoria (uso%) | Cuenta"
  echo "$OUT" | sort -nrk5 | awk '{printf"%s%% %s\n",$5,$2}' | head -5
  echo
  echo "🔹 MySQL (uso%) | Cuenta"
  echo "$OUT" | sort -nrk6 | awk '{printf"%s%% %s\n",$6,$2}' | head -5
  echo
} >> "$reporte"

# Enviar el correo
mail -s "Estado del servidor $nombre_servidor (IP: $ip_servidor)" diego.velasquez@hostrentable.com < "$reporte"