CalcGuide · 技术博客主页 / 一页纸学习计划
🟡

防火墙与内核加固:把好第三道门

分类:安全与可靠性 · 路径:docs/topics/network-and-kernel/README.md

#linux#nftables#sysctl#lockdown#kernel

从 nftables/iptables 防火墙到 sysctl、内核 lockdown、Secure Boot、模块禁用,把进出的网络流量和内核能力都压到最小

父主题

Linux 系统安全加固:从账号权限到纵深防御

子主题(0)

防火墙与内核加固:把好第三道门

0. 元信息

1. 学习路线

nftables 范式(tables / chains / sets / maps / verdict)
  → INPUT/OUTPUT/FORWARD chain 与 default policy
  → conntrack(ct state established,related / new / invalid)
  → rate-limit(limit / meter)
  → TCP Wrappers(hosts.allow / hosts.deny)
  → sysctl 基础(net.ipv4.* / net.ipv6.* / kernel.* / fs.*)
  → 反欺骗(rp_filter、accept_redirects、send_redirects、source_route)
  → ASLR 与信息泄露(randomize_va_space、kptr_restrict、dmesg_restrict)
  → Kernel lockdown(integrity / confidentiality)
  → Secure Boot 与 MOK
  → Module 禁用(blacklist / install <mod> /bin/true)
  → 危险系统调用(kexec_load、kexec_file_load、SYS_PTRACE、Yama ptrace_scope)

按”先收网络入口,再锁内核”的顺序:网络层先拒绝默认,限速已知服务;内核层先 ASLR / kptr 收信息,再 lockdown 改 root 信任,再禁危险调用。

2. 阶段周数分配(1.5~2 周,建议 2 周)

阶段1.5 周速通2 周稳推备注
1. nftables 范式(tables / chains / hooks)0.5 天1 天nft list ruleset 起步
2. INPUT / OUTPUT / FORWARD + policy0.5 天0.5 天默认 DROP;放行 lo
3. conntrack 状态机0.5 天1 天established,related accept
4. rate-limit + sets0.5 天1 天limit rate 6/minute + ssh_blacklist
5. TCP Wrappers(hosts.allow/deny)0.5 天0.5 天tcpdmatch sshd 10.0.0.5
6. sysctl 基线1 天1 天/etc/sysctl.d/99-hardening.conf
7. ASLR / kptr / dmesg / Yama0.5 天0.5 天cat /proc/kallsyms 验证
8. Kernel lockdown + Secure Boot0.5 天1 天grub cmdline + mokutil
9. Module 禁用 + 危险系统调用0.5 天0.5 天kexec_load_disabled=1

每天 1.5 小时;1.5 周速通每天 2 小时能跑完,但 lockdown + Secure Boot 容易踩兼容性。建议 2 周:给 lockdown 与黑名单模块被 initrd 依赖的时间调试。

3. 九阶段表

