S59

网络安全进阶

点击正文段落选定收藏或划线位置;未选定时使用屏幕内第一段。

课内目录

1 网络安全进阶要覆盖什么

网络安全进阶从 1 个实际问题开始:某台 Linux 主机上的普通服务进程被利用后,它还能连接哪些机器、读取哪些文件、冒用哪些身份?如果答案只是“入口有防火墙”,保护范围就不完整。攻击者取得进程权限后,可能沿着已经允许的管理连接、共享目录或服务证书继续行动。进阶安全要把入口保护延伸到主机内部、主机之间以及凭据生命周期,同时保留业务需要的连接。

本课使用独立测试环境:edge-a 是入口服务主机,worker-b 提供处理服务,store-c 保存测试文件,admin-j 是管理入口。正常业务只要求 edge-a 访问 worker-b:8443,管理员从 admin-j 通过 SSH 维护各主机;入口服务不需要直接登录 store-c。这些名称可以替换成自己的实验机,但操作前必须确认目标、管理通道和恢复方式。所有探测都限于已授权的测试地址。

先建立现状证据。用 ps -eo pid,user,comm 查看进程与运行用户,用 ss -lntp 查看监听地址和端口,用 ip route get <目标IP> 查看系统选择的出口,再用 stat <配置路径> 检查文件属主和权限。普通用户运行 ss 时可能看不到其他用户的进程信息,这代表观察权限受限,不能据此断言端口没有所属进程。监听在 127.0.0.1 与监听在所有接口上的服务,暴露范围也不同。

安全目标应描述可检查的行为:入口进程只能调用指定处理接口;服务账户不能读取管理员私钥;证书被报告泄漏后,旧身份应在规定时间内失效。漏洞修复、权限控制、网络限制和事件响应分别处理不同问题。补丁减少可利用入口,权限限制入侵后的动作,检测帮助发现异常,响应让异常真正停止。缺少其中任何环节,都可能留下持续访问的路径。

进程、连接、身份与响应共同构成安全范围
进程、连接、身份与响应共同构成安全范围

学习本课不需要实现复杂的攻击链,也不需要研究网络栈内部。我们只追踪可见的进程、文件、连接和授权结果。判断控制是否有效时,既要看到违规动作失败,也要看到正常任务成功,还要能解释失败发生在哪个检查点。“没有收到报警”只说明当前没有报警记录,不能单独证明系统安全。

2 零信任、微隔离与身份

零信任的入门含义是:位置本身不足以构成信任,访问需要明确验证并限制权限。来自内网的连接仍应说明调用者是谁、访问什么资源、是否满足当前策略。它不是要求每个数据包都让人重新输入密码,也不是买入某种产品就完成改造。可以先从管理入口、敏感服务与短期凭据开始,把原来隐含的“内网都可以”改成可说明的允许条件。

微隔离把较大的可达网络拆成较小的访问关系。本例只允许 edge-a 调用 worker-b 的业务端口,不允许它任意访问 worker-b 的管理端口或 store-c 的文件服务。隔离粒度可以是主机、接口、服务或工作负载,但粒度越细,维护依赖关系的成本越高。先记录 DNS、时间同步、监控和必要的出站调用,避免规则生效后业务因依赖被误断而失败。

身份需要分层理解。Linux 的 UID 决定本机进程读取文件、运行命令时受到哪些约束;远端服务看到的通常是令牌、证书或应用账户。远端不会因为请求来自名为 worker 的本地用户,就自动知道它具有什么业务权限。反过来,持有服务证书也不应该因此获得该主机的管理员权限。主机账户与服务身份需要建立明确映射,但不能随意互相替代。

以 TLS 客户端证书为例,服务端可以验证签发链、有效期和客户端身份,再根据该身份决定允许访问哪个接口。证书验证成功只说明通过了相应认证检查,并不代表拥有所有接口权限。服务器证书主要帮助客户端确认服务端身份;需要客户端身份认证时,还要配置相应机制。禁止用关闭证书校验的方式“修好”连接,因为这会移除本来要验证的条件。

文件权限也属于这条链。运行账户只应读取自己所需的凭据;私钥目录不应对其他服务账户开放。可以用 namei -l <私钥路径> 查看路径各级目录的权限,用 stat <私钥路径> 检查文件属性。仅把文件设为 600 不足以解决复制到备份、调试目录或历史发布包中的旧副本问题。排查时不要把私钥内容打印到终端或附入工单。

策略最好写成“主体、资源、动作、条件”。例如主体是入口服务身份,资源是处理服务的提交接口,动作是建立受认证的业务请求,条件包括证书有效、目标端口正确和授权规则允许。IP 限制负责缩小路径,身份校验负责确认调用方,应用授权负责限制动作。它们可以配合,但不能把某个来源 IP 当作不可冒用的永久身份。

