简介:这是一份面向计算机专业学生、网络运维初学者及信息安全入门者的网络安全基础文献,围绕常见网络威胁与防范措施展开,适合课程学习、论文写作参考或安全知识梳理。资源为单个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(kind='inet'): 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, policy=policy.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(r'https?://[^\s"<>]+', body) for link in set(links): print("[链接]", link) if __name__ == "__main__": parse_phishing_email("sample.eml")逻辑说明:Authentication-Results里如果出现spf=fail或dkim=fail,基本可以判定发件人伪造;Received链要看第一跳 IP 是否和发件域匹配。链接部分不要直接点,先复制到隔离环境里看最终跳转。参数上,raw_path是原始邮件文件,可以从邮件网关导出。常见误用是只看发件人显示名,那个可以随便伪造,必须看 Return-Path 和 Received 链。
防范措施上,除了邮件网关的规则,还要做内部发件人仿冒防护,比如在邮件头里标记外部来源,提醒员工注意。社交工程方面,定期做钓鱼演练比发通知有效,但演练后要给出具体识别方法,而不是只公布中招率。
2.3 弱口令与暴露面:用扫描结果驱动加固
弱口令和暴露面是很多入侵事件的起点。常见做法是先用扫描器发现开放端口和服务,再针对登录接口做口令强度检查。下面这段 bash 用nmap和hydra的组合做授权范围内的自查,注意只在你有明确授权的资产上跑。
#!/bin/bash # 授权范围内资产列表 TARGETS="192.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_output=True, text=True) 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_output=True, text=True) 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建议不超过 4,permitrootlogin设为no,passwordauthentication设为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(r'Failed password for .* from (\d+\.\d+\.\d+\.\d+)') with open(log_path, 'r', encoding='utf-8', errors='ignore') 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, shell=True, capture_output=True, text=True, timeout=30) 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", encoding="utf-8") as f: json.dump(report, f, ensure_ascii=False, indent=2) print("报告已生成:security_check_report.json") if __name__ == "__main__": main()逻辑说明:run_check统一处理命令执行和超时,避免某个检查卡住整个流程;main把结果写成 JSON,方便后续做差异对比。参数上,timeout=30可以根据命令实际耗时调整,checks列表按你的环境增删。跑完后用diff对比两次报告,只看output变化的项,这样能把注意力放在真正发生变化的配置或事件上。
进阶用法上,可以把这份报告推到内部看板,或者用定时任务每天跑一次,变化项自动发到安全群。验证方法很简单:手动改一条 SSH 配置,再跑一次脚本,看报告里ssh_config的输出有没有变化。如果有,说明闭环是通的;如果没有,检查命令权限或者路径。
我自己的习惯是每季度做一次全量检查,每月做一次抽样检查,每次检查后把变化项和对应的处理动作记在一个简单的表格里。这个表格不需要多漂亮,但一定要能看出「什么时候、什么变了、谁处理的、处理结果」。踩过的坑是早期只跑脚本不记录,结果同样的问题反复出现,后来加了变化对比才把重复问题压下去。希望帮到你。
本文还有配套的精品资源,点击获取