🔌 第五章 服务器端的局域网中有什么玄机
📄 一句话概括

外到内的端口放行了,攻击者也能主动来连——再叠一层判断:SYN=1 的包(发起)阻止、ACK=1 的包(回应)放行,让外部只能回应、不能发起。

📝 本节和前面几节的关系

5.2.3 只解决了【用什么应用】;本篇解决【谁主动】。

一、问题

【外到内 80 放行】的规则会被钻空子: 攻击者也可以主动向 80 端口发起连接。

二、解法:控制位

TCP 头的控制位能区分包的性质: SYN=1=要建立新连接(发起)——从外到内阻止; ACK=1=连接已建立的后续包(回应)——放行。

三、边界

UDP 没有控制位,这一招用不上—— 对 UDP 只能靠地址与端口粗过滤。

四、动手 Demo:用控制位挡住【发起】

问题:外 -> 内的 80 端口放行后,攻击者也能主动来连。解法:看 TCP 控制位——

for s in ['SYN=1 的包(发起连接)从外到内 -> 阻止',
    ACK=1 的包(连接已建立后的回应) -> 放行']:
    print(s)
print()
print('效果:外面的机器只能回应、不能发起')

实跑输出:

--------------------------------------------------------------------
用控制位挡住【发起】
--------------------------------------------------------------------
  问题:外 -> 内的 80 端口放行后,攻击者也能主动来连。
  解法:看 TCP 控制位——

    SYN=1 的包(发起连接)从外到内 -> 阻止
    ACK=1 的包(连接已建立后的回应) -> 放行

  效果:外面的机器**只能回应、不能发起**——
  主动权全留在内网这边。UDP 没有控制位,用不了这一招。

对照 2.2.3 的三次握手:SYN 是握手第一步—— 把它挡住,等于把【主动权】全部收归内网。

30 秒实验

  1. 对着三次握手讲清楚为什么挡 SYN 就挡住了发起。
  2. 想想 UDP 应用(如 DNS)在防火墙上怎么放行。
  3. 用控制位的说法解释【外部只能回应】。

常见误区

  1. 以为放行端口就等于放行一切——控制位还能再筛一道。
  2. 以为对 UDP 也一样好使——UDP 没有控制位。
自测三问(点开对答案) 1. 外到内放行端口的问题是什么? —— 攻击者也能主动发起连接。 2. 怎么挡住【发起】? —— 阻止 SYN=1,放行 ACK=1。 3. 哪种协议用不了这招? —— UDP——没有控制位。

相关笔记