阶段核心知识实践产出可观察学会标准
1. nftables 范式nft add table inet filter add chain ... hook ... priority ... policy drop写出最小可通的 nftables setnft list ruleset 看到预期规则;nft 命令持久化到 /etc/nftables.conf
2. INPUT / OUTPUT / FORWARDhook priority 0、policy drop、iif lo acceptoif lo accept默认 DROP;放行环回nmap 端口扫描只看 22;本地 curl localhost
3. conntrackct state established,related accept ct state invalid drop已建连接回包自动放行SSH 第一次连得通;伪造 SYN 拒收
4. rate-limit 与 setslimit rate 6/minuteadd set 收集 SSH 失败 IPSSH 限速;暴力破解日志可见1 分钟 5 次 SSH 失败后拒绝;nft list set inet filter ssh_blacklist
5. TCP Wrappers/etc/hosts.allow /etc/hosts.deny、libwrap限定 SSH 仅内网tcpdmatch sshd 10.0.0.5 验证
6. sysctl 基线net.ipv4.ip_forward net.ipv4.conf.all.rp_filter net.ipv4.conf.all.accept_redirects net.ipv4.conf.all.send_redirects net.ipv4.conf.all.accept_source_route net.ipv4.icmp_echo_ignore_broadcasts net.ipv4.tcp_syncookies net.ipv4.conf.all.log_martians/etc/sysctl.d/99-hardening.confsysctl -a 与 CIS 对照;重启后保持
7. ASLR 与 kptrkernel.randomize_va_space=2 kernel.kptr_restrict=2 kernel.dmesg_restrict=1 kernel.yama.ptrace_scope改完验证cat /proc/kallsyms 只看到 0 地址;dmesg 限制
8. Kernel lockdown + Secure Bootlockdown=integrity(grub cmdline)、MOK 概念、UEFI Secure Boot重启后 /sys/kernel/security/lockdown 显示 [integrity]cat 看模式;efivar 验证 Secure Boot 启用
9. module 与系统调用modprobe -r 测试、install usb-storage /bin/true blacklist firewire-core、kexec_load 禁用、SYS_PTRACE 限制/etc/modprobe.d/ 黑名单;sysctl kernel.kexec_load_disabled=1`lsmod

关键陷阱:INPUT 默认 DROP 但没放行已建连接,SSH 上得去下不来;IPv6 单独处理;ufw / firewalld 与 nftables 冲突;sysctl -w 改了不写文件;lockdown=confidentiality 后调试复杂;黑名单模块被 initrd 强依赖清不掉。

4. 第一周任务(每天 1.5~2 小时)

Day 1 约定:用一台 Ubuntu 22.04 或 RHEL 9.x 虚机/容器,先建快照;记录 cat /etc/os-releaseuname -rnft --versionsysctl -a | wc -lmokutil --sb-state。保 console / 第二 SSH 会话,避免 INPUT DROP 锁外。

任务当天交付自检命令
Day 1nftables 范式起步:写 /etc/nftables.d/01-base.nft,定义 table inet filter + 3 chains(input/output/forward)+ policy dropnft -f 加载;nft list ruleset 看生效01-base.nft + nft list rulesetnft list rulesetnft --versionsystemctl status nftables
Day 2INPUT 放行环回 + 已建连接:iif lo accept oif lo accept ip saddr 127.0.0.0/8 accept ct state established,related accept ct state invalid drop;OUTPUT 默认 accept;FORWARD DROP;从本机 curl localhost:8080 通;nmap localhost 看端口nftables 基础规则nmap -p 22,80,443 localhostnft list chain inet filter inputcurl -sI http://localhost:8080
Day 3conntrack + rate-limit:INPUT chain 加 tcp dport { 22, 80, 443 } accepttcp dport 22 meter \{ ip saddr limit rate 6/minute } accept,失败 6 次后拒绝;用 nchydra 模拟;nft list set inet filter ssh_blacklist 看收集 IPrate-limit 验证nft list meter inet filter xxxnft list settime nc -zv localhost 22 6 次后第 7 次 Connection timed out
Day 4TCP Wrappers + sets:在 /etc/hosts.denyALL: ALL/etc/hosts.allowsshd: 10.0.0.0/8tcpdmatch sshd 10.0.0.5 应 allow;tcpdmatch sshd 8.8.8.8 应 deny;INPUT chain 内增加 ip saddr @blocked_set drophosts + nft 联动tcpdmatch sshd 10.0.0.5tcpdmatch sshd 8.8.8.8cat /etc/hosts.allow
Day 5sysctl 基线:写 /etc/sysctl.d/99-hardening.conf,涵盖 net.ipv4.ip_forward=0net.ipv4.conf.all.rp_filter=1net.ipv4.conf.all.accept_redirects=0net.ipv4.conf.all.send_redirects=0net.ipv4.conf.all.accept_source_route=0net.ipv4.conf.all.log_martians=1net.ipv4.icmp_echo_ignore_broadcasts=1net.ipv4.tcp_syncookies=1net.ipv6.conf.all.accept_redirects=0net.ipv6.conf.all.accept_source_route=0sysctl -p /etc/sysctl.d/99-hardening.conf 加载;重启后验证sysctl 持久化`sysctl -a
Day 6ASLR + 信息泄露:kernel.randomize_va_space=2kernel.kptr_restrict=2kernel.dmesg_restrict=1kernel.yama.ptrace_scope=1fs.protected_hardlinks=1fs.protected_symlinks=1;验证:cat /proc/sys/kernel/randomize_va_space 显示 2;非 root `cat /proc/kallsymshead应只见 0 地址;非 rootdmesg` 应被拒信息保护验证
Day 7项目:Kernel lockdown + Module 禁用。在 GRUB cmdline 加 lockdown=integrity/etc/default/grub GRUB_CMDLINE_LINUX 追加,grub-mkconfig -o /boot/grub/grub.cfg);重启后 cat /sys/kernel/security/lockdown 显示 [integrity] write];新建 /etc/modprobe.d/blacklist-usb.confinstall usb-storage /bin/true + blacklist usb-storageinstall firewire-core /bin/true + blacklist firewire-coresysctl -w kernel.kexec_load_disabled=1;持久化到 /etc/sysctl.d/99-hardening.confdracut -fupdate-initramfs -u 重建 initrd;重启后 `lsmodgrep -E ‘usb-storage|firewire’ 应空;sysctl kernel.kexec_load_disabled` = 1lockdown + module 验证输出

