背景
客户提出关闭带内发ipmi 命令能力,经了解 ipmi 黑白名单可实现
诉求
1、open UBMC 如何打开 白/黑 名单 命令是啥
2、功能类名叫啥
-
查询防火墙黑白名单状态
ipmitool -I lanplus -H xx -U xx-P xx -C 17 raw 0x30 0x93 0xdb 0x07 0 0x4c
返回
db 07 00 status mode
status 0-关闭 1-开启
mode 0-黑名单 1-白名单 ff-关闭
-
配置类名
RestrictedIPMICmdList
1 个赞
防火墙黑白名单相关命令
1、Set Firmware Firewall
ipmitool raw 0x30 0x93 <manu_id> 0x4a <status> <mode> <clear_flag>
rsp: <completion_code> <manu_id>
| 字段名称 | 字段说明 |
|---|---|
| manu_id | 厂商ID,固定3个字节 |
| status | 防火墙使能状态 0:Disable 1:Enable |
| mode | 防火墙模式 当status为Disable: mode配置为0xff 当status为Enable: 0:BlackList 1:WhiteList |
| clear_flag | 清除标记 当 status为Disable:该字段不生效 当 status 为Enable:0:防火墙使能不清空黑白名单 1:防火墙使能同时清空黑白名单 |
2、Query Black or White List IPMI
ipmitool raw 0x30 0x93 <manu_id> 0x4b <type> <id>
rsp: <completion_code> <manu_id> <count> <length> <item>
| 字段名称 | 字段说明 |
|---|---|
| manu_id | 厂商ID,固定3个字节 |
| type | 查询的名单类型 0:BlackList 1:WhiteList |
| id | 查询的黑白名单条目的索引,如id为1,表示查询第一条 id取值为0时同1 |
| count | 查询的名单的条目数量 |
| length | 返回的条目的长度 |
| item | 条目的内容 |
3、Get Firmware Firewall
ipmitool raw 0x30 0x93 <manu_id> 0x4c
rsp: <completion_code> <manu_id> <status> <mode>
| 字段名称 | 字段说明 |
|---|---|
| manu_id | 厂商ID,固定3个字节 |
| status | 防火墙使能状态 0:Disable 1:Enable |
| mode | 防火墙模式 当status为Disable: mode返回0xff 当status为Enable: 0:BlackList 1:WhiteList |
功能类名
Firewall
1 个赞
IPMI 固件防火墙配置与黑 / 白名单验证全攻略
(适用于 NetFn 0x30 专用命令)
1 名词解释与通用字段
| 字段 | 值 / 说明 |
|---|---|
| NetFn | 0x30(厂商自定义) |
| CMD (防火墙) | 0x93 |
| CMD (升级控制) | 0x91 |
| Manufacturer ID | 3 Byte 小端序;示例 (0x0007DB) → 0xDB 0x07 0x00 |
| BT 通道号 | 0x08 |
| 全通道通配 | 0xFF |
下文所有原始报文及脚本参数均以 十六进制字节、带
0x前缀 给出,确保可直接复制到ipmitool raw。
2 子命令速查表
| 子命令码 | 功能 | 章节 |
|---|---|---|
0x4A |
设置固件防火墙(启用 / 模式 / 清表) | § 3 |
0x3F |
添加 / 删除黑白名单条目 | § 4 |
0x4B |
查询黑 / 白名单条目 | § 5 |
0x4C |
获取防火墙启用状态与模式 | § 6 |
3 设置固件防火墙 (Sub Cmd 0x4A)
| Byte | 字段 | 取值 | 说明 |
|---|---|---|---|
| 1‑3 | Manufacturer ID | 0xDB 0x07 0x00 |
|
| 4 | Sub Cmd | 0x4A | 固定 |
| 5 | Firewall Status | 0x01=Enable 0x00=Disable |
|
| 6 | Mode | Status=1 时有效:0x01=WhiteList 0x00=BlackList;Status=0 时填 0xFF |
|
| 7 | Clear Flag | Status=1 时有效:0x01=清空表 0x00=保留 |
|
| 8‑10 | Reserved | 0x00 0x00 0x00 |
示例:启用白名单并清空旧表
0x30 0x93 0xDB 0x07 0x00 0x4A 0x01 0x01 0x01 0x00 0x00 0x00
4 管理黑 / 白名单 (Sub Cmd 0x3F)
| Byte | 字段 | 取值 | 说明 |
|---|---|---|---|
| 1‑3 | Manufacturer ID | 0xDB 0x07 0x00 |
|
| 4 | Sub Cmd | 0x3F | |
| 5 | Parameter | 0x00=黑名单 0x01=白名单 |
|
| 6 | Option | 0x00=添加 0x01=删除 |
|
| 7 | Read / Write | 0x00=read 0x01=write |
|
| 8 | NetFn | — | 目标指令 NetFn |
| 9 | CMD | — | 目标指令 CMD |
| 10 | Channel | 黑名单:0x08=BT通道 0xFF=所有通道;白名单:0x08=BT通道 0xFF=无效 |
|
| 11‑n | Data | ≤ 30 Byte | 目标指令 Request Data;无参数可省略。 |
若报文中未包含 data 段,则表示屏蔽整个 netfn + cmd 命令,不论其携带何种 data,一律禁止执行。
若报文中包含 data 段,则表示仅屏蔽该命令在携带特定 data 参数时的执行行为。若 data 内容不同,该命令仍可被允许执行。
5 查询黑 / 白名单 (Sub Cmd 0x4B)
| Byte | 字段 | 说明 |
|---|---|---|
| 1‑3 | Manufacturer ID | 0xDB 0x07 0x00 |
| 4 | Sub Cmd | 0x4B |
| 5 | List Type | 0x00=黑名单 0x01=白名单 |
| 6 | ID | 0x00‑0xFF (0=第 1 条) |
响应要点
- Byte 5 = 名单总条数 M;
- Byte 6 … =
Len NetFn CMD Chan Data…(单条记录)。
6 获取防火墙状态 (Sub Cmd 0x4C)
| Byte | 字段 | 说明 |
|---|---|---|
| 1‑3 | Manufacturer ID | 0xDB 0x07 0x00 |
| 4 | Sub Cmd | 0x4C |
| Byte | 返回字段 | 说明 |
|---|---|---|
| 5 | Firewall Status | 0x00=关闭 0x01=开启 |
| 6 | Mode | Status=1:0x00=黑名单 0x01=白名单;Status=0:0xFF |
7 用例合集(含 固件升级命令 验证)
被测指令:
NetFn 0x30 / CMD 0x91 / Sub Cmd 0x06 / Op 0xAA(启动升级)。
7‑1 黑名单:阻断升级命令
# 1) 启用黑名单
0x30 0x93 0xDB 0x07 0x00 0x4A 0x01 0x00 0xFF 0x00 0x00 0x00
# 2) 将升级命令加入黑名单
0x30 0x93 0xDB 0x07 0x00 0x3F 0x00 0x00 0x01 0x30 0x91 0x08
7‑2 白名单:仅允许升级命令
# 1) 启用白名单并清空
0x30 0x93 0xDB 0x07 0x00 0x4A 0x01 0x01 0x01 0x00 0x00 0x00
# 2) 仅添加升级命令到白名单
0x30 0x93 0xDB 0x07 0x00 0x3F 0x01 0x00 0x01 0x30 0x91 0x08
7‑3 批量添加两条指令到黑名单
# 切回黑名单模式但保留列表
0x30 0x93 0xDB 0x07 0x00 0x4A 0x01 0x00 0x00 0x00 0x00 0x00
# 仅添加升级命令到黑名单
0x30 0x93 0xDB 0x07 0x00 0x3F 0x00 0x00 0x01 0x30 0x91 0x08
8 Shell 批量脚本示例(一次操作 20 台 BMC)
脚本文件: ipmi_firewall_batch.sh
#!/usr/bin/env bash
# 批量为 20 台 BMC 启用白名单并仅放行升级命令
# 固定参数:
# Manufacturer ID : 0xDB 0x07 0x00 (示例厂商)
# 升级命令 NetFn/CMD: 0x30 0x91
# BT 通道 : 0x08
# 默认账户 : admin / pass
MANUF="0xDB 0x07 0x00" # 厂商 ID,带 0x 前缀
ENABLE_WHITE="0x4A 0x01 0x01 0x01 0x00 0x00 0x00" # 启用白名单 + 清表
ADD_UPGRADE="0x3F 0x01 0x00 0x01 0x30 0x91 0x08" # 将升级命令加入白名单
GET_STATUS="0x4C" # 查询状态
# 20 台 BMC IP(示例段 192.168.1.100–119)
HOSTS=(192.168.1.{100..119})
for HOST in "${HOSTS[@]}"; do
echo "==== $HOST ===="
# 1) 启用白名单并清空旧表
ipmitool -I lanplus -H "$HOST" -U admin -P pass raw 0x30 0x93 $MANUF $ENABLE_WHITE
# 2) 仅添加升级命令
ipmitool -I lanplus -H "$HOST" -U admin -P pass raw 0x30 0x93 $MANUF $ADD_UPGRADE
# 3) 读取防火墙状态(返回 0x00 0x01 ⇒ Enabled / WhiteList)
STATUS=$(ipmitool -I lanplus -H "$HOST" -U admin -P pass raw 0x30 0x93 $MANUF $GET_STATUS)
echo "Status Bytes: $STATUS"
done
说明:大多数
ipmitool版本支持0x前缀;如遇异常,可移除前缀并保持空格分隔。
2 个赞
如果你觉得我的教程对你有帮助,不妨点个赞+解决方案支持一下~![]()
顺带提一句,前面几篇教程大多没有涉及添加/删除命令的实际操作,可能只是照文档复述了一遍。
我这边提供了完整可用的解决方案,欢迎优先参考!