还要定义身份何时结束:服务下线、人员离职、凭据泄漏和权限变化,都需要撤销访问。短有效期能够缩短部分风险窗口,却不能代替紧急失效能力。进阶方案必须回答:谁有权宣布身份失效,哪些入口会执行,已建立连接如何处理,以及怎样证明旧凭据已经不能继续使用。

3 检测工程与威胁狩猎边界

检测工程把风险假设变成可持续运行的检查。例如“入口主机不应发起到文件主机的 SSH 连接”,可以转化为来源、目标、端口、时间和动作结果的匹配规则。规则不仅要有名字,还要注明依赖哪些日志、哪些情况不覆盖、谁接收结果以及收到后执行什么动作。没有数据源的检测表达式,即使写得完整也不会产生可靠结果。

威胁狩猎从尚未被现有规则解释的假设出发,主动搜索相关活动。例如怀疑旧证书仍被使用,就按证书标识、服务身份和时间范围查找访问。狩猎可以发现规则缺口,但不能保证找出所有入侵,也不能把“查过没有发现”写成“确认从未发生”。应记录搜索范围、保留期限和缺失的数据,让结论与证据覆盖面相匹配。

主机侧可以从 journalctl -u ssh --since '30 minutes ago' 开始观察 SSH 服务日志;部分系统的服务单元名是 sshd,应以实际配置为准。网络侧可查看防火墙拒绝计数、连接记录和服务访问日志。ss -ntp 展示当前连接,不能重建昨天已经结束的会话。日志缺失可能来自采集停止、权限不足、轮转或时间范围错误,并不只意味着没有活动。

把事件串起来时,至少统一时间、主机标识、身份和结果。主机时间偏差会让“先泄漏、后访问”的顺序看起来颠倒;地址转换可能让多个来源显示成相同出口。证书轮换后,只记录账户名也可能分不清新旧凭据。可在允许的范围内记录证书序列号或指纹等标识,但应确认它们如何产生、是否完整以及能否用于关联。

从风险假设到检测、处置和复验的流程
从风险假设到检测、处置和复验的流程

规则上线前,用已知允许与已知拒绝的测试事件验证。若服务重试在 1 分钟内制造大量相似记录,应考虑去重和聚合,否则值班人员会被重复告警淹没。阈值降低通常增加敏感度,也可能带来更多误报;阈值升高可能漏掉低频活动。阈值应根据实际业务、数据质量和响应能力调整,而不是直接照搬示例数字。

检测与狩猎最终都需要交接到行动。告警应附带最少但够用的上下文:发生时间、涉及主机、身份、目标、观察结果和建议核对项。高风险事件可先限制明确异常的身份,再确认业务影响;证据不足时则按既定流程补充调查。是否自动隔离取决于误判代价与恢复能力,不能因为技术上能自动执行就默认全部自动执行。

4 动手:设计一次横向移动阻断

横向移动指攻击者在取得初始访问后,继续接触其他主机或服务。这里设计 1 次受控验证:模拟入口进程所在主机尝试连接原本不需要的管理服务,检查网络策略是否阻断,同时确认业务调用和管理入口仍能使用。实验不需要利用漏洞、不需要收集口令,也不需要扫描整段网络。每次只改变明确的访问关系,便于解释结果。

先在实验记录中填写真实地址和接口。下列 192.0.2.10 与 192.0.2.30 是文档示例地址,分别代表入口与文件主机,不应直接当作现有环境配置。记录应用监听端口、当前防火墙管理方式、是否存在 IPv6 地址,以及管理连接的来源。使用远程 shell 修改规则前,应有可用的控制台或独立恢复通道,并保留现有规则副本。

先测正常路径。入口主机使用 curl --connect-timeout 3 --max-time 5 --cacert lab-ca.pem https://worker-b:8443/health 调用测试健康接口;如果该接口要求客户端证书,还需提供专门的实验凭据。确认返回内容符合预期,而非只看 TCP 已连接。随后从管理入口验证 SSH 可用。若这时已有失败,先排查原有问题,不把故障归因于尚未部署的隔离策略。

再记录待阻断路径的初始状态。在入口主机执行 nc -vz -w 3 192.0.2.30 22,只检查指定 SSH 端口的连接结果。不同 nc 实现的参数可能不同,应参考本机帮助。端口原本就拒绝连接时,不能仅凭规则部署后仍失败证明规则有效;需要结合接收端监听状态、策略计数或其他已批准的测试证据确认控制确实被触发。

