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:
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
efibootkhi 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-reboothoặcgrubenv.
Đâ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:
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 |
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¶
- IPMI Specification v2.0 rev 1.1 - intel.com
- ipmitool - github.com
- The Linux IPMI Driver - docs.kernel.org
- FreeIPMI - gnu.org
- A Penetration Tester's Guide to IPMI and BMCs - rapid7.com