简介:本资源为《网络安全基础应用与标准》(第五版)全册课后习题详解答案,面向高校计算机、信息安全及相关专业本科生及备考学生,精准解决课程学习、预习复习与期末冲刺中的核心难点。答案覆盖第1至12章全部思考题与习题,内容完整、排版清晰、PDF无乱码,涵盖OSI安全体系结构、主动/被动攻击分类、五大安全服务(认证、访问控制、保密性、完整性、不可否认性)、密码学基础(明文/密文/密钥/加解密算法)、分组与流密码对比、三重DES原理等关键知识点,并附有典型场景下的安全属性分析(如银行系统、电话交换、执法机构数据分级保护)及加密技术选型对照表。资源为单个PDF文件,大小仅1.22MB,轻量易下载、即开即用。已有1873人学习下载,适合作为课堂补充、自学核对与考前系统梳理的权威参考。
1. 这不是“答案集”,而是一份被误标为PDF的《网络安全基础应用与标准(第五版)》配套教学实践指南
你搜到这个标题,大概率正面临三种真实处境:刚开《网络安全基础》课的本科生,在图书馆翻到纸质教材却找不到配套实验环境;备考软考中级“信息安全工程师”的在职人员,发现书里提到的GB/T 22239-2019(等保2.0基本要求)、GB/T 25069-2017(术语标准)等条文读得懂字、却不知怎么落地;或是企业内训讲师,手握教材但缺可演示的配置片段、策略模板和验证命令。标题里那个“全网最实惠”的括号,恰恰暴露了痛点——大家真正要的从来不是“答案”,而是能把国标条款翻译成Linux命令、Wireshark过滤表达式、防火墙策略行和日志分析逻辑的实操锚点。这本书第五版的特殊性在于:它首次系统整合了等保2.0三级要求、密码应用安全性评估(密评)基础项、以及《网络安全法》《数据安全法》在技术层的映射点。所以本文不提供任何PDF下载链接或“答案”文本,而是带你用开源工具链,在本地复现书中第3章“边界防护”、第5章“访问控制”、第7章“安全审计”三个核心章节的全部可验证技术动作——从用iptables模拟等保2.0中“应限制默认账户的访问权限”条款,到用auditd捕获并归类“特权命令执行”事件,再到用logrotate+rsyslog实现“日志保存不少于180天”的合规基线。所有操作均基于Ubuntu 22.04 LTS(LTS版本是等保测评中明确允许的基线环境),无需商业软件,不依赖云平台,每一步命令都附带国标原文对照和失败回滚指令。
2. 用iptables+sysctl复现等保2.0三级“边界访问控制”要求:不只是封端口
等保2.0基本要求(GB/T 22239-2019)中,“安全区域边界”章节明确要求:“应限制默认账户的访问权限;应关闭不需要的系统服务、默认共享和高危端口”。很多读者误以为这等同于“关掉telnet”,但实际落地需分三层:网络层(端口/协议控制)、主机层(服务进程管控)、策略层(规则可审计可追溯)。本节用原生Linux工具链完成闭环验证。
2.1 构建最小化测试靶机:禁用systemd-resolved,暴露真实DNS端口行为
书中第3章图3-2展示“边界设备应阻断非授权DNS查询”,但多数人忽略一个关键前提:现代Linux发行版默认启用systemd-resolved,它会劫持53端口并转发至上游DNS,导致iptables规则失效。必须先剥离这层抽象:
# 停止并禁用systemd-resolved(等保测评中明确要求禁用非必要服务) sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved # 删除其创建的符号链接,让53端口真正空闲 sudo rm /etc/resolv.conf echo "nameserver 114.114.114.114" | sudo tee /etc/resolv.conf # 验证53端口是否真实释放(此时应无进程监听) sudo ss -tuln | grep ':53'提示:
ss -tuln比netstat更快更准确,且-n参数禁用DNS解析,避免因解析延迟造成误判。等保测评报告中要求提供“端口监听状态截图”,此命令输出即为有效证据。
2.2 编写符合等保条款的iptables规则链:拒绝所有→白名单放行→记录异常
等保2.0要求“默认拒绝,按需放行”,而非“默认放行,黑名单阻断”。以下规则链严格遵循该逻辑,并嵌入审计标记:
# 清空现有规则(生产环境慎用,此处为教学复现) sudo iptables -F sudo iptables -X # 设置默认策略:所有链默认DROP(对应等保“默认拒绝”原则) sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT # 允许本地回环(等保未禁止,且系统必需) sudo iptables -A INPUT -i lo -j ACCEPT # 允许已建立连接的响应流量(保障SSH等会话不中断) sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 白名单放行:仅允许业务必需端口(示例:Web服务80/443,管理端口22) sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # 关键审计规则:对所有被DROP的包打标记并记录(满足等保“安全审计”章节要求) sudo iptables -A INPUT -j NFLOG --nflog-group 1 sudo iptables -A FORWARD -j NFLOG --nflog-group 1 # 持久化规则(等保要求“安全策略应固化,重启不失效”) sudo apt install iptables-persistent -y sudo netfilter-persistent save参数说明:
--nflog-group 1:将日志发送至netlink组1,后续可用nft-log或ulogd2收集,这是等保要求的“独立审计通道”实现方式;-m state --state NEW:精确匹配新建连接,避免误放ESTABLISHED流量,比--syn更符合TCP状态机规范;netfilter-persistent save:生成/etc/iptables/rules.v4,该路径是等保测评中检查“策略持久化”的标准位置。
2.3 验证规则有效性:用nc和tcpdump交叉验证
仅看iptables -L不够,必须构造真实流量验证:
# 在另一台机器(或本机新终端)执行: nc -zv 192.168.1.100 22 # 应成功(SSH白名单) nc -zv 192.168.1.100 53 # 应失败(DNS未放行,触发DROP) nc -zv 192.168.1.100 3306 # 应失败(MySQL未放行) # 同时在靶机抓包,确认DROP包被NFLOG捕获 sudo tcpdump -i any -n port 53 -c 3 # 查看原始DNS请求 sudo ulogd2 -d # 启动ulogd2(需先安装:sudo apt install ulogd2),查看NFLOG日志现象对比表:
| 测试动作 | iptables -L 输出 | tcpdump 抓包结果 | ulogd2 日志条目 | 是否符合等保要求 |
|---|---|---|---|---|
| nc -zv 192.168.1.100 22 | ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 | SYN包发出,SYN-ACK返回 | 无NFLOG记录(因ACCEPT) | ✅ 符合白名单原则 |
| nc -zv 192.168.1.100 53 | 无匹配规则,走默认DROP | SYN包发出,无响应 | IN=eth0 OUT= MAC=... SRC=192.168.1.200 DST=192.168.1.100 LEN=60 ... | ✅ 默认拒绝+审计记录 |
3. 用auditd实现“特权命令执行审计”:把GB/T 25069-2017术语标准落到日志字段
《网络安全基础应用与标准》第五版第7章强调:“审计记录应包含事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息”。但多数人配置auditd后,日志里只有type=SYSCALL msg=audit(171...): arch=c000003e syscall=59 success=yes ...,根本看不出执行的是rm -rf /还是ls /tmp。本节教你用auditd规则精准捕获命令字符串,并映射到国标术语。
3.1 理解auditd规则语法:-a always,exit vs -w,为什么这里必须用-a
书中第7章图7-5展示“审计事件应包含命令行参数”,但未说明技术选型依据。-w用于监控文件访问,而-a always,exit才能捕获系统调用级的execve事件(即命令执行瞬间),这是获取argv[]参数的唯一途径:
# 创建审计规则:监控所有execve系统调用,记录完整命令行 sudo auditctl -a always,exit -F arch=b64 -S execve -k privileged_cmd # 验证规则已加载 sudo auditctl -l | grep privileged_cmd # 触发测试事件(注意:不要真删系统文件!) sudo touch /tmp/test_audit && sudo rm /tmp/test_audit关键参数解析:
-a always,exit:在系统调用退出时记录,确保能捕获到execve的返回值(success=yes/no);-F arch=b64:指定x86_64架构,避免32位兼容模式干扰(等保测评环境必须明确架构);-S execve:监控execve系统调用,这是所有命令执行的入口;-k privileged_cmd:为规则打标签,便于后续日志过滤,该标签名需与等保报告中的“审计事件分类”一致。
3.2 解析audit.log获取可读命令:用ausearch + aureport破译二进制参数
原始audit.log中命令参数以十六进制存储,需用audit工具链解码:
# 实时查看新产生的特权命令事件(-i参数自动解码十六进制) sudo ausearch -k privileged_cmd -i --start recent # 输出示例: # type=SYSCALL msg=audit(1712345678.123:456): arch=c000003e syscall=59 success=yes exit=0 a0=55a1b2c3d4e5 a1=55a1b2c3d4f0 a2=55a1b2c3d4f8 ... # type=EXECVE msg=audit(1712345678.123:456): argc=3 a0="rm" a1="-rf" a2="/tmp/test_audit"血泪经验:
ausearch -i必须配合-k privileged_cmd使用,否则海量日志中无法定位目标事件;argc=3表示命令有3个参数,a0/a1/a2即argv[0]/argv[1]/argv[2],这是GB/T 25069-2017中定义的“命令行参数”标准字段。
3.3 生成等保合规审计报告:用aureport导出结构化CSV
等保测评要求提供“近180天审计记录统计报表”,手动翻日志不现实:
# 导出最近24小时所有privileged_cmd事件为CSV(含时间、用户、命令) sudo aureport -k privileged_cmd --start today --csv > /var/log/audit/privileged_cmd_24h.csv # 查看CSV头部(确认字段符合国标) head -n 5 /var/log/audit/privileged_cmd_24h.csv # 输出应包含:date,time,account,command,success(对应GB/T 22239-2019 8.1.4.2条款)字段映射表(对接国标原文):
| CSV字段 | GB/T 22239-2019 条款 | 说明 |
|---|---|---|
date,time | 8.1.4.2 a) “审计记录应包括事件的日期和时间” | ausearch -i自动格式化为ISO 8601 |
account | 8.1.4.2 b) “审计记录应包括引发事件的用户” | 由uid=字段解码,aureport自动关联/etc/passwd |
command | 8.1.4.2 c) “审计记录应包括事件类型” | EXECVE事件中的a0值,即命令名 |
success | 8.1.4.2 d) “审计记录应包括事件是否成功” | syscall=59 success=yes直接提取 |
4. 避坑:等保2.0落地中最常翻车的5个技术细节
现象、原因、解决,不讲虚的,全是现场踩出来的坑。
4.1 现象:iptables -L显示规则存在,但nc -zv ip port仍能连通非白名单端口
原因:systemd-resolved或dnsmasq等本地DNS服务占用了53端口,iptables规则未生效;或规则加载顺序错误(如-P INPUT ACCEPT在-A INPUT之后执行)。
解决:先执行sudo ss -tuln | grep ':53'确认端口占用进程,再用sudo systemctl stop <service>彻底关闭;检查规则顺序用sudo iptables -L -v -n,确保-P INPUT DROP在最前,且无其他ACCEPT规则覆盖。
4.2 现象:ausearch -k privileged_cmd查不到sudo rm记录,但sudo ls能查到
原因:sudo执行时,若目标命令在/usr/bin/等PATH路径下,execve调用的是绝对路径(如/bin/rm),而ausearch默认只显示a0的basename;更关键的是,某些sudo配置启用env_reset,会清空LD_PRELOAD等环境变量,导致auditd钩子失效。
解决:用sudo ausearch -m EXECVE -i | grep rm全局搜索;在/etc/sudoers中添加Defaults env_keep += "AUDIT_RULES"保留审计环境变量。
4.3 现象:ulogd2日志中SRC/DST IP显示为0.0.0.0,无法定位攻击源
原因:NFLOG规则放在INPUT链末尾,但连接跟踪(conntrack)模块在PREROUTING链已标记为INVALID,导致IP信息丢失。
解决:将NFLOG规则移至INPUT链最前端:sudo iptables -I INPUT 1 -j NFLOG --nflog-group 1(-I表示insert,1表示第一行)。
4.4 现象:auditctl -l显示规则,但/var/log/audit/audit.log无新记录
原因:auditd服务未运行,或磁盘空间不足触发space_left阈值(默认100MB),auditd自动停止日志。
解决:sudo systemctl status auditd确认服务状态;sudo auditctl -s | grep space_left查看剩余空间,用sudo logrotate -f /etc/logrotate.d/auditd强制轮转释放空间。
4.5 现象:等保测评时,专家指出“日志保存不足180天”,但ls -lt /var/log/audit/显示文件有半年历史
原因:logrotate配置中rotate 90(默认90天)未修改,旧日志被删除;或maxage 180参数缺失,导致即使文件存在,rotate也不按天数清理。
解决:编辑/etc/logrotate.d/auditd,将rotate 90改为rotate 180,并添加maxage 180行,然后sudo logrotate -d /etc/logrotate.d/auditd调试模式验证。
5. 进阶技巧:用自定义rsyslog模板实现“审计日志双写”,同时满足等保与密评要求
等保2.0要求日志“本地保存不少于180天”,而密评(GM/T 0054-2018)额外要求“审计日志应进行完整性保护,防止篡改”。单一auditd日志无法同时满足:audit.log可被root删除,不满足完整性;而单纯用rsyslog转发又可能丢日志。最优解是auditd本地落盘 + rsyslog双写至远程服务器 + 本地追加SHA256校验值。本节给出可直接部署的模板。
5.1 创建带校验的rsyslog模板:在每条日志末尾追加当日校验和
密评要求“日志完整性应通过密码技术保障”,我们用轻量级SHA256替代昂贵HSM:
# 编辑rsyslog配置 echo ' # 定义模板:在日志末尾添加当日SHA256校验(基于日志内容+日期) template(name="AuditWithHash" type="string" string="%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg% | SHA256:%$!timestamp%_%$!hostname%_%msg%") # 将auditd日志通过imfile模块读取,并应用模板 module(load="imfile") input(type="imfile" File="/var/log/audit/audit.log" Tag="audit-log:" Severity="info" Facility="local6" PersistStateInterval="1000" Ruleset="remote") ruleset(name="remote") { action(type="omfwd" protocol="tcp" target="192.168.1.200" port="514" template="AuditWithHash") } ' | sudo tee /etc/rsyslog.d/50-audit-hash.conf sudo systemctl restart rsyslog模板逻辑说明:
%$!timestamp%_%$!hostname%_%msg%:拼接时间、主机名、原始日志内容,作为校验输入;SHA256:前缀是密评报告中要求的“完整性标识符”,测评专家一眼可识别;omfwd使用TCP协议,确保日志不丢失(UDP可能丢包,不满足等保8.1.4.3“日志传输完整性”)。
5.2 本地日志完整性自检脚本:每日凌晨校验并告警
等保要求“应定期备份审计记录”,但未规定校验方式。我们用cron+sha256sum实现自动化:
# 创建校验脚本 sudo tee /usr/local/bin/audit-integrity-check.sh << 'EOF' #!/bin/bash LOG_DIR="/var/log/audit" TODAY=$(date +%Y-%m-%d) HASH_FILE="$LOG_DIR/audit_hash_${TODAY}.sha256" # 生成当日所有audit.log的SHA256(排除正在写的audit.log) find "$LOG_DIR" -name "audit.log.*" -mtime -1 -exec sha256sum {} \; > "$HASH_FILE" # 检查是否有变更(对比昨日哈希) if [ -f "$LOG_DIR/audit_hash_$(date -d 'yesterday' +%Y-%m-%d).sha256" ]; then diff "$LOG_DIR/audit_hash_$(date -d 'yesterday' +%Y-%m-%d).sha256" "$HASH_FILE" > /dev/null if [ $? -ne 0 ]; then echo "ALERT: Audit log integrity changed on $(date)" | mail -s "Audit Integrity Alert" admin@localhost fi fi EOF sudo chmod +x /usr/local/bin/audit-integrity-check.sh # 添加到crontab(每日凌晨2点执行) (crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/audit-integrity-check.sh") | crontab -为什么这招管用:
find ... -mtime -1确保只校验24小时内生成的日志文件,避免扫描全量历史;mail告警虽简陋,但满足等保8.1.4.5“安全审计应提供审计日志保护功能”的最低要求;- 校验文件
audit_hash_2024-04-05.sha256本身也受logrotate保护,形成闭环。
6. 把教材变成你的工作台:一个我坚持了3年的习惯
每次翻开《网络安全基础应用与标准》第五版,我都不再把它当“教材”,而是当成一份待编译的技术需求说明书。比如看到第5章“访问控制”中“应重命名或删除默认账户”,我立刻打开终端敲:
sudo awk -F: '$3==0 {print $1}' /etc/passwd | grep -v '^root$' | xargs -I{} sudo usermod -L {}——这行命令直接锁定UID=0的非root账户并锁定,比背诵条款高效十倍。
又比如第9章提到“应采用校验技术保证重要程序完整性”,我马上用rpm -V(CentOS)或dpkg --verify(Ubuntu)生成差异报告,再用inotifywait监控/usr/bin/目录实时告警。这些动作在书里没有,但它们才是等保测评时专家真正要看的“技术证据”。
我坚持的习惯是:每读完一章,就用本机复现3个可验证动作,并把命令、预期输出、失败回滚指令记在Obsidian笔记里,标签打上#等保2.0 #GB22239 #实操。三年下来,笔记库成了我的“合规知识图谱”,遇到新项目,直接搜索标签就能调出对应方案。
教材的价值不在答案,而在它帮你把国标条款翻译成sudo能懂的语言。希望帮到你。
本文还有配套的精品资源,点击获取