下面给出 nftables 的局部示意,仅用于由你管理、并已确认使用该工具的实验主机。先用 sudo nft list ruleset 查看现有规则和管理边界。示例在 store-c 的入站路径上拒绝来自入口 IPv4 地址的 SSH 新连接;它不构成完整隔离策略,也不覆盖其他来源、其他端口和 IPv6。

sudo nft add table inet s59_lab
sudo nft 'add chain inet s59_lab input { type filter hook input priority 10; policy accept; }'
sudo nft add rule inet s59_lab input ip saddr 192.0.2.10 tcp dport 22 ct state new counter reject
sudo nft list table inet s59_lab

表名应事先确认未被占用。这里使用独立实验表便于回退,不应清空整机规则。已有规则可能更早拒绝连接,其他管理工具也可能重新生成策略,所以必须核对实际生效路径。规则限定新连接,已经建立的 SSH 会话可能继续存在;这正是需要明确验证“新建连接”与“现有会话”边界的原因。

部署后重复相同的指定端口测试,观察拒绝结果与规则计数变化,再重复业务健康检查和管理入口检查。只有“违规路径被拒绝、正常路径成功、触发点有证据”同时满足,才能认为本次目标通过。如果连接超时但计数没有变化,应检查目标地址、路由和其他规则,而不是立即宣称阻断完成。重复测试应有明确次数,避免无限重试造成日志噪声。

最后用 sudo nft delete table inet s59_lab 回退本次独立实验表,并再次确认允许路径恢复到预期状态。仅在确认该表完全属于本实验时执行删除。将来源、目标、执行时间、命令退出状态、应用结果和计数变化写入记录。正式控制还需要覆盖地址变化、重启持久化和策略发布流程,这些可以在基线中逐项补齐,不能由本次单路径实验代替。

5 可见性与隐私取舍

可见性意味着能回答具体问题,不等于收集所有内容。判断横向连接是否越界,通常需要时间、来源、目标、端口、主体和允许或拒绝结果;判断证书是否被继续使用,需要凭据标识与认证结果。完整请求正文、终端输入或文件内容可能包含个人信息和秘密,未必能增加本次判断能力,却会显著扩大日志本身的敏感范围。

从问题反推字段,可以减少无目的采集。若目标是区分新旧证书,优先记录稳定的证书标识及签发者关联信息;若目标是判断文件权限变化,可记录路径、属主和权限变化结果。不要直接记录令牌、口令、私钥或完整认证请求头。日志中经过脱敏的字段仍可能通过时间、路径和账户关联到个人,因此也要限制查询权限和导出范围。

围绕安全问题选择字段并限制访问与保留
围绕安全问题选择字段并限制访问与保留

采集范围、保留时间与查询精度都带来成本。更长保留期有助于调查较早的活动,但会增加存储、访问管理与删除负担。大量细粒度事件也会占用 CPU、磁盘写入和网络带宽。加密连接使旁路观察难以看到应用内容,这是正常的保护效果;可以在经过授权的服务端记录认证与授权结果,而不是为了观察方便取消加密。

交互中的数值只展示关系,不是容量规划公式。真实环境应测量事件大小、事件速率、压缩效果与查询负载。采样可以降低开销,但被省略的事件通常无法事后恢复;关键认证失败、身份撤销和策略变更是否允许采样,需要单独决定。聚合计数适合趋势观察,却不能总是替代逐条事件证据。

日志还需要防止自身成为薄弱点。服务账户不应拥有任意删除集中审计记录的权限;采集停止、磁盘接近容量上限和发送失败应能被发现。排障时区分“业务事件没有发生”和“事件没有被记录或送达”。保留策略应包含到期删除与备份副本处理,访问授权应包含审批、审计和定期复查,使采集得到的信息始终服务于明确目的。

6 常见坑:堆工具无响应闭环

工具堆叠最常见的表现是:每个系统都有仪表盘,每类事件都能发通知,但无人知道谁负责终止访问。检测系统发现异常连接,资产系统给出过期负责人,值班人员找不到策略修改权限,最终攻击路径保持可用。解决这个问题要从事件处理过程入手,明确谁确认、谁处置、谁验证,以及交接失败时向谁升级。

另一个常见坑是把“配置存在”当作“控制生效”。配置文件里写了拒绝规则,但服务没有重新加载;策略只绑定到某个接口,实际流量经过另一个接口;IPv4 路径受限,IPv6 路径仍可达。应观察当前运行配置与实际访问结果。配置管理记录能说明想部署什么,运行状态与受控测试才能帮助说明现在发生什么。

