📄 一句话概括
外到内的端口放行了,攻击者也能主动来连——再叠一层判断: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 秒实验
- 对着三次握手讲清楚为什么挡 SYN 就挡住了发起。
- 想想 UDP 应用(如 DNS)在防火墙上怎么放行。
- 用控制位的说法解释【外部只能回应】。
常见误区
- 以为放行端口就等于放行一切——控制位还能再筛一道。
- 以为对 UDP 也一样好使——UDP 没有控制位。
自测三问(点开对答案)
1. 外到内放行端口的问题是什么? —— 攻击者也能主动发起连接。 2. 怎么挡住【发起】? —— 阻止 SYN=1,放行 ACK=1。 3. 哪种协议用不了这招? —— UDP——没有控制位。- ☐ 下一节(5.2.5 从公司内网访问公开区域的规则)
相关笔记
- 连接操作的实际过程 — SYN/ACK 的出处
- 从公司内网访问公开区域的规则 — 规则升级到区域
- 🔌 网络是怎样连接的 · 索引