答案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)。