网络失败也容易被误读。Connection refused 可能来自目标无监听,也可能来自显式拒绝;超时可能来自丢弃、路由问题或目标不可用;TLS 报错可能是主机名不符、信任链缺失或时钟问题。HTTP 的 403 通常表示请求到达了能作出授权判断的应用入口,但仍应结合服务日志解释。不能把所有错误都汇总成“防火墙拦截成功”。

按名称、路径、监听、认证与授权逐层定位失败
按名称、路径、监听、认证与授权逐层定位失败

恢复流程同样属于响应闭环。一次自动隔离可能中断监控、备份或管理员访问,导致后续调查更困难。预先定义隔离对象、保留通道、回退条件与最长观察时间,再通过演练检验。对于高影响动作,使用范围有限的策略和明确的操作授权,让值班人员能在压力下判断当前动作是否符合预案。

衡量闭环时,可分别记录事件发生、日志到达、检测触发、人员确认和访问终止的时间。检测很快但处置很慢,优化检测规则不一定能缩短总体风险窗口。还应记录误报、重复报警和恢复耗时。指标用于定位瓶颈,不能鼓励为了降低数字而随意关闭告警、缩短调查或把未验证的事件提前结案。

7 案例:证书泄漏未吊销持续被用

某处理服务使用客户端证书识别入口服务。运维人员发现 1 份包含证书和私钥的调试归档曾被放入不合适的共享目录,于是删除归档、生成新证书并替换入口配置。新连接恢复正常,事件便被标记为结束。但服务端仍然接受旧证书,攻击者如果已经复制私钥,就可能继续冒用原身份。删除泄漏文件不能收回已经复制的秘密。

该案例的关键不是“有没有换证书”,而是“旧身份何时不再被任何入口接受”。证书有效期仍有剩余,签发链也仍受信任;服务端若没有执行有效的撤销检查或等效的身份禁用策略,旧证书就可能继续通过认证。证书撤销机制需要签发端与验证端配合,不能假定生成新证书会自动让旧证书失效。

调查先确定受影响的证书标识、使用主体、可访问资源和可能泄漏时间段。使用 openssl x509 -in client.crt -noout -serial -dates -fingerprint -sha256 查看公开证书的序列号、有效期和指纹;这个命令不需要输出私钥。随后在服务端认证记录中搜索旧标识,核对访问来源、时间和结果。若此前没有记录足够字段,就应如实说明无法精确区分的范围。

处置需要同时处理凭据与入口。按照实际系统支持的方式撤销或禁用旧身份,向所有验证入口发布状态并确认加载成功;部署新凭据时缩小权限,避免沿用不必要的授权。不能只更新部分实例,因为流量可能被分配到尚未更新的实例。若系统使用撤销列表或在线状态查询,还应检查更新周期、缓存和查询失败时的行为。

现有连接也要单独核对。TLS 认证常发生在连接建立阶段,旧证书被禁用后,先前已经建立的会话不一定立即终止。应用可能还签发了独立的会话令牌,其失效规则也需要确认。根据系统能力和预案决定是否关闭相关会话、重启特定连接或禁用关联令牌,不能把“新连接被拒绝”扩大解释成“所有旧访问已经消失”。

验收时,在受控环境中使用旧实验凭据建立新连接,确认失败点确实是旧身份失效;再使用新凭据完成正常业务,并观察所有入口的结果。测试旧凭据时仍需验证服务器身份,不应关闭 TLS 校验。最后检查共享目录、发布包与备份中的泄漏副本,修复归档产生原因,更新审计字段,并记录无法追回的副本风险和后续监测范围。

8 把进阶安全控制写进基线

基线应让另一位运维人员能够部署、检查和恢复同样的控制。写“启用零信任”太抽象,可以改为“入口服务使用独立客户端身份,仅允许调用处理服务的指定接口;管理 SSH 只接受管理入口来源;身份泄漏后必须执行失效验证”。每条要求都要指出适用范围、负责人、证据位置和检查方法,使它能进入日常变更与交接。

网络基线记录允许关系及理由,而不只记录规则文本。例如入口到处理服务的业务端口、管理入口到主机的 SSH、主机到指定 DNS 与时间服务。还应注明地址族、接口或区域、策略发布位置及重启后的行为。临时例外需要负责人、原因、到期时间和复核方式;否则为了排障打开的访问往往会在故障结束后长期存在。

身份基线包括凭据签发、保存、轮换、撤销和销毁。服务之间尽量使用不同身份,以便限制权限和定位事件;私钥权限与备份范围要能检查。对证书记录到期提醒与失效测试,不把到期提醒等同于泄漏响应。对人员管理访问,则明确账户归属、权限审批和离岗处理,避免共享账户使操作无法追溯。

