
简介这是一份面向计算机专业学生、网络运维初学者及信息安全入门者的网络安全基础文献围绕常见网络威胁与防范措施展开适合课程学习、论文写作参考或安全知识梳理。资源为单个PDF文件压缩包约699KB内容源自期刊论文系统梳理了计算机网络安全概述、完整性、机密性、可用性等基本特征并重点分析计算机病毒、软件漏洞与后门、木马程序及黑客攻击等典型威胁同时给出防火墙技术部署与防病毒对策等防范思路。目前已有346人学习下载可作为网络安全入门阶段的参考资料帮助读者快速建立对常见威胁类型与基础防护手段的整体认知便于后续深入学习防火墙配置、病毒防护与系统安全管理等专题。1. 从一份 PDF 说起计算机网络安全威胁到底在防什么很多人第一次接触「常见计算机网络安全威胁及安全防范措施」这个题目是在写制度文档、做内部培训或者应付合规检查的时候。但真正落到一线你会发现它根本不是一份读完就完的 PDF而是一张需要持续更新的攻防地图。你所在的环境里威胁可能来自一封伪装成发票的邮件、一个没打补丁的旧版组件、一台弱口令的数据库甚至是一次随手插上的未知 U 盘。安全防范措施也不是装个杀毒软件就万事大吉而是要把「识别威胁、收敛暴露面、监控异常、快速响应」串成一条能跑起来的链路。这篇笔记面向两类人一是需要把安全威胁讲清楚、把防范措施落下去的技术负责人二是刚接手安全运维、想知道从哪下手的新手。我会按「威胁长什么样、怎么复现验证、防范措施怎么配、坑在哪」的顺序把这份 PDF 背后的东西拆成能直接抄作业的步骤。2. 常见计算机网络安全威胁的识别与验证方法2.1 恶意软件与勒索软件从样本行为到落地排查恶意软件是安全威胁里最容易被感知的一类但很多人只停留在「中毒了」这个层面。要真正识别它得看行为而不是看名字。常见做法是先在隔离环境里观察样本的进程树、网络连接和文件落地情况再回到生产环境做排查。下面这段 Python 脚本用psutil枚举可疑进程和外部连接适合在 Windows 或 Linux 上快速跑一遍作为初步筛查。import psutil import os # 可疑进程关键词按实际环境补充 SUSPICIOUS_NAMES [svchost.exe, powershell.exe, wscript.exe, rundll32.exe] # 常见高危端口 SUSPICIOUS_PORTS [4444, 5555, 6666, 8080, 3389] def scan_processes(): for proc in psutil.process_iter([pid, name, exe, cmdline]): try: info proc.info name (info[name] or ).lower() # 只关注可疑名称且命令行异常的进程 if any(s in name for s in SUSPICIOUS_NAMES): cmdline .join(info[cmdline] or []) if temp in cmdline.lower() or appdata in cmdline.lower(): print(f[可疑进程] PID{info[pid]} 名称{info[name]} 命令行{cmdline}) except (psutil.NoSuchProcess, psutil.AccessDenied): continue def scan_connections(): for conn in psutil.net_connections(kindinet): if conn.status ESTABLISHED and conn.raddr: if conn.raddr.port in SUSPICIOUS_PORTS: print(f[可疑连接] 本地{conn.laddr} 远程{conn.raddr} 状态{conn.status}) if __name__ __main__: scan_processes() scan_connections()这段代码的逻辑很直接先按进程名筛出常被滥用的系统工具再结合命令行里是否出现临时目录来判断异常连接部分则盯住几个常被反弹 shell 使用的端口。参数上SUSPICIOUS_NAMES和SUSPICIOUS_PORTS需要根据你所在环境的业务特征调整比如内网如果有自研工具走 8080就要把它从列表里去掉否则误报会很多。跑完脚本后重点看输出里有没有「进程名正常但命令行指向临时目录」的情况这往往是勒索软件或挖矿木马的前兆。勒索软件还有一个关键特征是文件扩展名批量变更和卷影副本被删除。排查时可以检查vssadmin list shadows是否还能正常列出以及最近是否有大量文件被重命名为统一后缀。防范措施上离线备份和最小权限是底线别把备份盘长期挂载在业务机上。2.2 网络钓鱼与社交工程邮件头分析和链接检查钓鱼邮件是突破边界最常用的手段但很多团队只靠员工自觉。更可靠的做法是对邮件头做结构化分析提取发件 IP、SPF/DKIM/DMARC 校验结果和实际跳转链接。下面这段 Python 用email库解析原始邮件适合在邮件网关或安全运营平台上做批量筛查。import email from email import policy import re def parse_phishing_email(raw_path): with open(raw_path, rb) as f: msg email.message_from_binary_file(f, policypolicy.default) # 提取关键头字段 print(From:, msg.get(From)) print(Return-Path:, msg.get(Return-Path)) print(Received:, msg.get_all(Received)) print(Authentication-Results:, msg.get(Authentication-Results)) # 提取正文中的链接 body if msg.is_multipart(): for part in msg.walk(): if part.get_content_type() text/html: body part.get_content() break else: body msg.get_content() links re.findall(rhttps?://[^\s], body) for link in set(links): print([链接], link) if __name__ __main__: parse_phishing_email(sample.eml)逻辑说明Authentication-Results里如果出现spffail或dkimfail基本可以判定发件人伪造Received链要看第一跳 IP 是否和发件域匹配。链接部分不要直接点先复制到隔离环境里看最终跳转。参数上raw_path是原始邮件文件可以从邮件网关导出。常见误用是只看发件人显示名那个可以随便伪造必须看 Return-Path 和 Received 链。防范措施上除了邮件网关的规则还要做内部发件人仿冒防护比如在邮件头里标记外部来源提醒员工注意。社交工程方面定期做钓鱼演练比发通知有效但演练后要给出具体识别方法而不是只公布中招率。2.3 弱口令与暴露面用扫描结果驱动加固弱口令和暴露面是很多入侵事件的起点。常见做法是先用扫描器发现开放端口和服务再针对登录接口做口令强度检查。下面这段 bash 用nmap和hydra的组合做授权范围内的自查注意只在你有明确授权的资产上跑。#!/bin/bash # 授权范围内资产列表 TARGETS192.168.1.0/24 # 第一步发现开放端口 nmap -sS -p 22,3389,3306,6379,27017 -oG scan_result.txt $TARGETS # 第二步提取开放端口的主机 grep open scan_result.txt | awk {print $2} open_hosts.txt # 第三步对 SSH 做弱口令检查仅限授权环境 while read host; do hydra -L users.txt -P pass.txt -t 4 ssh://$host -o hydra_$host.txt done open_hosts.txt逻辑说明nmap先做半开扫描只关注常见高危端口hydra用用户名字典和密码字典做尝试-t 4控制并发避免把服务打挂。参数上users.txt和pass.txt要包含你环境里常见的默认口令和弱口令比如admin/admin、root/123456。跑完后重点看hydra_*.txt里有没有成功记录有的话立刻改口令并排查是否已被利用。防范措施上弱口令的根治不是靠定期改密码而是上多因素认证和密钥登录。暴露面收敛要结合资产台账把不该对公网开放的服务关掉或者放到跳板机后面。常见坑是只扫了默认端口忽略了服务改到高位端口的情况所以扫描范围要覆盖全端口至少做一次全量发现。3. 安全防范措施的落地配置与参数调优3.1 主机加固从基线检查到自动化修复主机加固是防范措施里最基础也最容易半途而废的一环。常见做法是先跑一遍基线检查再针对不达标项做自动化修复。下面这段 Python 用subprocess调用系统命令检查 Linux 上的关键安全配置。import subprocess def check_ssh_config(): # 检查 SSH 是否禁止 root 登录 result subprocess.run([sshd, -T], capture_outputTrue, textTrue) config result.stdout issues [] if permitrootlogin yes in config.lower(): issues.append(SSH 允许 root 登录) if passwordauthentication yes in config.lower(): issues.append(SSH 允许密码认证) if maxauthtries in config.lower(): for line in config.splitlines(): if line.startswith(maxauthtries) and int(line.split()[1]) 4: issues.append(SSH 最大尝试次数过高) return issues def check_firewall(): result subprocess.run([iptables, -L, -n], capture_outputTrue, textTrue) if policy ACCEPT in result.stdout and DROP not in result.stdout: return [防火墙默认策略为 ACCEPT 且无 DROP 规则] return [] if __name__ __main__: for issue in check_ssh_config() check_firewall(): print([不达标], issue)逻辑说明sshd -T输出当前生效的 SSH 配置比直接读文件更准确iptables -L -n看默认策略和规则。参数上maxauthtries建议不超过 4permitrootlogin设为nopasswordauthentication设为no。跑完后根据输出逐项修复修复完再跑一遍确认。防范措施落地时别一次性把所有主机都改完先拿一台非核心业务做验证确认不影响现有运维流程再推广。常见坑是改了 SSH 配置没重载服务或者防火墙规则顺序不对把自己关在外面所以操作前一定要保留一个已登录的会话。3.2 网络层防护防火墙规则与流量监控网络层防护的核心是「默认拒绝、按需放行」。下面这段 bash 用iptables做基础规则配置适合在 Linux 网关上快速落地。#!/bin/bash # 清空现有规则 iptables -F iptables -X # 默认策略入站拒绝出站允许转发拒绝 iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP # 允许本地回环 iptables -A INPUT -i lo -j ACCEPT # 允许已建立的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许 SSH 和业务端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 记录并丢弃其他入站 iptables -A INPUT -j LOG --log-prefix IPTABLES-DROP: iptables -A INPUT -j DROP逻辑说明默认策略设为 DROP 后只有明确放行的流量才能进来ESTABLISHED,RELATED保证已建立的连接能正常返回。参数上--dport按实际业务端口调整日志前缀方便后续在dmesg或日志系统里检索。跑完后用iptables -L -n -v看规则命中计数确认没有异常流量被放行。流量监控方面可以用tcpdump做临时抓包或者上ntopng做长期可视化。常见坑是规则顺序写反比如把 DROP 写在允许规则前面导致业务不通。另外日志量大的时候要配日志轮转否则磁盘很快被写满。3.3 日志与监控把异常变成可检索的事件安全防范措施如果没有日志和监控基本等于盲人摸象。常见做法是把主机日志、网络日志和应用日志集中收集再用规则做告警。下面这段 Python 用re从日志里提取失败登录和异常连接适合做轻量级监控。import re from collections import Counter def analyze_auth_log(log_path): failed_ips Counter() pattern re.compile(rFailed password for .* from (\d\.\d\.\d\.\d)) with open(log_path, r, encodingutf-8, errorsignore) as f: for line in f: match pattern.search(line) if match: failed_ips[match.group(1)] 1 # 输出失败次数超过阈值的 IP for ip, count in failed_ips.items(): if count 10: print(f[告警] IP {ip} 失败登录 {count} 次) if __name__ __main__: analyze_auth_log(/var/log/auth.log)逻辑说明正则匹配Failed password行提取来源 IP 并计数阈值设为 10 次超过就告警。参数上log_path按系统实际路径调整count 10可以根据业务敏感度改成 5 或 20。跑完后把告警接到邮件或即时通讯工具别只打印在终端。监控落地时重点不是收集多少日志而是有没有人看、有没有响应流程。常见坑是告警太多导致麻木所以初期只对高危事件告警比如成功登录后的异常命令执行、非工作时间的批量文件访问。4. 避坑与常见问题排查4.1 扫描器把业务打挂并发和超时没控制好现象做漏洞扫描或弱口令检查时业务响应变慢甚至不可用。原因扫描器默认并发太高或者超时设置太短导致重试风暴。解决把并发降到 4 以下超时设到 10 秒以上扫描窗口放在业务低峰期并且提前在测试环境验证。4.2 防火墙规则改完自己连不上没留后路现象远程改iptables规则后 SSH 断开再也连不上。原因默认策略改成 DROP 后没有放行当前 SSH 会话或者规则顺序把 ESTABLISHED 放到了 DROP 后面。解决操作前先加一条允许当前 IP 的临时规则或者用at定时任务在 5 分钟后恢复规则确认没问题再取消。4.3 钓鱼演练变成「狼来了」只公布中招率不给方法现象员工对钓鱼演练越来越麻木中招率反而上升。原因演练后只发排名和通报没有给出具体的识别步骤和举报渠道。解决每次演练后附上本次邮件的破绽截图比如发件域拼写错误、链接悬停显示的真实地址并简化举报流程让员工一键上报。4.4 备份恢复没验证真出事时恢复不了现象勒索软件攻击后发现备份文件也加密了或者恢复失败。原因备份盘长期在线或者备份任务只做不验。解决备份采用离线或异地方式定期做恢复演练至少每季度一次恢复后检查数据完整性和业务可用性。4.5 日志时间不同步排查时对不上时间线现象多台主机的日志时间差几分钟到几小时安全事件无法关联。原因NTP 没配或者被防火墙挡住。解决统一配置内网 NTP 服务器防火墙放行 UDP 123定期用ntpq -p检查同步状态。5. 把安全防范做成可验证的闭环一个轻量级检查脚本的进阶用法前面几章把威胁识别和防范措施拆开讲了但真正让这套东西持续有效的是把它变成一个可重复执行的检查闭环。我一般会写一个入口脚本把主机基线、网络规则、日志异常三块串起来每次跑完输出一份带时间戳的报告然后对比上一次的结果只看变化项。下面这个 Python 脚本是简化版重点在结构而不是功能堆砌。import subprocess import datetime import json def run_check(name, cmd): try: result subprocess.run(cmd, shellTrue, capture_outputTrue, textTrue, timeout30) return {name: name, output: result.stdout.strip(), error: result.stderr.strip()} except subprocess.TimeoutExpired: return {name: name, output: , error: timeout} def main(): checks [ (ssh_config, sshd -T | grep -E permitrootlogin|passwordauthentication|maxauthtries), (firewall, iptables -L -n | head -20), (failed_logins, grep Failed password /var/log/auth.log | tail -20), ] report { timestamp: datetime.datetime.now().isoformat(), results: [run_check(name, cmd) for name, cmd in checks] } with open(security_check_report.json, w, encodingutf-8) as f: json.dump(report, f, ensure_asciiFalse, indent2) print(报告已生成security_check_report.json) if __name__ __main__: main()逻辑说明run_check统一处理命令执行和超时避免某个检查卡住整个流程main把结果写成 JSON方便后续做差异对比。参数上timeout30可以根据命令实际耗时调整checks列表按你的环境增删。跑完后用diff对比两次报告只看output变化的项这样能把注意力放在真正发生变化的配置或事件上。进阶用法上可以把这份报告推到内部看板或者用定时任务每天跑一次变化项自动发到安全群。验证方法很简单手动改一条 SSH 配置再跑一次脚本看报告里ssh_config的输出有没有变化。如果有说明闭环是通的如果没有检查命令权限或者路径。我自己的习惯是每季度做一次全量检查每月做一次抽样检查每次检查后把变化项和对应的处理动作记在一个简单的表格里。这个表格不需要多漂亮但一定要能看出「什么时候、什么变了、谁处理的、处理结果」。踩过的坑是早期只跑脚本不记录结果同样的问题反复出现后来加了变化对比才把重复问题压下去。希望帮到你。本文还有配套的精品资源点击获取