Gestión Remota de Servidores con IPMI en Linux
IPMI (Intelligent Platform Management Interface) permite gestionar servidores físicos de forma remota a nivel de hardware, independientemente del estado del sistema operativo, siendo esencial para la administración de servidores baremetal. Esta guía cubre la instalación de ipmitool, la configuración del BMC, el control de energía, la monitorización de sensores, Serial-over-LAN y las mejores prácticas de seguridad.
Requisitos Previos
- Servidor físico (baremetal) con BMC/iDRAC/iLO compatible con IPMI 2.0
- Acceso root al servidor
- Puerto de red de gestión del BMC configurado (generalmente separado de los puertos de datos)
- Acceso de red al puerto IPMI (UDP 623)
# Verificar que el hardware soporta IPMI
dmidecode --type 38 # Busca "IPMI Device Information"
# Verificar que el módulo IPMI está disponible en el kernel
lsmod | grep ipmi
modprobe ipmi_devintf
modprobe ipmi_si
Instalación de ipmitool
# Ubuntu/Debian
apt update
apt install -y ipmitool openipmi
# CentOS/Rocky Linux
dnf install -y ipmitool
# Habilitar el servicio IPMI del kernel
systemctl enable ipmi
systemctl start ipmi
# Verificar la instalación
ipmitool --version
# Cargar los módulos IPMI necesarios
modprobe ipmi_devintf
modprobe ipmi_si
# Hacer los módulos persistentes
echo "ipmi_devintf" >> /etc/modules-load.d/ipmi.conf
echo "ipmi_si" >> /etc/modules-load.d/ipmi.conf
Configuración del BMC
Verificar y configurar la interfaz de red del BMC:
# Ver la configuración actual del BMC (acceso local vía IPMI sobre LAN)
ipmitool lan print 1
# Configurar una IP estática para el BMC
ipmitool lan set 1 ipsrc static
# Configurar la IP del BMC
ipmitool lan set 1 ipaddr 192.168.1.100
# Configurar la máscara de subred
ipmitool lan set 1 netmask 255.255.255.0
# Configurar la puerta de enlace predeterminada
ipmitool lan set 1 defgw ipaddr 192.168.1.1
# Verificar los cambios
ipmitool lan print 1
# Configurar DHCP en lugar de IP estática
ipmitool lan set 1 ipsrc dhcp
Acceder al BMC de forma remota:
# Sintaxis general para acceso remoto:
# ipmitool -I lanplus -H <IP_BMC> -U <usuario> -P <contraseña> <comando>
# Verificar el acceso remoto al BMC
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña mc info
# La salida muestra información del firmware del BMC:
# Device ID: 32
# Firmware Revision: 3.45
# IPMI Version: 2.0
Control de Energía del Servidor
Una de las funciones más críticas de IPMI es el control remoto de energía:
# Ver el estado actual de energía
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña power status
# Encender el servidor
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña power on
# Apagado gracioso (envía señal de apagado al OS)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña power soft
# Apagado forzado (equivale a cortar la corriente)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña power off
# Reinicio forzado (apagado + encendido)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña power cycle
# Reset forzado (similar al botón reset físico)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña power reset
# Script para gestionar múltiples servidores
cat << 'EOF' > /usr/local/bin/ipmi-power.sh
#!/bin/bash
# Control de energía para múltiples servidores via IPMI
SERVIDORES=(
"192.168.1.100 admin contraseña servidor-1"
"192.168.1.101 admin contraseña servidor-2"
"192.168.1.102 admin contraseña servidor-3"
)
ACCION=${1:-status}
for SERVIDOR in "${SERVIDORES[@]}"; do
IP=$(echo $SERVIDOR | awk '{print $1}')
USER=$(echo $SERVIDOR | awk '{print $2}')
PASS=$(echo $SERVIDOR | awk '{print $3}')
NOMBRE=$(echo $SERVIDOR | awk '{print $4}')
ESTADO=$(ipmitool -I lanplus -H $IP -U $USER -P $PASS power $ACCION 2>/dev/null)
echo "${NOMBRE} (${IP}): ${ESTADO}"
done
EOF
chmod +x /usr/local/bin/ipmi-power.sh
# Uso del script
/usr/local/bin/ipmi-power.sh status
/usr/local/bin/ipmi-power.sh on
Monitorización de Sensores
IPMI proporciona acceso a todos los sensores de hardware:
# Listar todos los sensores disponibles
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sdr list
# Ver todos los sensores con sus valores actuales
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sensor list
# Filtrar sensores por tipo
# Temperaturas
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sdr type Temperature
# Velocidad de los ventiladores
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sdr type Fan
# Voltajes
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sdr type Voltage
# Estado de los discos (si el controlador RAID soporta IPMI)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sdr type "Drive Slot"
# Script de monitorización de temperatura con alerta
cat << 'EOF' > /usr/local/bin/ipmi-temp-check.sh
#!/bin/bash
# Verificación de temperatura con alerta via email
BMC_IP="192.168.1.100"
BMC_USER="admin"
BMC_PASS="contraseña"
UMBRAL_TEMP=80 # Temperatura máxima en Celsius
# Obtener temperatura máxima de la CPU
TEMP_CPU=$(ipmitool -I lanplus -H $BMC_IP -U $BMC_USER -P $BMC_PASS \
sdr type Temperature 2>/dev/null | \
grep -i "CPU\|Processor" | \
awk -F'|' '{print $5}' | \
grep -oP '\d+' | \
sort -n | tail -1)
if [ -n "$TEMP_CPU" ] && [ "$TEMP_CPU" -gt "$UMBRAL_TEMP" ]; then
echo "ALERTA: Temperatura CPU alta: ${TEMP_CPU}°C (umbral: ${UMBRAL_TEMP}°C)" | \
mail -s "ALERTA: Temperatura servidor ${BMC_IP}" [email protected]
fi
echo "Temperatura CPU: ${TEMP_CPU}°C"
EOF
chmod +x /usr/local/bin/ipmi-temp-check.sh
# Añadir al cron para verificación cada 5 minutos
echo "*/5 * * * * root /usr/local/bin/ipmi-temp-check.sh" > /etc/cron.d/ipmi-temp-check
Serial-over-LAN (SOL)
SOL redirige la consola serie del servidor a través de la red IPMI:
# Habilitar SOL en el servidor (configuración del BMC)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sol set enabled true 1
# Configurar la velocidad de baudios del SOL
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sol set baud-rate 115200 1
# Activar SOL y conectarse a la consola
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sol activate
# Para salir de la sesión SOL
# Presionar: ~ . (tilde seguido de punto)
# Configurar el GRUB para enviar la consola por el puerto serie
# Añadir a /etc/default/grub:
# GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
# GRUB_TERMINAL="console serial"
# GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
update-grub
# Configurar el kernel para usar la consola serie
cat << 'EOF' > /etc/default/grub
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
EOF
update-grub
Gestión de Usuarios IPMI
# Listar usuarios actuales del BMC
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña user list 1
# Crear un nuevo usuario (ID 3 en este ejemplo)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña user set name 3 operador
# Establecer contraseña para el nuevo usuario
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña user set password 3 ContraseñaSegura
# Configurar privilegios del usuario
# Niveles: 4=User, 3=Operator, 2=Administrator, 1=Callback
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña user priv 3 3 1
# Habilitar el usuario
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña user enable 3
# Verificar los usuarios
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña user list 1
# Deshabilitar un usuario sin eliminarlo
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña user disable 3
Seguridad en IPMI
IPMI puede ser un vector de ataque si no se securiza correctamente:
# 1. Cambiar las credenciales por defecto INMEDIATAMENTE
# (admin/admin, admin/password, ADMIN/ADMIN son compromisos graves)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P admin_default \
user set password 2 NuevaContraseñaMuySegura
# 2. Deshabilitar el cifrado IPMI 2.0 Cipher 0 (vulnerabilidad conocida)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña \
lan set 1 cipher_suite_priv_max aXXXXXXXXXXXXXX
# 3. Usar una VLAN separada para el tráfico IPMI
# Configurar en el switch: VLAN 999 solo para gestión BMC
# 4. Restringir el acceso al BMC por IP origen (si el BMC lo soporta)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña \
lan set 1 access on
# 5. Habilitar solo IPMI 2.0 (deshabilitar IPMI 1.5)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña \
lan set 1 auth OPERATOR MD5,SHA
# 6. Verificar la versión IPMI y el cifrado
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña \
lan print 1 | grep -E "Auth|Cipher"
# 7. Monitorizar accesos fallidos en los logs del BMC
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sel list
Solución de Problemas
# Error de conexión: verificar accesibilidad del BMC
ping 192.168.1.100
# Verificar que el puerto IPMI está abierto
nc -zu 192.168.1.100 623
# Ver el log de eventos del sistema (SEL)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sel list
# Limpiar el log de eventos
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña sel clear
# Ver información del controlador IPMI local (sin red)
ipmitool mc info
# Resetear el BMC (sin afectar al servidor)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña mc reset cold
# Error "RAKP 2 message indicates an error": credenciales incorrectas
# Verificar usuario y contraseña, o usar -I lan en lugar de -I lanplus
# Error "Address lookup for hostname failed": problema DNS o IP incorrecta
host 192.168.1.100
# Activar el modo verbose para depuración
ipmitool -I lanplus -H 192.168.1.100 -U admin -P contraseña -v power status
Conclusión
IPMI es la columna vertebral de la gestión de servidores baremetal, proporcionando control total del hardware independientemente del estado del sistema operativo. Su correcta configuración, especialmente la securización con contraseñas fuertes y el aislamiento en una VLAN de gestión dedicada, es fundamental para la seguridad de la infraestructura. En entornos de producción, IPMI combinado con herramientas de monitorización como Prometheus e ipmitool permite detectar y responder a problemas de hardware antes de que causen interrupciones del servicio.