Day 7 拆解

步骤 A —— 最小可用(90 分钟)

  1. 备份:sudo cp /etc/default/grub /etc/default/grub.bak
  2. sudo sed -i 's/^GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="lockdown=integrity /' /etc/default/grub
  3. sudo grub-mkconfig -o /boot/grub/grub.cfg(UEFI:sudo grub-mkconfig -o /boot/efi/EFI/<distro>/grub.cfg);
  4. sudo reboot
  5. 重启后 cat /sys/kernel/security/lockdown 应包含 [integrity];
  6. /etc/modprobe.d/blacklist.conf 加:
    install usb-storage /bin/true
    blacklist usb-storage
    install firewire-core /bin/true
    blacklist firewire-core
    
  7. sudo sysctl -w kernel.kexec_load_disabled=1 && echo 'kernel.kexec_load_disabled = 1' | sudo tee /etc/sysctl.d/99-hardening.conf
  8. sudo dracut -f(RHEL)或 sudo update-initramfs -u(Ubuntu)重建 initrd,否则 initrd 早加载;
  9. sudo rebootlsmod | grep -E 'usb-storage|firewire-core' 应为空。

步骤 B —— 验证 + 边界(30~45 分钟)

  1. cat /sys/kernel/security/lockdown 看精确模式 [integrity] 还是 [confidentiality]
  2. sudo modprobe -v usb-storagemodprobe: ERROR: could not insert 'usb-storage': Operation not permitted
  3. sudo sysctl kernel.kexec_load_disabled = 1;echo c > /proc/sysrq-trigger 不应触发 kexec;
  4. journalctl -k --since today | grep -i lockdown 看启动日志;
  5. 关键 sysctl 与 CIS 对照表写进 notes/cis-3x4x-gap.md
  6. 把 lockdown 临时改 confidentiality 跑 5 分钟验证差异化访问,再改回 integrity 持久。

5. 阶段通用验收(每一阶段都通过)

  1. 能用 1 张表说出 CIS Benchmark 3.x(网络)/ 4.x(防火墙)/ 6.x(sysctl 与服务)的核心控制项;
  2. 改完配置用 nft list rulesetsysctl -acat /sys/kernel/security/lockdownlsmodsysctl kernel.kexec_load_disabled 看证据,存进 notes/
  3. 制造 1 个对照实验:留 net.ipv4.conf.all.accept_source_route=1scapy 伪造源路由包进入;改 0 → 收到 RST/丢弃;
  4. 至少 3 组自定义数据:故意暴露 SSH 到公网看 journalctl -u sshd 暴力破解记录;故意 accept_redirects=1 接收伪造 ICMP redirect;故意 randomize_va_space=0 跑 gdb 验证地址布局;
  5. 记录变更:每改一个规则 / sysctl / modprobe 块 写 1 条(who/when/what/why/CIS 控制项号);
  6. 能修改已有规则集(删/加一条 nftables 规则、删/加一条 sysctl),而不是只照搬。

6. 最终验收(学完 9 阶段后)

7. 综合项目

首选:写一份 harden-firewall-kernel.md —— 准备一台干净的 Ubuntu 22.04 虚机,先基线(nmap localhostsysctl -a | wc -lcat /sys/kernel/security/lockdownlsmod | wc -l),按 9 阶段顺序加固,用同一组命令对比前后

要求:

