前言

前言

前言

就像 Linux 中的所有内容一样,我相信有很多方法可以得到预期的结果iptables。我想将答案限制在以下类别中:

  1. 各个选项之间有什么区别?
  2. 哪个选项最好(或者它们相同)?
  3. 为什么您更喜欢其中一个?

请明确说明您指的是哪个类别。您可以说明优先,但不要暗示它是最好的

例如

我更喜欢将其--jump作为第一个参数,因为我认为首先说明意图会读起来更好,并且我喜欢垂直对齐多个命令的参数。

问题

其中一个比另一个更好吗?

iptables -I INPUT --jump ACCEPT --in-interface lo
iptables -I INPUT --jump ACCEPT --source localhost

其中一个比另一个更好吗?

iptables -A INPUT --jump REJECT
iptables -P INPUT REJECT

答案1

在这两种情况下,您正在比较的两个 iptables 命令具有不同的语义,并且彼此的行为也不同。这不一定是哪个“最好”的问题,而是您要尝试匹配或提供什么行为的问题。

第一的:

iptables -I INPUT --jump ACCEPT --in-interface lo
iptables -I INPUT --jump ACCEPT --source localhost

第一个接受lo接口上的所有本地流量,无论其 IP 地址如何。第二个接受来自 127.0.0.1 的所有流量,无论它到达哪个接口。

在这种情况下,第一种显然更好。在第一种情况下,本地流量不一定使用 127.0.0.1 作为其 IP 地址,但您可能希望接受它(其中最著名的是 Debian 的奇数 127.0.1.1,但全局 IP 地址可以附加到lo),而在第二种情况下,有人可能会向您发送以 127.0.0.1 作为其源地址的欺骗数据包,您可能不想接受它。

第二:

iptables -A INPUT --jump REJECT
iptables -P INPUT REJECT

它们通常在功能上是相同的,除了:

当有人在 INPUT 链的末尾添加更多规则时,这些规则将不会产生任何效果。这里的档案中有很多对此感到困惑的人的例子。所以你可能想使用第二种形式。

链式策略不能接受参数,但 REJECT 目标接受参数。如果您想要指定拒绝原因,或者想要在不同情况下给出不同的拒绝原因,则必须使用第一种形式(请参阅iptables-extensions手册页以获取拒绝原因列表)。

答案2

关于偏好,我设置了 iptables,以便易于管理且难以管理不当

  1. 对于无意义的格式,我更喜欢按这样的顺序记下我的规则,这样我就可以轻松验证防火墙状态无论使用的工具多么简单。检查更改应该尽可能简单diff -wu <(iptables-save | egrep -v ^#) <(egrep -v ^# rules.v4)

  2. 当两种类似的方法常见的配置会导致相同的行为,我选择一个表达我真正的意思甚至罕见配置。因此我-A INPUT -i lo -J ACCEPT更喜欢后者-A INPUT -s localhost -J ACCEPT,因为后者带有假设(在合理的设置下,没有其他接口可以接收这样的数据包)

  3. 当两个限制意味着同样的事情时,我会选择两者,或者选择最不能被无意间抬起虽然该规则-A INPUT -j REJECT可以被-R取代,但这种错误不会影响连锁政策,例如-P INPUT REJECT

相关内容