简介:这份《网络安全技术》PDF文档资料面向备考信息安全、网络攻防相关课程的学生与自学者,聚焦网络安全基础理论与常见考点梳理。内容以选择题、填空题和简答题形式覆盖社会工程学攻击、不可否认性、协议与服务脆弱性、嗅探器防护、防火墙风险策略、黑客攻击流程、缓冲区溢出、IP欺骗、对称与非对称密码算法、Kerberos认证、IPSec协议、恶意代码及防火墙拓扑等核心知识点,并附有参考答案与解析思路,便于对照复习与查漏补缺。资源包共1个PDF文件,大小约205KB,轻量便携,适合在电脑或移动设备上随时翻阅。目前已有714人学习下载,可作为课堂笔记补充、期末冲刺或认证考试前的快速自测材料,帮助读者在有限时间内串联零散概念、强化记忆高频考点。
1. 从一份《网络安全技术》PDF 说起:为什么大多数人存了资料却搭不起防线
很多人手里都躺着几份《网络安全技术》的 PDF,可能是课程讲义、培训资料,也可能是从某个技术群里顺手存下来的。存的时候雄心勃勃,打开看了两章 TCP/IP 和密码学基础,然后就再也没翻过。问题不在于资料不好,而在于这类文档天然是「知识罗列」结构——它告诉你对称加密和非对称加密的区别,却不告诉你一台刚上线的 Linux 服务器前 24 小时该关哪些端口、该看哪些日志。你真正需要的不是把 PDF 从头读到尾,而是把它当成一张地图,按图索骥地在自己环境里搭出一条能跑起来、能验证、能持续维护的防线。这篇内容面向的是手里有资料但不知道怎么落地的一线开发者和运维人员,我会把《网络安全技术》里最核心的几块——资产梳理、访问控制、流量监测、日志审计——拆成可以照着做的步骤,每一步都告诉你为什么这么做、参数怎么调、哪里容易翻车。
2. 资产梳理与攻击面收敛:先把家底摸清楚再谈防护
2.1 为什么资产清单是安全技术的起点
《网络安全技术》这类资料通常从密码学或者网络协议讲起,但真正落到实操,第一步永远是资产梳理。你连自己有多少台机器、跑了哪些服务、开了哪些端口都不清楚,后面谈防火墙策略、入侵检测都是空中楼阁。常见做法是先做被动资产发现,再做主动端口扫描,两者交叉验证。被动发现靠流量镜像或者交换机 MAC 表,主动扫描用 nmap 这类工具。我一般会先用被动方式跑一周,拿到一份「实际在通信的 IP 列表」,再用 nmap 对这份列表做精准扫描,避免全网段盲扫触发告警。
资产梳理的输出不是一张 Excel 就完事,而是要形成三个东西:IP-服务-负责人 的映射表、每个服务的暴露面评级、以及变更记录机制。没有变更记录,三个月后这份表就废了。
2.2 用 nmap 做精准端口扫描与结果解析
假设你已经通过被动流量拿到了一份活跃 IP 列表,存为alive_hosts.txt,每行一个 IP。下面这条命令是我常用的扫描方式:
# -sS: SYN 半开扫描,速度快且不易被应用层日志记录 # -sV: 服务版本探测,用于判断具体中间件和版本 # -O: 操作系统指纹识别,辅助判断补丁级别 # --script=banner: 抓取服务 banner,补充版本信息 # -p-: 全端口扫描,1-65535 # -T4: 时序模板,内网环境可用,公网建议 T2 避免丢包 # -oA: 同时输出三种格式,方便后续解析 nmap -sS -sV -O --script=banner -p- -T4 -iL alive_hosts.txt -oA scan_result扫描完成后,scan_result.xml可以用 Python 解析成结构化表格。下面这段脚本把 XML 里的 IP、端口、服务、版本提取成 CSV:
import xml.etree.ElementTree as ET import csv tree = ET.parse('scan_result.xml') root = tree.getroot() with open('assets.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['ip', 'port', 'protocol', 'service', 'version']) for host in root.findall('host'): ip = host.find('address').get('addr') for port in host.findall('.//port'): portid = port.get('portid') proto = port.get('protocol') svc = port.find('service') if svc is not None: name = svc.get('name', '') ver = svc.get('version', '') writer.writerow([ip, portid, proto, name, ver])这段脚本的逻辑很直接:遍历 XML 里每个 host 的每个 port 节点,把服务名和版本号抽出来。参数上需要注意的是,如果 nmap 没识别出版本,version字段会是空字符串,后续做暴露面评级时要把这类端口标记为「未知服务」,优先人工确认。
2.3 攻击面收敛的三个判断维度
拿到资产表之后,收敛攻击面不是简单地「关端口」,而是按三个维度做判断:暴露范围(公网/内网/本地)、服务必要性(业务是否依赖)、替代方案(能否加认证或换协议)。我一般会做一张表:
| 端口 | 服务 | 暴露范围 | 必要性 | 处置建议 |
|---|---|---|---|---|
| 22 | SSH | 公网 | 高 | 改非标端口+密钥登录+fail2ban |
| 3306 | MySQL | 内网 | 高 | 绑定内网 IP+强密码+审计日志 |
| 6379 | Redis | 内网 | 中 | 加密码+rename-command+bind |
| 9200 | ES | 内网 | 低 | 加认证或仅本地监听 |
这张表的用法是:公网+高必要性,做加固;公网+低必要性,直接关;内网+低必要性,评估后关或加访问控制。Redis 和 ES 是血泪经验里翻车最多的两个,默认无认证加上内网横向移动,一旦边界被突破就是连锁反应。
3. 访问控制与身份认证:从「能连上」到「只能该连的人连」
3.1 最小权限原则在主机层的落地方式
《网络安全技术》里讲访问控制模型(DAC、MAC、RBAC)讲得很细,但落到一台具体机器上,核心就三件事:谁能登录、登录后能干什么、干了什么有没有记录。Linux 环境下,我一般按这个顺序做:先禁用 root 远程登录,再建普通用户并配置 sudo 白名单,最后用 auditd 记录关键操作。
# /etc/ssh/sshd_config 关键配置 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AllowUsers deploy ops MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2改完sshd_config后先别急着重启 sshd,用sshd -t测试配置语法,确认无误再systemctl reload sshd。翻车场景很常见:配置写错导致 sshd 起不来,如果当前会话断开就彻底连不上了。所以改之前务必保留一个已登录的会话不要退出。
3.2 sudo 白名单与命令审计的配置
普通用户建好后,不要直接给 ALL 权限。按角色拆分 sudoers 文件,放在/etc/sudoers.d/下,每个角色一个文件:
# /etc/sudoers.d/deploy deploy ALL=(root) NOPASSWD: /bin/systemctl restart app, /bin/systemctl status app # /etc/sudoers.d/ops ops ALL=(root) /usr/bin/journalctl, /bin/netstat, /usr/sbin/ss这样 deploy 用户只能重启和查看 app 服务,ops 用户只能看日志和网络状态。参数上注意NOPASSWD只给高频且低风险的操作,涉及数据删除或配置变更的命令不要加。
审计方面,auditd 的规则我一般加这几条:
# 监控 sudoers 文件变更 -w /etc/sudoers -p wa -k sudoers_change # 监控 SSH 配置变更 -w /etc/ssh/sshd_config -p wa -k sshd_change # 监控用户添加和删除 -w /etc/passwd -p wa -k user_change -w /etc/shadow -p wa -k shadow_change-w指定监控路径,-p wa表示监控写和属性变更,-k是关键词用于后续 ausearch 过滤。这些规则加载后,任何对关键文件的修改都会记录到/var/log/audit/audit.log,配合ausearch -k sudoers_change就能快速定位变更人和时间。
3.3 认证加固中容易忽略的边界
很多人做完 SSH 密钥登录就以为认证加固结束了,其实还有几个边界:一是密钥的 passphrase,很多人生成密钥时不设密码,密钥文件泄露就等于密码泄露;二是 authorized_keys 的权限,必须是 600,否则 sshd 会拒绝使用;三是 sudo 的 timestamp_timeout,默认 5 分钟内免密,共享账号场景下要改成 0。
另外,如果环境里有 Web 管理后台,认证加固要单独做:强制 HTTPS、加验证码或 MFA、限制登录频率。这些在《网络安全技术》里可能归在应用安全章节,但实操中往往和主机认证一起做,因为攻击者不会区分你是哪一层被突破的。
4. 流量监测与日志审计:让异常行为留下痕迹
4.1 用 tcpdump 和 Zeek 做轻量流量基线
流量监测不一定要上全套 IDS,先从基线做起。我一般在新环境上线第一周用 tcpdump 抓包,分析出正常的通信矩阵:哪些 IP 之间在通信、用什么协议、流量大小和时段分布。命令如下:
# 抓取 eth0 上非本机之间的流量,每个包截取 128 字节,写文件 # -i: 指定网卡 # -s: 截取长度,128 足够分析头部 # -w: 写入 pcap 文件 # -C: 每个文件最大 100MB # -W: 最多保留 10 个文件,循环覆盖 tcpdump -i eth0 -s 128 -w /data/pcap/traffic_%Y%m%d_%H%M%S.pcap -C 100 -W 10 -Z root 'not host 本机IP'抓一周后,用 Zeek 做协议解析和连接日志生成:
# Zeek 默认输出 conn.log、dns.log、http.log 等 # -r: 读取 pcap 文件 # local: 使用本地站点脚本 zeek -r /data/pcap/traffic_20250101_000000.pcap localZeek 生成的conn.log里每行是一条连接记录,包含源 IP、目的 IP、端口、持续时间、字节数。用 awk 或 Python 做聚合,就能得到通信矩阵。基线建立后,任何不在矩阵里的新连接都值得看一眼。
4.2 日志集中采集与关键字段解析
日志审计的核心不是「存了多少日志」,而是「出问题时能不能快速查到」。我一般用 rsyslog 或 filebeat 把关键日志集中到一台日志服务器,至少包括:SSH 登录日志、sudo 操作日志、Web 访问日志、数据库慢查询和错误日志。
以 SSH 日志为例,/var/log/auth.log里关键字段是:时间、主机名、进程名、用户、源 IP、结果(Accepted/Failed)。用下面这条命令可以快速统计失败登录 TOP 10:
# 提取 Failed password 行,取第 11 列(源 IP),排序计数 grep 'Failed password' /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10参数说明:$(NF-3)是因为不同发行版日志格式略有差异,从后往前数第 4 个字段通常是源 IP。如果格式不一致,先用head -1看一行确认字段位置。这个统计结果配合 fail2ban 的封禁记录,能快速判断是否在被暴力破解。
4.3 从日志到告警的最小闭环
日志存下来不告警等于没存。最小闭环是:定义规则 → 定时查询 → 触发通知。规则不用多,先加三条:SSH 失败登录 5 分钟内超过 10 次、sudo 执行了非白名单命令、关键文件被修改。用 cron 每 5 分钟跑一次检查脚本,命中就发邮件或 webhook。
#!/bin/bash # check_ssh_fail.sh threshold=10 count=$(grep 'Failed password' /var/log/auth.log | grep "$(date +%Y-%m-%d)" | wc -l) if [ "$count" -gt "$threshold" ]; then echo "SSH failed login count: $count" | mail -s "Security Alert" ops@example.com fi这个脚本很粗糙,但能跑起来。后续可以换成 ELK 或 Loki 做更精细的规则。关键是先有闭环,再优化精度。
5. 避坑与排查:安全加固中最容易翻车的五个场景
5.1 改 SSH 配置后连不上机器
现象:修改sshd_config后 reload,当前会话断开,重新连接提示 connection refused。原因:配置语法错误导致 sshd 启动失败,或者AllowUsers没包含当前用户。解决:改配置前用sshd -t测试,保留一个活跃会话不退出,改完后新开窗口验证,确认无误再关闭旧会话。如果已经连不上,通过 console 或救援模式进入,检查/var/log/auth.log和sshd -t输出。
5.2 fail2ban 误封内网 IP
现象:内网跳板机或监控服务器突然无法 SSH 到目标机器。原因:fail2ban 规则把频繁连接的内网 IP 当成暴力破解封了。解决:在 fail2ban 的ignoreip里加上内网网段和已知跳板机 IP,调整maxretry和findtime参数,内网环境可以适当放宽。另外,监控系统用的 SSH 账号建议单独配置,不走密码认证,避免触发规则。
5.3 auditd 规则过多导致日志爆炸
现象:/var/log/audit/目录迅速增长,磁盘告警。原因:监控了高频写入的文件或目录,比如/tmp或应用日志目录。解决:auditd 规则只加关键配置文件和认证相关文件,不要监控应用日志。用aureport --summary查看各规则命中次数,命中过多的规则要么去掉,要么加-F过滤条件缩小范围。同时配置max_log_file和num_logs做轮转。
5.4 端口扫描被当成攻击行为
现象:nmap 扫描后,目标机器上的 IDS 告警,或者云厂商发来安全通知。原因:扫描频率过高或使用了 aggressive 模板。解决:内网扫描用-T2或-T3,加--scan-delay控制速率;公网扫描前确认有授权,避免扫到不属于自己的 IP。云环境里很多厂商有主动探测机制,扫描行为可能触发告警,提前报备或使用厂商提供的资产发现工具。
5.5 日志时间不同步导致排查困难
现象:多台机器日志时间不一致,关联分析时对不上。原因:NTP 未配置或时区不统一。解决:所有机器统一配置 NTP 同步,时区统一为 UTC 或业务所在时区。日志采集端做时间戳标准化,存储时保留原始时间和标准化时间两个字段。这个坑在事后排查时最致命,因为时间线错乱会导致整个分析结论跑偏。
6. 把 PDF 变成可运行的检查清单:一个持续验证的小技巧
《网络安全技术》这类资料最大的价值不是读一遍,而是拆成检查项,定期跑一遍。我自己的做法是维护一个security_checklist.sh,把前面几章的检查点串起来,每月跑一次,输出一份简版报告。脚本不需要多复杂,核心是覆盖资产、认证、日志三个维度。
#!/bin/bash # security_checklist.sh - 月度安全检查 report="/tmp/security_report_$(date +%Y%m%d).txt" echo "=== 资产与端口 ===" > "$report" ss -tlnp | awk 'NR>1 {print $4, $6}' >> "$report" echo "=== SSH 配置 ===" >> "$report" sshd -T 2>/dev/null | grep -E 'permitrootlogin|passwordauthentication|maxauthtries' >> "$report" echo "=== 失败登录统计 ===" >> "$report" grep 'Failed password' /var/log/auth.log 2>/dev/null | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -5 >> "$report" echo "=== 关键文件变更 ===" >> "$report" ausearch -k sudoers_change -ts this-month 2>/dev/null | tail -5 >> "$report" echo "报告已生成: $report"这个脚本的逻辑是:先看当前监听端口有没有新增,再看 SSH 关键配置有没有被改回去,然后统计失败登录来源,最后查关键文件变更记录。参数上注意ausearch的-ts this-month需要 auditd 服务正常运行,如果没装 auditd 就跳过这段。脚本输出的是文本报告,可以配合 diff 跟上个月的报告对比,快速发现变化。
几个使用上的细节:一是脚本要在每台机器上跑,可以用 Ansible 批量执行并收集报告;二是报告不要只存本地,集中存到日志服务器或对象存储,保留至少 6 个月;三是每月跑完后花 10 分钟看一遍 diff,重点关注新增端口和新增失败登录来源。
我自己的习惯是把这个脚本挂在 cron 里每月 1 号跑,报告自动发到邮箱。有一次就是通过 diff 发现一台机器多了个 8080 端口,查下来是开发临时起的测试服务忘了关,虽然没造成实际影响,但这种「意料之外的变化」正是安全检查要抓的东西。安全这件事没有一劳永逸,靠的是定期检查、持续收敛,把《网络安全技术》里的原则变成每月跑一遍的脚本,比读十遍 PDF 都管用。希望帮到你。
本文还有配套的精品资源,点击获取