openUBMC ipmi 中的白名单黑名单打开命令配置白名单类名

背景
客户提出关闭带内发ipmi 命令能力,经了解 ipmi 黑白名单可实现
诉求
1、open UBMC 如何打开 白/黑 名单 命令是啥
2、功能类名叫啥

  1. 查询防火墙黑白名单状态
    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-关闭

  2. 配置类名
    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 0x000xFF (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 个赞

如果你觉得我的教程对你有帮助,不妨点个赞+解决方案支持一下~:blush:
顺带提一句,前面几篇教程大多没有涉及添加/删除命令的实际操作,可能只是照文档复述了一遍。
我这边提供了完整可用的解决方案,欢迎优先参考!