简介:这份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(r"Failed password for .* from (\d+\.\d+\.\d+\.\d+)") counter = Counter() with open("/var/log/auth.log", "r", errors="ignore") 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.log,CentOS 是/var/log/secure,要按系统改。errors="ignore"防止日志里有非 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 [default=die] pam_faillock.so authfail account required pam_faillock.so逻辑说明:deny=5表示 5 次失败后锁定,unlock_time=900是自动解锁时间,fail_interval是计数窗口。preauth在认证前检查是否已锁定,authfail在失败时累加计数。参数不要设得太激进,deny=3容易把正常用户输错密码也锁掉,unlock_time太长会增加运维成本。改完要用一个新会话测试,别把自己锁在外面,这是血泪经验。
多因素认证方面,SSH 可以上 TOTP,Web 后台可以上短信或验证码。关键不是上哪种,而是“密码泄露后还有第二道”。这一步的产出是:所有对外登录入口都有失败锁定,管理员账号全部启用 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, shell=True, text=True, stderr=subprocess.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 配置写错模块顺序,根本没生效,这种问题只有实测才能发现。
最后说个习惯:每次做完防护配置,我都会在文档里记下“改了什么、为什么改、怎么回滚”。安全配置最怕的是半年后自己都忘了当初为什么这么设,出问题不敢动。把回滚步骤写清楚,比多配一条规则更有价值。希望帮到你。
本文还有配套的精品资源,点击获取