Skip to content

IPMI

IPMI (Intelligent Platform Management Interface) là chuẩn giao tiếp để quản lý server qua BMC: điều khiển nguồn, đọc sensor, đọc log sự kiện, console từ xa. Chuẩn do Intel, HP, NEC và Dell công bố năm 1998, được gần như mọi hãng server hỗ trợ.

Phiên bản Năm Điểm mới chính
IPMI 1.0 1998 Giao tiếp nội bộ (system interface, IPMB)
IPMI 1.5 2001 IPMI over LAN (RMCP), Serial over modem
IPMI 2.0 2004 RMCP+ (xác thực RAKP, mã hóa), Serial-over-LAN, payload
IPMI 2.0 rev 1.1 2013 Errata, IPv6

Intel đã thông báo không phát triển thêm IPMI. Server đời mới chuyển dần sang Redfish, nhưng IPMI vẫn có mặt trên hầu hết BMC và vẫn là công cụ đầu tiên khi làm việc với server.

Kiến trúc

  Máy quản lý                         Server
 ┌───────────┐  RMCP+ (UDP 623)  ┌───────────────────────────────────────┐
 │ ipmitool  │◄─────────────────►│ BMC                                   │
 └───────────┘                   │  ├── SDR (danh sách sensor)           │
                                 │  ├── SEL (log sự kiện)                │
                                 │  ├── FRU (inventory)                  │
                                 │  ├── Watchdog, PEF, chassis control   │
                                 │  │                                    │
                                 │  ├─ KCS/BT/SSIF ──► Host OS (ipmi_si) │
                                 │  └─ IPMB (I2C) ───► Controller vệ tinh│
                                 └───────────────────────────────────────┘
Thành phần Mô tả
BMC Controller trung tâm, xử lý mọi lệnh IPMI.
System interface Kênh giữa host OS và BMC: KCS (Keyboard Controller Style, phổ biến nhất), SMIC, BT (Block Transfer) qua LPC/eSPI, và SSIF (SMBus System Interface) qua I2C.
IPMB Intelligent Platform Management Bus: bus dựa trên I2C nối BMC với các controller vệ tinh (ví dụ controller trên card mở rộng, chassis phụ).
LAN interface IPMI over LAN qua giao thức RMCP/RMCP+ trên UDP port 623.
SDR Sensor Data Record: mô tả từng sensor (tên, đơn vị, công thức chuyển đổi, ngưỡng).
SEL System Event Log: log sự kiện lưu trong bộ nhớ không bay hơi của BMC.
FRU Field Replaceable Unit: thông tin inventory (hãng, model, serial) lưu trong EEPROM của từng bộ phận.
PEF Platform Event Filtering: hành động khi có sự kiện (gửi SNMP trap, tắt nguồn, reset).

Định dạng lệnh

Mỗi lệnh IPMI gồm NetFn (Network Function, nhóm lệnh), Cmd (mã lệnh) và dữ liệu. BMC trả về completion code (0x00 là thành công) cùng dữ liệu phản hồi.

NetFn Nhóm Ví dụ lệnh
0x00 Chassis Get Chassis Status (0x01), Chassis Control (0x02), Set System Boot Options (0x08)
0x04 Sensor/Event Get Sensor Reading (0x2D)
0x06 App Get Device ID (0x01), Reset Watchdog Timer (0x22), Set Watchdog Timer (0x24)
0x0A Storage Get SDR, Get SEL Entry, Read FRU Data
0x0C Transport Cấu hình LAN, SOL
0x30–0x3F OEM Lệnh riêng của hãng (điều khiển quạt, cấu hình đặc thù)

Ví dụ gửi lệnh thô Get Device ID:

ipmitool raw 0x06 0x01

Lệnh OEM khác nhau giữa các hãng. Đây là chỗ hay gặp khi cần điều khiển quạt thủ công hoặc đọc thông tin không có trong chuẩn.

ipmitool

ipmitool là công cụ phổ biến nhất. FreeIPMI (ipmi-sensors, ipmi-sel, ipmiconsole...) là bộ công cụ thay thế.

Kết nối

# Trên chính server, qua driver /dev/ipmi0 (interface open)
sudo ipmitool mc info

# Từ xa, qua mạng với RMCP+ (IPMI 2.0)
ipmitool -I lanplus -H 10.0.0.10 -U admin -P '<password>' chassis status

# Đọc password từ biến môi trường để không lộ trong history/ps
export IPMI_PASSWORD='<password>'
ipmitool -I lanplus -H 10.0.0.10 -U admin -E chassis status

-I lan là IPMI 1.5 (RMCP, không mã hóa), chỉ dùng khi BMC quá cũ. Luôn ưu tiên -I lanplus.

