Skip to content

第一百二十八章:暗流

问道期

涉及内核源码:

林小源在网络之海的深处发现了一些不对劲的东西——水面上漂浮着无数伪装的船只,有些船只没有真正的货物,只是反复进出港口,消耗着港口的资源。

"那是 SYN Flood。"一个警惕的声音从旁边传来。

林小源看到一个穿着黑色铠甲的哨兵站在岸边,手中握着一面盾牌。盾牌上刻着"SYN cookies"三个字。

"我是网络安全的守护者。"哨兵说,"你看到的那些空船——攻击者发送大量 SYN 报文,但不完成三次握手。服务器为每个 SYN 分配资源等待 ACK,最终资源耗尽。"

"怎么防御?"

哨兵举起盾牌:"SYN cookies。服务器不分配资源——把连接信息编码在序列号里返回。如果客户端真的完成握手,序列号会带回来,服务器验证后才分配资源。攻击者的 SYN 不会完成握手,不会消耗资源。"

"但 SYN cookies 不是万能护符。"哨兵把盾牌放低,"它是在 SYN backlog 承压时牺牲部分 TCP 选项空间换生存能力。正常情况下,内核仍希望用 backlog 和 request socket 管理半连接;只有洪水真压上来,才让序列号承担更多信息。防御的目标不是让攻击消失,而是避免资源先被半连接耗尽。"

破关试炼

暗流初试

SYN Flood 主要试图耗尽服务器保存半连接的哪个队列资源?

答对后才能继续滑动和进入下一章。

"还有其他攻击吗?"林小源问。

哨兵指向远方的海面——那里有一片异常汹涌的水域,无数船只从四面八方涌向一个港口。

"DDoS——分布式拒绝服务。"哨兵说,"不是一个攻击者,而是成千上万个——分布在世界各地,同时向目标发送大量流量。目标被淹没,合法请求进不去。"

"怎么防御?"

"流量清洗、CDN。"哨兵说,"在流量到达目标之前,用专门的设备过滤恶意流量。CDN 把流量分散到全球的节点,每个节点分担一部分压力。"

"中间人攻击呢?"

哨兵的表情变得严肃:"ARP 欺骗——攻击者冒充网关,截获你的所有流量。你访问银行网站,实际上访问的是攻击者的假网站。防御:HTTPS、证书验证。"

"内核能做的是分层减压。"哨兵指向海面上的三道闸门,"最早的闸门可以是 XDP/eBPF,在 skb 分配前就丢掉明显恶意包;再往后是 tc、netfilter、conntrack、socket backlog;用户态还有限流、TLS、认证和应用层防护。越早丢包,越省资源,但能看的上下文越少。越晚决策,信息越全,代价越高。"

"所以 XDP 不是替代所有防火墙。"

"对。它是早期拦截和快速转发的利刃,不是完整策略系统。"

破关试炼

早闸之试

在网络接收路径中,常用于 skb 分配前早期处理/丢包的 eBPF hook 技术叫什么?

答对后才能继续滑动和进入下一章。

"端口扫描?"

"nmap。"哨兵说,"攻击者扫描你的服务器,看哪些端口开放——SSH、HTTP、MySQL。知道开放了哪些端口,就知道攻击哪些服务。防御:关闭不必要端口,用防火墙限制访问。"

"DNS 劫持?"

"篡改 DNS 响应——把你引导到钓鱼网站。"哨兵说,"防御:DNSSEC,DNS 响应签名验证。"

林小源看着那些暗流,忽然明白了——网络安全不是一件事,而是无数件事。从网络层到应用层,每一层都有攻击,每一层都需要防御。

"安全原则是什么?"他问。

哨兵收起盾牌:"最小权限——只开放必要的端口,只授予必要的权限。纵深防御——不依赖单一措施,多层防御。默认拒绝——拒绝所有流量,只允许已知的安全流量。日志审计——记录所有访问,出了问题可以追溯。"

"少即是多。"

