【AI×实时Linux:极速实战宝典】网络安全 - 在RT-Linux上配置轻量级防火墙(nftables)与SELinux,保护工业节点
一、简介:为什么工业 RT-Linux 必须“自带防火墙”?
-
工业 4.0 场景下,机械臂、AGV、边缘 AI 盒子全部直连云端,实时操作系统 ≠ 安全操作系统。
-
一次“勒索软件”事件即可让整条产线停机 24 h,损失 > 百万。
-
传统 iptables 规则冗长、性能抖动大;nftables 内核原生、延迟低,搭配 SELinux 强制访问控制(MAC),可实现“毫秒级实时 + 最小权限”双重保障。
掌握本文技能 = 让 RT-Linux 既跑得快,又扛得住。
二、核心概念:5 个关键词速览
| 关键词 | 一句话 | 本文作用 |
|---|---|---|
| RT-Linux | 打 PREEMPT_RT 补丁的 Linux,中断延迟 < 50 μs | 基础平台 |
| nftables | 内核 4.x 引入的下一代包过滤框架,语法简洁,延迟低 | 网络第一道门 |
| SELinux | 强制访问控制(MAC),“默认拒绝”任何访问 | 系统第二道门 |
| 最小权限 | 只开放业务必需的端口/文件权限,其余全堵 | 安全基线 |
| 延迟测试 | cyclictest / hping3 量化防火墙对实时性的影响 | 验收指标 |
三、环境准备:10 分钟搭好实验沙箱
1. 硬件
-
x86_64 多核主板,≥2 核 4 GB 内存
-
网卡:Intel I210/I211(驱动成熟,实时友好)
2. 软件
| 组件 | 版本 | 安装命令 |
|---|---|---|
| RT 内核 | 5.15.71-rt53 | 见“一键脚本” |
| nftables | 1.0.6+ | 内核 ≥5.10 自带 |
| SELinux | 3.2+ | apt install selinux-basics |
| 测试工具 | cyclictest, hping3, nmap | 同上下载 |
3. 一键装 RT 内核(可复制)
#!/bin/bash
# install_rt.sh
VER=5.15.71
RT=patch-5.15.71-rt53.patch.xz
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v$VER/linux-image-${VER}-rt53_${VER}-rt53_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v$VER/linux-headers-${VER}-rt53_${VER}-rt53_amd64.deb
sudo dpkg -i linux*.deb
sudo update-grub
sudo reboot
重启选“RT 内核”进入,uname -r 出现 5.15.71-rt53 即可。
四、应用场景(300 字):边缘 AI 质检工位
某汽车零部件厂,在产线末端部署 RT-Linux 边缘盒:
-
2 × GigE 相机触发周期 4 ms,AI 推理耗时 2.5 ms,剩余 1.5 ms 需完成网络上报与 PLC 握手;
-
同时通过 5G 上云,存在被扫描/入侵风险;
-
要求:网络延迟增加 < 100 μs,安全策略需阻挡除 22/443/502 之外全部端口,AI 模型文件只读不可改。
采用本文方案:
-
nftables 默认丢弃,仅放行 SSH(22)、WebSocket(443)、Modbus-TCP(502);
-
SELinux 给 AI 推理服务定制域
ai_t,仅允许读取/opt/model/、绑定 502 端口; -
上线后 cyclictest 测得最大延迟 38 μs,较未开防火墙仅增加 7 μs,满足实时需求。
五、实际案例与步骤:从零到“能抗扫描”
实验目录统一:~/security-lab,所有脚本放此处。
mkdir -p ~/security-lab && cd ~/security-lab
5.1 启用 nftables 并设置最小规则
# 1. 启用服务
sudo systemctl enable --now nftables
# 2. 清空旧规则
sudo nft flush ruleset
# 3. 写入最小规则(保存为 minimal.nft)
cat <<EOF | sudo tee minimal.nft
#!/usr/sbin/nft -f
table inet filter {
chain input {
type filter hook input priority 0;
# 允许本地回环
iif lo accept
# 已建立连接
ct state established,related accept
# 放行 SSH + HTTPS + Modbus-TCP
tcp dport {22, 443, 502} accept
# 其余默认丢弃
drop
}
chain forward { type filter hook forward priority 0; drop }
chain output { type filter hook output priority 0; accept }
}
EOF
sudo nft -f minimal.nft
验证:另机 nmap -p 1-65535 <target> 只显示 22/443/502 开放,其余 filtered。
5.2 延迟对比:开/关防火墙各跑一次
# 关防火墙基准
sudo systemctl stop nftables
cyclictest -p99 -i100 -d60s -n > base.log &
# 60 s 后 Ctrl+C,看 Max
grep "Max" base.log
# 开防火墙
sudo systemctl start nftables
cyclictest -p99 -i100 -d60s -n > nft.log &
grep "Max" nft.log
典型结果(I210 网卡):
-
关:Max 31 μs
-
开:Max 38 μs
差值 7 μs,在工业节点可接受。
5.3 启用 SELinux 并进入强制模式
# 1. 安装
sudo apt install selinux-basics selinux-policy-default auditd
# 2. 激活(需重启)
sudo selinux-activate
sudo reboot
重启后:
getenforce # 应输出 Enforcing
5.4 为 AI 推理服务定制最小域
场景:可执行文件 /opt/ai/infer,模型只读 /opt/model/,监听 502。
# 1. 建立自定义模块目录
mkdir -p ~/security-lab/selinux
cd ~/security-lab/selinux
# 2. 编写策略 ai_infer.te
cat <<'TE' > ai_infer.te
policy_module(ai_infer, 1.0.0)
require {
type port_t;
type file_type;
class tcp_socket name_bind;
class file { read write };
class dir search;
}
type ai_t;
type ai_exec_t;
domain_type(ai_t)
domain_entry_file(ai_t, ai_exec_t)
# 允许绑定 502
allow ai_t port_t:tcp_socket name_bind;
# 允许读模型目录
type ai_model_t;
files_type(ai_model_t)
allow ai_t ai_model_t:file read;
allow ai_t ai_model_t:dir search;
TE
# 3. 编译模块
make -f /usr/share/selinux/devel/Makefile
# 生成 ai_infer.pp
sudo semodule -i ai_infer.pp
5.5 打标签 & 测试
# 给文件打标签
sudo chcon -t ai_exec_t /opt/ai/infer
sudo chcon -R -t ai_model_t /opt/model/
# 运行服务
sudo -u ai-user /opt/ai/infer &
# 尝试写模型(应拒绝)
echo "corrupt" > /opt/model/resnet50.onnx
# 查看 AVC 拒绝日志
sudo ausearch -m avc -ts recent
预期:写操作被拒绝,audit 日志出现 denied { write } → 证明 MAC 生效。
5.6 一键检查脚本(可复制)
#!/bin/bash
# check-security.sh
echo "========== Firewall =========="
sudo nft list ruleset | grep -E "dport|drop"
echo "========== SELinux ==========="
getenforce
echo "========== Open Ports ========="
ss -tlnp
echo "========== AVC Recent ========="
sudo ausearch -m avc -ts recent | tail -5
跑完即可截图放报告。
六、常见问题与解答(FAQ)
| 问题 | 现象 | 解决 |
|---|---|---|
| nftables 启动失败 | Error: Could not process rule: No such file or directory |
内核未开启 CONFIG_NF_TABLES → RT 内核打开即可 |
| cyclictest 延迟暴增 > 200 μs | 规则太多或日志级别 7 | 精简规则,关闭 trace;使用 limit 限速而非 log |
| SELinux 阻止 SSH 登录 | 无法远程 | 保留 sshd_t 域,切勿给 ssh_port_t 误删 |
| 容器内无法使用 nft | 权限不足 | docker run --cap-add=NET_ADMIN --cap-add=NET_RAW |
| 5G 模块掉线 | 防火墙未放行 QMI 端口 | 增加 udp dport {700, 710} 规则 |
七、实践建议与最佳实践
-
规则从“默认拒绝”开始,逐步放行——比“全开放再封堵”更安全。
-
实时优先:
-
避免在
input链大量使用log(printk 会抢占)。 -
用
counter做流量统计,再定时nft list counters批量读取。
-
-
SELinux 策略最小化:
-
一个服务一个域,禁止
domain自动转换。 -
用
audit2allow仅添加必要允许,拒绝“一键 permissive”。
-
-
持续监控:
-
Prometheus + node_exporter 采集
nft_counter、selinux_avc_denied_total。 -
Grafana 告警:AVC 拒绝突增 → 可能攻击或策略过严。
-
-
灾备回退:
-
保留串口或 IPMI 带外管理,防火墙策略误锁时可绕路。
-
重大升级前
nft list ruleset > backup.nft,一键回滚。
-
八、总结:一张脑图带走全部要点
RT-Linux 安全加固
├─ nftables:默认丢弃,放行 22/443/502,延迟 < 50 μs
├─ SELinux:自定义域 ai_t,仅读模型,绑定 502
├─ 观测:cyclictest 量化延迟,AVC 日志审权限
└─ 监控:Prometheus 采集规则命中 & 拒绝计数
实时性与安全性并非零和——只要遵循“最小权限 + 量化验证”,你就能让工业节点既抗得住扫描,又跟得上节拍。
立刻把本文 minimal.nft 和 ai_infer.te 复制到你的产线盒子,跑一遍 check-security.sh,下一波漏洞扫描,让攻击者只能看到“ filtered ”!祝你实时不掉线,安全不翻车。
更多推荐

所有评论(0)