Các lệnh hay dùng

Mục đích Lệnh
Thông tin BMC (firmware, hãng) ipmitool mc info
Reset BMC (không ảnh hưởng host) ipmitool mc reset cold
Trạng thái nguồn ipmitool chassis status, ipmitool power status
Bật, tắt, reset host ipmitool chassis power on \| off \| cycle \| reset \| soft
Chọn boot device lần tới ipmitool chassis bootdev pxe options=efiboot
Bật đèn nhận dạng (tìm máy trong rack) ipmitool chassis identify 60
Danh sách sensor và giá trị ipmitool sdr list, ipmitool sensor
Sensor theo loại ipmitool sdr type Temperature, ipmitool sdr type Fan
Log sự kiện ipmitool sel elist, ipmitool sel clear
Inventory ipmitool fru print
Cấu hình mạng của BMC ipmitool lan print 1, ipmitool lan set 1 ipaddr 10.0.0.10
Quản lý user ipmitool user list 1, ipmitool user set password 2
Console qua mạng ipmitool sol activate, ipmitool sol deactivate
Watchdog ipmitool mc watchdog get

Phân biệt power off và power soft: off cắt nguồn ngay như giữ nút nguồn, soft gửi tín hiệu ACPI để OS tự shutdown.

Ví dụ đọc SEL

$ ipmitool sel elist
   1 | 10/24/2026 | 08:12:03 | Power Supply PSU2 Status | Power Supply AC lost | Asserted
   2 | 10/24/2026 | 08:12:45 | Power Supply PSU2 Status | Power Supply AC lost | Deasserted
   3 | 10/24/2026 | 09:30:17 | Memory DIMM_A1 | Correctable ECC | Asserted

SEL là nơi đầu tiên cần xem khi server tự reset hoặc báo lỗi phần cứng: log lưu trong BMC nên vẫn còn sau khi host reboot, kể cả khi OS không kịp ghi gì.

Boot device

chassis bootdev ghi boot flag (lệnh Set System Boot Options) vào BMC. BIOS/UEFI đọc flag này khi POST để chọn boot device:

ipmitool chassis bootdev pxe options=efiboot            # chỉ áp dụng cho lần boot tới
ipmitool chassis bootdev disk options=persistent,efiboot
ipmitool chassis bootdev bios                           # vào BIOS setup
ipmitool chassis bootparam get 5                        # đọc lại boot flag
ipmitool chassis power cycle
  • Mặc định flag chỉ dùng một lần. Thêm persistent để giữ cho các lần boot sau.
  • Thêm efiboot khi máy boot ở chế độ UEFI. Thiếu tùy chọn này, một số BIOS sẽ chuyển sang chế độ legacy.
  • Đây là lựa chọn của firmware, chạy trước bootloader. Lệnh này không chọn được entry trong menu GRUB; muốn đổi entry thì dùng grub-reboot hoặc grubenv.

Đây là cơ chế các công cụ cài OS hàng loạt (MAAS, Ironic của OpenStack, Foreman) dùng để ép server boot PXE rồi cài OS.

Serial-over-LAN

SOL chuyển một UART của host qua mạng. BMC chiếm cổng serial của host (qua LPC/eSPI), thường là COM2, tức ttyS1 trong Linux, và gửi dữ liệu dưới dạng payload của RMCP+.

ipmitool -I lanplus -H 10.0.0.10 -U admin -E sol activate
# Thoát: gõ ~. (dấu ngã rồi dấu chấm) ở đầu dòng

Muốn thấy toàn bộ quá trình boot qua SOL, cả ba tầng phải xuất ra cùng cổng và cùng baudrate:

Tầng Cấu hình
BIOS/UEFI Bật Console Redirection, chọn đúng COM port và baudrate (thường 115200)
GRUB GRUB_TERMINAL="console serial" và GRUB_SERIAL_COMMAND="serial --unit=1 --speed=115200" (unit 1 là COM2)
Kernel console=tty0 console=ttyS1,115200n8 trong GRUB_CMDLINE_LINUX
Login systemd tự chạy serial-getty@ttyS1 khi ttyS1 có trong console=

Chi tiết cấu hình GRUB xem tại GRUB → Serial console qua IPMI SOL.

Triệu chứng Nguyên nhân thường gặp
Thấy log BIOS nhưng không thấy menu GRUB GRUB chưa bật serial terminal, hoặc sai --unit
Ký tự rác Baudrate giữa BIOS, BMC, GRUB, kernel không khớp
Thấy GRUB nhưng mất log từ lúc kernel chạy Thiếu hoặc sai console=ttyS1
SOL payload already active Phiên SOL khác đang mở; chạy sol deactivate trước