"在安全领域,是的。"哨兵说,"攻击面越小,越安全。每多开一个端口,就多一个入口。每多一个服务,就多一个漏洞的可能。"

"容器让这件事更复杂。"哨兵望向远处一片隔离海域,"network namespace 让每个容器看到自己的接口、路由和 netfilter 规则;cgroup 和 BPF 又能按服务、进程组、socket 维度施加策略。攻击不再只看主机的 eth0,还要看 veth、bridge、overlay、NAT 和宿主机转发路径。"

"那日志呢?"

"日志也要分层:netfilter 计数器、conntrack 表、BPF map、tcpdump、perf trace、drop monitor,各看一段水路。没有观测,安全就是猜。"

破关试炼

隔海之试

容器中让每个环境拥有独立网络接口、路由和规则视图的机制是什么?

答对后才能继续滑动和进入下一章。
c
/*
 * 常见的网络攻击:
 *
 * 1. SYN Flood
 *    发送大量 SYN 不完成握手
 *    耗尽服务器资源
 *    防御: SYN cookies
 *
 * 2. DDoS
 *    分布式拒绝服务
 *    大量流量淹没目标
 *    防御: 流量清洗、CDN
 *
 * 3. 中间人攻击
 *    截获通信
 *    ARP 欺骗
 *    防御: HTTPS、证书验证
 *
 * 4. 端口扫描
 *    探测开放端口
 *    nmap 工具
 *    防御: 关闭不必要端口
 *
 * 5. DNS 劫持
 *    篡改 DNS 响应
 *    防御: DNSSEC
 */

printf("=== 网络安全 — 识别暗流 ===\n\n");

printf("常见的网络攻击:\n\n");

printf("1. SYN Flood:\n");
printf("   发送大量 SYN 不完成握手\n");
printf("   耗尽服务器资源\n");
printf("   防御: SYN cookies\n\n");

printf("2. DDoS:\n");
printf("   分布式拒绝服务\n");
printf("   大量流量淹没目标\n");
printf("   防御: 流量清洗、CDN\n\n");

printf("3. 中间人攻击:\n");
printf("   截获通信\n");
printf("   ARP 欺骗\n");
printf("   防御: HTTPS、证书验证\n\n");

printf("4. 端口扫描:\n");
printf("   探测开放端口\n");
printf("   nmap 工具\n");
printf("   防御: 关闭不必要端口\n\n");

printf("5. DNS 劫持:\n");
printf("   篡改 DNS 响应\n");
printf("   防御: DNSSEC\n\n");

printf("--- 内核安全机制 ---\n");
printf("SYN cookies:\n");
printf("   不分配资源\n");
printf("   编码在序列号中\n\n");
printf("iptables:\n");
printf("   过滤恶意流量\n");
printf("   限速\n\n");
printf("eBPF:\n");
printf("   可编程的流量处理\n");
printf("   DDoS 防御\n\n");

printf("--- 安全原则 ---\n");
printf("1. 最小权限\n");
printf("2. 纵深防御\n");
printf("3. 默认拒绝\n");
printf("4. 日志审计\n");

道藏笔记

内核启示

网络安全需要多层次防御。

常见攻击:

  • SYN Flood — 耗尽资源
  • DDoS — 流量淹没
  • 中间人 — 截获通信
  • 端口扫描 — 探测漏洞

防御手段:

  • SYN cookies — 防御 SYN Flood
  • iptables — 流量过滤
  • eBPF — 可编程防御
  • XDP — skb 分配前早期处理
  • conntrack/netfilter — 有状态过滤和 NAT
  • network namespace — 容器网络隔离

安全原则:

  • 最小权限
  • 纵深防御
  • 默认拒绝
  • 日志审计

网络安全是"暗流"中的"航行"——需要警惕和防御。


破关试炼

网络安全之试

暗流一章讲网络安全时,域名解析链路里常被劫持或污染的系统是什么?

答对后才能继续滑动和进入下一章。

以修仙之名,悟内核之道