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"