观测基线描述采集哪些字段、保存多久、谁能查询,以及采集失败如何发现。响应基线描述触发条件、处置步骤、允许自动执行的动作和恢复标准。检查可以使用现有日志、规则计数、配置审查和少量受控访问测试组合完成;不要求每次都运行全面探测,也不应为了留下证据而输出敏感凭据。

验收用成对结果表达:正常业务成功,未授权访问失败;新证书成功,旧证书失败;策略生效,管理恢复通道可用。对于暂时做不到的控制,应记录限制、补偿措施和改进期限。基线也要随服务依赖变化更新,否则过期的允许清单会阻碍业务,过期的例外则会扩大暴露范围。

9 从网络安全进阶走向系统性能工程(S60)

安全控制会消耗资源,也可能改变请求路径。客户端认证增加连接建立的工作,细粒度日志增加磁盘写入,集中采集增加网络流量,策略检查也需要处理时间。但观察到延迟变大时,不能立即把原因归给安全功能。DNS、服务重试、连接建立失败、日志队列积压和后端负载,都可能表现为相似的请求变慢。

进入系统性能工程前,先保留可比较的条件:相同业务请求、相近负载、相同测量位置和足够明确的时间窗口。分别记录请求成功率、响应时间、CPU、内存、磁盘与网络现象,并标注策略变更时间。查看 uptime、vmstat 1 5、df -h 和 ss -s 可以获得基础线索,但单个数值不能直接证明瓶颈原因。

例如启用详细访问日志后出现延迟升高,先确认日志写入是否集中在请求路径、磁盘空间是否不足、采集端是否造成回压,再设计有限的对照实验。若需要暂时调整采集细度,应明确范围、持续时间和保留的关键安全事件。性能优化不能靠不加分析地移除认证或授权,因为那会改变原本要满足的安全目标。

本课交给 S60 的问题是:在满足明确安全要求的前提下,如何用测量找到资源与延迟的瓶颈,并验证调整后的收益?安全与性能都需要基线、证据、受控变更和回退。现在先学会把问题描述成可观察现象,下一课再进一步建立系统性能分析的方法。

放进方案里

为入口服务所在环境编写进阶安全方案时,先附上主机、进程、身份和必要连接的简图。说明入口到处理服务只开放业务端口,管理访问从指定入口发起,文件存储按独立身份授权。允许关系需要业务负责人确认,并覆盖 DNS、时间同步和日志发送等实际依赖,避免只有主业务箭头而无法部署。

身份部分写清证书或令牌由谁签发、保存在哪里、哪些进程能读取、何时轮换以及泄漏后怎样失效。将“已生成新证书”与“旧证书已不能访问”分别列为检查项,并说明验证入口、状态更新与现有会话的处理方法。验收证据使用凭据标识和认证结果,不收集私钥正文。

检测部分围绕明确假设设计:入口主机尝试访问非业务管理端口、旧凭据继续认证、策略被意外修改。为每类事件指定数据源、必要字段、时间范围和责任人,约定日志延迟、采集失败与重复告警的处理方式。保留期限和查询权限按调查需要确定,涉及敏感内容时优先减少字段并限制导出。

实施部分采用小范围发布,事先保存规则与配置,准备独立恢复通道。验收同时执行正常业务、违规路径和旧身份失效测试,记录实际结果与触发证据。出现误阻断时按已定义条件回退,并复查遗漏依赖,不通过长期开放全部访问结束排障。

运行部分约定定期复查身份权限、网络例外和响应联系人,记录事件从发现到访问终止的时间。将日志量、磁盘占用、请求延迟和错误率纳入变更观察,为后续性能分析保留对照条件。方案交付物应足以让接班人员执行控制、验证结果和恢复服务,并明确尚未覆盖的路径及改进期限。

10 小结:下一步系统性能工程(S60)

网络安全进阶把进程权限、网络路径、服务身份、检测与响应连成可验证的控制。练习时检查自己能否解释:为何内网来源仍需认证;为何换证书不等于撤销旧身份;为何连接失败还需要触发证据;为何采集更多日志未必更容易完成调查。

下一步进入系统性能工程(S60):以稳定的安全要求为前提,测量系统资源和请求表现,定位瓶颈,验证优化效果。保留本课的拓扑、允许关系、日志字段与测试记录,它们将帮助你区分性能退化、策略误配和真实异常。

同阶段相关课

AI 答疑

默认关闭。启用后,只发送本课标题、最近阅读的屏幕内正文摘录(最多 6000 字)与本次问题。

配置自己的服务