Watchdog

BMC có watchdog timer phần cứng: nếu OS không reset timer trước khi hết hạn, BMC thực hiện hành động đã cấu hình (reset, power cycle, power off). Watchdog này độc lập với host, nên vẫn hoạt động khi kernel treo hoàn toàn.

Trên Linux, driver ipmi_watchdog tạo /dev/watchdog, systemd kick watchdog nếu cấu hình:

/etc/systemd/system.conf
RuntimeWatchdogSec=60s
RebootWatchdogSec=10min
sudo modprobe ipmi_watchdog
ipmitool mc watchdog get

Kết hợp watchdog với bootcount trong grubenv sẽ có cơ chế rollback tự động khi bản cập nhật làm treo máy: watchdog reset máy, GRUB tăng bootcount và chuyển về slot cũ khi vượt ngưỡng. Xem GRUB → grubenv và A/B update.

IPMI trên Linux

Phía host

Các driver nằm trong drivers/char/ipmi/:

Module Vai trò
ipmi_msghandler Lõi: định tuyến message giữa user và các interface
ipmi_si System interface KCS, SMIC, BT. Tìm BMC qua SMBIOS, ACPI hoặc device tree
ipmi_ssif SSIF qua I2C/SMBus, hay gặp trên server ARM64
ipmi_devintf Tạo /dev/ipmi0 cho ipmitool
ipmi_watchdog Watchdog của BMC qua /dev/watchdog
ipmi_poweroff Tắt nguồn qua BMC khi shutdown
sudo modprobe ipmi_si ipmi_devintf
dmesg | grep -i ipmi
ls -l /dev/ipmi0

Phía BMC

Trên chính BMC (ví dụ firmware OpenBMC), kernel đóng vai trò ngược lại: nhận lệnh từ host và chuyển lên daemon IPMI ở user space.

Driver Vai trò
kcs_bmc, kcs_bmc_aspeed, kcs_bmc_npcm7xx Phía BMC của KCS, tạo /dev/ipmi-kcs*
bt-bmc Phía BMC của BT
ssif_bmc Phía BMC của SSIF
ipmb_dev_int Nhận message IPMB qua I2C slave

Đây là ví dụ về driver cho thiết bị đóng vai slave: BMC là "thiết bị" mà host nói chuyện cùng, tương tự I2C slave trong I2C Subsystem.

Bảo mật

IPMI được thiết kế từ thời mạng quản lý được coi là an toàn, nên có nhiều điểm yếu ngay trong chuẩn:

  • Lộ hash mật khẩu qua RAKP (CVE-2013-4786): trong bước xác thực RMCP+, BMC gửi về HMAC tính từ mật khẩu của user trước khi client chứng minh mình biết mật khẩu. Kẻ tấn công chỉ cần biết tên user để lấy hash rồi brute-force offline. Đây là lỗi của chuẩn, không vá được bằng firmware.
  • Cipher suite 0: không xác thực, không mã hóa. Trên firmware cấu hình sai, đăng nhập được với bất kỳ mật khẩu nào.
  • User anonymous và mật khẩu mặc định: nhiều BMC xuất xưởng với user rỗng hoặc mật khẩu in trên nhãn, dễ bị dò.
  • Mã hóa yếu: RMCP+ dùng AES-128-CBC và HMAC-SHA1 trong các cipher suite phổ biến.

Khuyến nghị:

ipmitool lan print 1 | grep -i cipher                 # xem cipher suite đang bật
ipmitool user list 1                                  # kiểm tra user, tắt user không dùng
ipmitool lan set 1 cipher_privs XXXaXXXXXXXXXXX       # ví dụ: chỉ bật cipher 3 cho admin, tắt các cipher khác (kể cả 0)
  • Đặt BMC trên VLAN/mạng quản lý riêng, chặn UDP 623 từ các mạng khác.
  • Tắt IPMI over LAN nếu đã dùng Redfish; giữ IPMI qua KCS cho công cụ chạy trên host.
  • Dùng mật khẩu dài và khác nhau cho từng BMC, vì hash có thể bị lấy ra.

Chuỗi cipher_privs có một ký tự cho mỗi cipher suite từ 0 đến 14 (X là tắt, a là admin, o là operator, u là user, c là callback). Cấu hình mặc định khác nhau giữa các hãng, nên đọc kỹ lan print trước khi sửa.

References

  1. IPMI Specification v2.0 rev 1.1 - intel.com
  2. ipmitool - github.com
  3. The Linux IPMI Driver - docs.kernel.org
  4. FreeIPMI - gnu.org
  5. A Penetration Tester's Guide to IPMI and BMCs - rapid7.com