备选:在一台故意”老配置”(INPUT ACCEPT 默认)机器上配置 nftables,验证仅放行 22/80/443;用 hydramedusa 模拟 SSH 爆破看 rate-limit 生效。

任何综合项目都必须包含:

  1. 需求与成功标准(含端口白名单、sysctl 持久化、lockdown 模式);
  2. 基线 vs 目标差距表;
  3. 配置按层(nftables / TCP Wrappers / sysctl / ASLR / lockdown / module);
  4. 脚本化(scripts/harden-net-kernel.sh + scripts/verify-net-kernel.sh),幂等可重跑;
  5. 正常 + 异常验证(INPUT ACCEPT → 端口全暴露;INPUT DROP + conntrack → 上得去下不来;lockdown none → root 自由加载 module);
  6. 报告:基线、目标、结果、剩余项、复盘;
  7. README;
  8. 复盘记录。

本主题贡献(Loop 6-D · linux-hardening / network-and-kernel)

本主题交付”nftables + sysctl + ASLR + 模块黑名单 + lockdown”五层网络与内核加固脚本化包,故意把 INPUT 切回 ACCEPT 看端口暴露,再切回 DROP + conntrack 看正常放行,作为验收金标准。

3 项核心职责

4 项交付物

  1. 基线 vs 目标差距表:含端口白名单(22 / 80 / 443 必要出站)、sysctl 持久化核对、ASLR 等级、lockdown 模式四项指标 + 验证命令(nft list ruleset / sysctl -a / cat /proc/sys/kernel/randomize_va_space / cat /sys/kernel/security/lockdown)。
  2. nftables 规则集 + conntrack/etc/nftables.conf(含 base chain / ct state / rate limit),故意 INPUT ACCEPT 验证暴露后切回 DROP + conntrack 验证回程通。
  3. sysctl + ASLR 持久化/etc/sysctl.d/99-hardening.conf(IPv4 / IPv6 转发、SYN cookies、rp_filter、ignore redirect)+ kernel.randomize_va_space=2 写入 /etc/sysctl.d/ 与 initrd。
  4. 模块黑名单 + lockdown/etc/modprobe.d/hardening-blacklist.conf(dccp / sctp / rds / tipc 等)+ lockdown ≥ integrity + initrd 黑名单同步,配 scripts/harden-net-kernel.sh + scripts/verify-net-kernel.sh 幂等可重跑。

3 个验收指标

8. 推荐开源资料(按角色分工,避免堆链接)

阶段角色资料链接用法
1~5nftables 权威man nft(8)man nftables(8)、nftables wikihttps://wiki.nftables.org/字段第一站;按 hook 优先级排错
1~5nftables 实战Arch Wiki: nftableshttps://wiki.archlinux.org/title/nftablessample 脚本;nft monitor trace 调试
1~5旧 iptablesman iptables(8)、iptables-extensions(8)https://man7.org/linux/man-pages/存量系统排错;iptables-translate 转 nft
5TCP Wrappersman hosts_access(5)man tcpdmatch(8)https://man7.org/linux/man-pages/tcpdmatch 调试 @ / EXCEPT
6~7sysctl 权威man sysctl(8)Documentation/admin-guide/sysctl.txthttps://docs.kernel.org/admin-guide/sysctl/按字段含义改;性能 vs 安全
6~7sysctl 性能Brendan Gregg 博客 / Systems Performancehttps://www.brendangregg.com/sysctl 性能影响
8LockdownDocumentation/admin-guide/lockdown-credentials.rsthttps://www.kernel.org/doc/html/latest/admin-guide/index.htmlintegrity vs confidentiality
8Secure Bootman mokutil(1)、Ubuntu: SecureBoothttps://wiki.ubuntu.com/SecurityTeam/SecureBootUEFI 启用验证;mokutil --sb-state
9模块禁用man modprobe.d(5)、Ubuntu: Kernel Hardeninghttps://wiki.ubuntu.com/Security/Featuresinstall <mod> /bin/true 用法
9YamaDocumentation/admin-guide/LSM/https://docs.kernel.org/admin-guide/LSM/ptrace_scope 0/1/2/3 解释
全部CIS / DISACIS Benchmarks + DISA STIGhttps://www.cisecurity.org/ · https://public.cyber.mil/stigs/注册下载;逐条对照
全部攻击者视角Hanno Böck《Linux Hardening in Hostile Networks》https://michael-wolf.de/解释 CIS 为什么这么定

