理解 Linux 中的 iptables 链(以套接字术语)

理解 Linux 中的 iptables 链(以套接字术语)

以下说法正确吗:

A)输出chain 是针对“生成“由机器本身即OUTPUT链影响连接()功能。

B)输入链是针对““并将在机器即 INPUT 链影响处结束绑定()听()功能。

如果是,那你为什么要在防火墙上控制这些功能?防火墙不是监听端口 80 的 Web 服务器或连接到该端口的客户端。

我是否可以正确地假设这些链仅仅是为了满足多用途机器(即同时是防火墙和 Web 服务器)的需求而存在?

答案1

您的陈述是正确的,但是并不完整。

看一下整个图片: http://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

这也许可以回答您现在以及将来的许多问题。

许多人想要防火墙,因为:
- 计算机充当路由器,因此阻止某些流是所需的功能
- 计算机由人操作。而人并不完美。因此,如果您忘记卸载某些服务器,或者服务器有错误(例如“常规”ntpd,它总是想监听每个接口,即使您要求它不要回答),使用防火墙是很酷的
- netfilter 可用于重定向端口(到另一个端口或另一台计算机)
- netfilter 可用于仅允许某些 IP 访问 Web 服务器,或实现端口敲击等
- 还有很多其他事情

答案2

INPUT 和 OUTPUT 链确实按照您描述的方式工作。

即使防火墙机器不是“多用途”计算机,将其 INPUT 和 OUTPUT 链设置为仅允许明确需要的流量进出也是很好的做法。如果您也有在“多用途”计算机上使用这些链的习惯,那么当攻击者尝试使用出站 HTTP 连接将第二阶段漏洞代码拉到他正在攻击的服务器时,您就会获得优势。

答案3

INPUT/OUTPUT 链提供了很大程度的安全性。许多应用程序无法精细控制从哪里接受连接(或可以连接到哪里),因此我们需要一种通用方法来控制这一点。

此外,iptables 还可以缓解许多攻击/漏洞。假设发生了一个非常简单的连接泛洪攻击,有人同时打开大量连接。您的应用程序的传入连接队列可能会填满,导致合法连接失败。iptables 可以防止这种情况发生。
有一个普遍接受的最低限度的 iptables 规则列表,应该在所有服务器上实施以确保安全。请参阅这里(这些规则有更“官方”的来源,但我不记得在哪里)。

答案4

好吧,你可以不使用 OUTPUT 链,而“只”确保:

  • 防火墙上的任何软件都不会执行你无法控制的 connect() 操作
  • 但你如何确保:
    • 当有人尝试连接非监听端口时,内核没有响应
    • 您的软件都不会发送您无法控制的原始/ICMP/IGMP/其他数据包

除了使用 INPUT 链之外,您还可以“仅”确保:

  • 防火墙上的任何软件都不会执行你无法控制的 bind() 或 listen() 操作
  • 但你如何确保:
    • 你的软件和内核没有处理你不希望它们处理的畸形/ICMP/IGMP/其他数据包

TL;DR iptables 在自主访问控制 (DAC) 甚至完全无法控制的领域为您提供了基本的强制访问控制 (MAC)。

相关内容