用 iptables 绕过端口转发

Wrapping one's head around port forwarding with iptables

老实说,我了解正在发生的事情的一部分。就像我需要输入规则,以使用特定过滤器转发一样。但是我需要一个规则,两个,三个吗?为什么有些人 FORWARD 而其他人也 OUT 而有些人甚至 INSYNESTABLISHEDRELATED 是否需要单独的规则? conntrack 是一个单独的包吗?为什么一位向导会 -t nat 而其他所有向导都不会?

这真的很痛苦,因为每个人都提供了几乎可复制和粘贴的指南,但没有足够的解释他们实际提供的解决方案,或者如果 reader 的设置(哦惊喜)是并非 100% 相同。

我主要想实现的是:

请解释你为什么做或不做某事。我真的很想掌握这些东西。谢谢!

我找到的最佳解释是 archwiki, even with further references to more in depth descriptions and diagrams. One real in depth guide I found through archwiki is this iptables tutorial

例如,here (Simple stateful firewall)是一个详细的例子,解释了所有的决定。

因为我是视觉学习者,所以我还发现 this youtube video 非常有帮助,它显示和解释了一个 运行 示例,其中包含两个几乎任何人都可以在家中重现的 VM。

现在我觉得我处于一个水平,我主要只需要参考下图,它显示了包如何遍历表和链:

进一步阅读:

旁注:

  • 我总是很困惑,为什么有些指南包含 ESTABLISHED,RELATED 规则而有些则没有。这些规则是否存在决定了现有网络流量是否被切断。例如,如果您使用 ssh 会话连接到机器,那么如果您的 ssh 会话不会因添加 iptables 规则而被终止,那就太好了,因此有一个允许您的 ESTABLISHED 连接的规则很好。 RELATED 包例如响应 ping 或网络信息包 (ICMP)。
  • Simple stateful firewall example也解释了不同nmap测试的区别
  • 也不错overview