许可证提示:CIS Benchmarks 注册免费账号下载;kernel docs 公开;ComplianceAsCode SSG 是 GPL-3.0+ / BSD;systemd / iptables / nftables 都是 GPL-2.0;Brendan Gregg 书籍按出版社许可。复制 CIS 控制点脚本到生产前先在 staging 验证 —— 默认读思路后自己写

默认使用顺序man page → kernel docs / Arch Wiki → CIS / DISA → Brendan Gregg 性能视角 → 实操(nft / sysctl / modprobe)→ 复盘到 notes/retrospective.md

9. 学习资料汇聚(v0.3 自包含)

本节由本计划生成。

9.1 背景与动机

账号和权限层把”谁能进”和”能做什么”管住。剩下的问题是”能连到哪”和”内核能信谁”。

网络层是攻击面最大的部分:SSH 爆破、CVE 利用、UDP flood、内部横向。Linux 提供 iptables / nftables 内核层包过滤、conntrack 状态机、TCP Wrappers 进程层守护、UFW/firewalld 高级抽象。CIS / DISA 都把防火墙列为必做项。

内核层是 rootkit 和漏洞利用的最终战场。ASLR 抬高利用门槛,kptr_restrict 泄露降低,lockdown 切断 root 与内核的信任链,模块禁用减少攻击面,kexec_load 限制则防止”内加载内核”逃避 UEFI Secure Boot。Yama 的 ptrace_scope 限制跨进程 ptrace。

9.2 概念地图

flowchart TB
  Netfilter[Linux Netfilter]
  NFT[nftables]
  IPT[iptables]
  UFW[ufw / firewalld]
  CT[conntrack]
  TW[TCP Wrappers / libwrap]
  IPv4[net.ipv4.*]
  IPv6[net.ipv6.*]
  Kernel[kernel.*]
  FS[fs.*]
  ASLR[ASLR / kptr / dmesg]
  Lockdown[lockdown integrity / confidentiality]
  SB[Secure Boot / MOK]
  Mod[Module blacklist / install]
  Kexec[kexec_load / SYS_PTRACE]
  Yama[Yama ptrace_scope]
  Netfilter --> NFT
  Netfilter --> IPT
  NFT --> CT
  IPT --> CT
  NFT --> UFW
  TW --> Netfilter
  Kernel --> ASLR
  Kernel --> Lockdown
  Kernel --> Mod
  Lockdown --> SB
  Kernel --> Kexec
  Kernel --> Yama

9.3 基础知识讲解

9.3.1 主推

资料角色评分
man nft(8) man nftables(8)nftables 权威5
man iptables(8) iptables-extensions(8)iptables 字段4
man sysctl(8) man sysctl.conf(5)sysctl5
man capabilities(7)跨层引用5
Documentation/networking/ip-sysctl.txt (kernel docs)字段解释5
Documentation/admin-guide/LSM/ (kernel docs)LSM / lockdown4
Hanno Böck, Linux Hardening in Hostile Networks攻击者视角4
Brendan Gregg 博客 / Systems Performancesysctl 性能 vs 安全解释4
Red Hat Security Guide: Network / Kernel实战4
Arch Wiki: nftables / Sysctl / Security字段级4

9.3.2 备查

资料链接
nftables wikihttps://wiki.nftables.org/
Arch Wiki: nftableshttps://wiki.archlinux.org/title/nftables
kernel sysctl docshttps://docs.kernel.org/admin-guide/sysctl/
Linux Kernel Lockdownhttps://www.kernel.org/doc/html/latest/admin-guide/index.html
Ubuntu: Kernel Hardeninghttps://wiki.ubuntu.com/Security/Features
UFW man pagehttps://www.kernel.org/doc/html/latest/admin-guide/index.html

9.3.3 必查 man pages

9.4 经典问题与经典案例

