简介这份PDF文档围绕计算机网络安全展开系统梳理了当前网络环境中常见的几类安全威胁及其对应的防范思路适合计算机相关专业学生、网络运维初学者以及需要补充安全基础知识的从业者阅读参考。内容涵盖计算机病毒、软件漏洞与后门、木马程序及黑客攻击等典型威胁形式并从防火墙技术、防病毒策略部署等角度给出具体防范措施同时介绍了网络安全的完整性、机密性与可用性等基本特征有助于读者建立较为完整的网络安全认知框架。资源包内共1个PDF文件大小约699KB篇幅精炼、结构清晰便于快速通读与重点查阅。目前已有346人学习浏览可作为课程学习、论文写作或日常安全防护的参考资料使用。1. 从一份《常见计算机网络安全威胁及安全防范措施.pdf》说起为什么你背完了威胁清单还是防不住真实攻击很多人第一次接触计算机网络安全是从一份《常见计算机网络安全威胁及安全防范措施.pdf》这类资料开始的。它通常会把威胁分成病毒、木马、蠕虫、钓鱼、DDoS、SQL 注入、弱口令几大类再对应给出防火墙、杀毒软件、补丁、备份几条措施。看完觉得懂了真到自己的服务器被挖矿、后台被爆破、数据库被拖走的时候才发现那份清单和眼前的日志对不上号。问题不在清单本身而在于它把“威胁”讲成了名词把“防范”讲成了产品中间缺了从攻击链到落地配置的那一段。这篇笔记就按一线排查的思路把常见计算机网络安全威胁拆成能观测、能复现、能配置的东西再说清楚安全防范措施到底该落在哪一层。适合手里有服务器、有业务系统、需要自己扛安全责任的开发和运维不适合只想背概念应付考试的人。2. 常见计算机网络安全威胁的落地分类按攻击链而不是按名词2.1 为什么按“病毒木马蠕虫”分类会误导排查教科书式的分类是按恶意代码形态分的但真实入侵里你看到的往往不是某个具体病毒而是一条链信息收集、入口突破、权限提升、横向移动、持久化、数据外带。按名词分类的坏处是你会在“这是木马还是蠕虫”上纠结而漏掉真正该看的入口日志。我一般把威胁按“攻击者需要什么条件才能成功”来分这样每一类都能对应到一个可检查的配置项。第一类是凭据类威胁包括弱口令、撞库、暴力破解、凭据泄露。它的成功条件是“猜中或拿到有效账号”对应检查项是密码策略、登录失败锁定、多因素认证、泄露凭据比对。第二类是入口类威胁包括 Web 漏洞利用、文件上传、反序列化、未授权访问。成功条件是“应用存在可被外部触发的缺陷”对应检查项是输入校验、权限校验、组件版本。第三类是流量类威胁包括 DDoS、端口扫描、中间人。成功条件是“网络层缺乏过滤和加密”对应检查项是限速、ACL、TLS 配置。第四类是内部类威胁包括横向移动、权限滥用、供应链投毒。成功条件是“内网信任过度”对应检查项是最小权限、分段隔离、依赖审计。这样分类之后你会发现所谓“安全防范措施”不是买一个设备而是在每个条件上做减法。下面这张表是我自己在做资产梳理时用的把威胁、观测点、落地措施对应起来比背清单有用得多。威胁类型典型现象首要观测点落地措施凭据类登录日志大量失败后突然成功认证日志、来源 IP失败锁定、MFA、密码黑名单入口类异常 URL、上传目录出现脚本Web 访问日志、应用错误日志输入校验、上传白名单、组件升级流量类带宽打满、连接数暴涨网络流量、连接状态限速、ACL、TLS 强制内部类非计划内的内网扫描主机进程、内网流量最小权限、分段、依赖锁定2.2 用一条命令把本机暴露面摸清楚分类讲完要落到动作。第一步不是装防护而是知道自己暴露了什么。下面这段 bash 在 Linux 服务器上跑输出监听端口、对外连接和计划任务是排查入口类威胁的起点。# 查看所有监听端口及对应进程-t TCP -u UDP -l 监听 -p 进程 -n 不解析域名 ss -tulpn # 查看当前已建立的对外连接快速发现异常外联 ss -tnp state established # 列出所有用户的计划任务持久化常藏在这里 for u in $(cut -d: -f1 /etc/passwd); do echo $u crontab -l -u $u 2/dev/null done # 查看最近登录成功和失败的记录 last -n 20 lastb -n 20 2/dev/null逻辑说明ss -tulpn回答“我开了哪些门”重点看 0.0.0.0 上监听的非预期端口比如数据库 3306、Redis 6379 暴露到公网就是高危。ss -tnp state established回答“我现在连出去哪里”挖矿木马通常有稳定外联。计划任务循环回答“有没有人埋了持久化”。last和lastb回答“谁在尝试进来”。参数上-n不解析域名能避免 DNS 拖慢排查-p需要 root 才能看到进程名。这一步的产出应该是一张资产暴露表端口、进程、是否必须公网、负责人。没有这张表后面所有防范措施都是盲打。常见做法是每周跑一次并和上周对比新增的监听端口就是重点。2.3 从日志里识别暴力破解和 Web 扫描暴露面清楚后看日志。暴力破解和扫描是最高频的威胁也最容易从日志里认出来。下面这段 Python 读 SSH 认证日志统计失败来源是排查凭据类威胁的常用脚本。import re from collections import Counter # 匹配 sshd 失败登录行提取来源 IP pattern re.compile(rFailed password for .* from (\d\.\d\.\d\.\d)) counter Counter() with open(/var/log/auth.log, r, errorsignore) as f: for line in f: m pattern.search(line) if m: counter[m.group(1)] 1 # 输出失败次数前 10 的来源 IP for ip, count in counter.most_common(10): print(f{ip}\t{count})逻辑说明正则只抓Failed password行避免把正常登录算进去。Counter做聚合most_common(10)给出 TOP10 来源。参数上日志路径 Debian/Ubuntu 是/var/log/auth.logCentOS 是/var/log/secure要按系统改。errorsignore防止日志里有非 UTF-8 字符导致脚本中断。判断标准单个 IP 短时间内几十上百次失败基本就是暴力破解如果失败后出现一次成功要立刻查那个账号做了什么。Web 扫描类似看访问日志里大量 404 和敏感路径/admin、/.env、/phpmyadmin。这一步的产出是封禁名单和需要加固的账号清单。3. 安全防范措施的落地配置认证、网络、主机三层怎么做3.1 认证层把弱口令和撞库挡在门外认证层是性价比最高的一层因为绝大多数入侵起点就是有效凭据。落地动作有三个强制密码复杂度、登录失败锁定、多因素认证。下面这段是 Linux 上通过pam_faillock做失败锁定的配置改/etc/pam.d/sshd和/etc/security/faillock.conf。# /etc/security/faillock.conf 关键参数 # 连续失败 5 次锁定 deny 5 # 锁定 900 秒 unlock_time 900 # 统计窗口 900 秒 fail_interval 900 # /etc/pam.d/sshd 在 auth 段加入 auth required pam_faillock.so preauth auth [defaultdie] pam_faillock.so authfail account required pam_faillock.so逻辑说明deny5表示 5 次失败后锁定unlock_time900是自动解锁时间fail_interval是计数窗口。preauth在认证前检查是否已锁定authfail在失败时累加计数。参数不要设得太激进deny3容易把正常用户输错密码也锁掉unlock_time太长会增加运维成本。改完要用一个新会话测试别把自己锁在外面这是血泪经验。多因素认证方面SSH 可以上 TOTPWeb 后台可以上短信或验证码。关键不是上哪种而是“密码泄露后还有第二道”。这一步的产出是所有对外登录入口都有失败锁定管理员账号全部启用 MFA。3.2 网络层用最小开放原则收敛暴露面网络层的核心是“只开必须的只让该访问的访问”。落地动作是安全组/防火墙规则、端口收敛、限速。下面这段是iptables的基础规则适合单机场景。# 默认拒绝所有入站允许所有出站 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 允许已建立的连接回包 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许本地回环 iptables -A INPUT -i lo -j ACCEPT # 只放行 SSH 和 HTTP/HTTPS其他一律拒绝 iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 对 SSH 做连接频率限制防止暴力破解 iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 10 --name SSH -j DROP逻辑说明-P INPUT DROP是默认拒绝这是最小开放原则的体现。ESTABLISHED,RELATED保证已建立连接的回包能进来否则连自己发起的请求都收不到响应。recent模块做频率限制60 秒内超过 10 次新连接就丢包。参数上--hitcount和--seconds要按业务调整太严会误伤正常用户。注意规则顺序DROP要放在放行规则之后。这一步的产出是公网只暴露必要端口数据库、缓存、管理后台一律不对外。常见做法是把管理后台放到内网或通过跳板访问而不是直接暴露。3.3 主机层补丁、权限和审计三件事主机层的落地动作是补丁管理、最小权限、审计日志。补丁不是“有空再打”而是有节奏地打。下面这段是检查系统可升级安全补丁和关键文件权限的命令。# Debian/Ubuntu 查看可升级的安全补丁 apt list --upgradable 2/dev/null | grep -i security # CentOS/RHEL 查看安全更新 yum updateinfo list security 2/dev/null # 检查敏感文件权限应为 600 或 640 ls -l /etc/shadow /etc/passwd /etc/ssh/sshd_config # 查找全局可写的目录和文件这是提权常见入口 find / -xdev -type d -perm -0002 -print 2/dev/null find / -xdev -type f -perm -0002 -print 2/dev/null逻辑说明前两条回答“有没有该打的补丁”security过滤只关注安全相关。ls -l检查关键文件权限/etc/shadow如果是 644 就是严重问题。find找全局可写目录-xdev不跨文件系统避免扫到挂载盘-perm -0002匹配其他人可写。参数上2/dev/null屏蔽权限不足的报错。审计方面至少要开启登录日志、sudo 日志、关键目录的文件变更监控。这一步的产出是补丁有周期、权限有基线、变更可追溯。三件事都不复杂难在坚持。4. 避坑与排查五条真实踩坑记录4.1 只封 IP 不查账号攻击者换个 IP 继续现象封了一批暴力破解 IP第二天同样的账号又被尝试。原因攻击者用的是代理池或肉鸡IP 是消耗品但目标账号是固定的。解决封 IP 的同时对高频被尝试的账号做重点监控必要时强制改密并启用 MFA。如果某个账号持续被针对说明它已经在攻击者的字典里。4.2 防火墙规则顺序写反放行规则永远不生效现象加了放行 443 的规则但 HTTPS 还是不通。原因前面有一条DROP规则先匹配了iptables是从上往下匹配命中即停。解决用iptables -L -n --line-numbers看规则顺序把具体放行放在通用拒绝之前。改规则前先备份iptables-save rules.bak改错了能回滚这是后悔药。4.3 日志轮转没配出事时关键日志已被覆盖现象发现异常想查一周前的访问日志发现只剩最近两天的。原因logrotate默认保留份数少或者应用自己截断了日志。解决把认证日志、Web 访问日志的保留周期调到至少 30 天重要日志异地备份。参数上/etc/logrotate.d/下对应配置的rotate和maxage要改。安全事件的时间线往往跨越数周日志没了就等于黑匣子丢了。4.4 补丁打完没重启内核漏洞依然存在现象apt upgrade显示内核已更新但漏洞扫描仍报内核版本旧。原因新内核装了但没重启运行中的还是旧内核。解决更新内核后安排重启用uname -r确认运行版本。生产环境要配合维护窗口不能想重启就重启。常见做法是先滚动重启确认业务正常再继续。4.5 把安全全押在一个设备上内网横向照样畅通现象边界防火墙配得很严但一台 Web 服务器被拿下后攻击者直接连上了内网数据库。原因内网默认互信没有分段和访问控制。解决内网也做最小权限数据库只允许应用服务器访问管理网段和业务网段隔离。安全防范措施是分层的边界只是第一层内网不分段等于门锁了但窗户开着。5. 进阶把威胁情报和自动化检查接进日常前面讲的都是手工动作能解决大部分常见问题但人总会漏。进阶方向是把检查自动化让机器每天替你跑一遍。我自己的习惯是写一个巡检脚本把暴露面、失败登录、补丁状态、全局可写文件四类检查串起来输出一份日报。下面是一个简化版的框架。import subprocess import datetime def run(cmd): # 统一执行命令并返回输出失败返回空串 try: return subprocess.check_output(cmd, shellTrue, textTrue, stderrsubprocess.DEVNULL) except subprocess.CalledProcessError: return def check_listen_ports(): # 提取监听端口重点关注 0.0.0.0 out run(ss -tulpn) return [l for l in out.splitlines() if 0.0.0.0 in l or ::: in l] def check_failed_login(): # 统计失败登录 TOP5 out run(lastb -n 100 2/dev/null | awk {print $3} | sort | uniq -c | sort -rn | head -5) return out def check_world_writable(): # 查找全局可写目录 return run(find / -xdev -type d -perm -0002 2/dev/null | head -20) if __name__ __main__: print(f 安全巡检 {datetime.date.today()} ) print(\n[监听端口]) for line in check_listen_ports(): print(line) print(\n[失败登录 TOP5]) print(check_failed_login()) print(\n[全局可写目录]) print(check_world_writable())逻辑说明run封装命令执行统一处理异常。check_listen_ports过滤出对外监听的端口这是每天最该看的变化。check_failed_login用lastb统计失败来源。check_world_writable找提权入口。参数上head -20限制输出量避免日报太长没人看。这个脚本可以挂到 cron 每天跑一次输出发到自己的邮箱或 IM。威胁情报方面可以把已知恶意 IP 列表和你的连接日志做比对命中就告警。常见做法是用公开的威胁情报源导出 IP 段定期更新。注意情报有误报命中后要人工确认再处置别直接自动封禁导致误伤业务。验证方法上我一般用两种一是自己模拟攻击比如从外部扫自己的端口、尝试弱口令看防护是否生效二是看告警是否真的触发配了规则不代表规则对。有一次我配了失败锁定结果测试时发现 PAM 配置写错模块顺序根本没生效这种问题只有实测才能发现。最后说个习惯每次做完防护配置我都会在文档里记下“改了什么、为什么改、怎么回滚”。安全配置最怕的是半年后自己都忘了当初为什么这么设出问题不敢动。把回滚步骤写清楚比多配一条规则更有价值。希望帮到你。本文还有配套的精品资源点击获取