#问题为什么会重要最简答案 / 证据
1INPUT 默认 DROP 没放行已建第一次连得上,回应包被拒ct state established,related accept
2没放行 lo本地服务挂iif lo accept / oif lo accept
3ufw 与 nftables 规则混用规则冲突选其一;用 nft 的话禁 ufw
4IPv6 没防攻击者走 v6显式 inet family 或 ip6tables
5ip_forward=1 默认主机变路由器显式 0
6accept_source_route=1源路由攻击0
7accept_redirects=1ICMP redirect 攻击0
8send_redirects=1主机发 ICMP redirect0
9rp_filter=0IP 欺骗1(严格)或 2(松)
10tcp_syncookies=0SYN flood1
11icmp_echo_ignore_broadcasts=0smurf 攻击1
12log_martians=0异常包不记录1
13randomize_va_space=0ASLR 关2
14kptr_restrict=0内核地址泄露2
15dmesg_restrict=0非 root 看 dmesg1
16yama.ptrace_scope=0跨进程 ptrace1 或更高
17lockdown=noneroot 自由改内核integrity
18没启 Secure Boot启动链不受保护UEFI 开 Secure Boot
19USB storage 没禁BadUSBinstall usb-storage /bin/true
20kexec_load_disabled=0加载任意内核1
21没禁 firewire / thunderboltDMA 攻击modprobe blacklist
22没禁 bluetooth(服务器)蓝牙攻击面blacklist
23nft 规则不持久重启丢/etc/nftables.conf + systemctl enable nftables
24iptables 与 nftables 共存顺序错乱二选一
25没限 SSH 速率暴力破解limit rate 6/minute + sets
26rate-limit 用 limit 不是 meter不精确meter 是 nft 新方式
27防火墙规则允许本机出网到任何反向 shell 数据外泄OUTPUT 默认 DROP + 必要白名单
28conntrack 表满丢包nf_conntrack_max 调整

9.5 学习难点

概念难点

难点为什么会卡突破路径
nftables hook priority数字越小越早man nftables hook 章节
ct state 4 状态new established related invalid画状态机;先 established,related
iptables / nftables / ufw 共存谁先生效iptables-nft 转换;推荐 nft 单跑
ASLR、PIE、stack canary 区别多个机制各自独立;ASLR 是地址随机化
lockdown 两种模式integrity vs confidentialitycat /sys/kernel/security/lockdown
kexec 与 kexec_file两套接口kexec_load_disabled / Secure Boot 限制

思维难点

难点为什么会卡突破路径
改了 nftables SSH 连不上INPUT DROP 又没放行改前保 console;先 ACCEPT 再 DROP
sysctl -w 后重启失效没写文件/etc/sysctl.d/99-*.conf
黑名单模块 initrd 必需initrd 强依赖lsmod 与 initramfs 依赖;用 install

工程难点

难点为什么会卡突破路径
nftables 复杂 set 性能规则多慢set 哈希表;meter 替代 limit
几百台机器同步 nftables 规则手工Ansible 模板;iptables-save 风格
业务要 listen 任意端口默认 DROP 拦nft monitor trace 找缺失规则

9.6 技术标准与接口

9.6.1 Entity

名称版本组织状态许可证
nftables1.0+Netfilter 项目活跃GPL-2.0
iptables1.8+Netfilter 项目维护GPL-2.0
conntrack内核模块kernel.org主流GPL-2.0
ufw0.36+Canonical活跃GPL-3.0
firewalld2.xRed Hat活跃GPL-2.0
Linux sysctl持续kernel.org主流GPL-2.0
Linux Kernel Lockdown5.4+kernel.org主流GPL-2.0
UEFI Secure Boot2.xUEFI Forum主流公开
Yama主流kernel.org主流GPL-2.0
ComplianceAsCode SSG持续ComplianceAsCode活跃GPL-3.0+ / BSD

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

| 层级 | 能力 | |---|---|---| | L0 | 知道防火墙、内核参数、Secure Boot | | L1 | 看得懂一段 nftables 规则与 sysctl 输出 | | L2 | 能写 nftables 限 SSH / rate-limit;写 sysctl 持久化 | | L3 | 能解释每条规则的 conntrack 行为、ASLR 原理、lockdown 模式区别 | | L4 | 能为多机集群写统一防火墙基线、自动化验证新规则、CI 卡 lockdown |

本计划目标:L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础
  4. 工程技术
  5. Web 与后端
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力
  9. 安全与可靠性

本计划归属:安全与可靠性 主 + 工程技术 辅。


直接依赖(2)

查看知识图谱