iptables -i lo vs. -s localhost 和 -j REJECT vs. -P INPUT REJECT

Bru*_*sky 3 security iptables

前言

就像 Linux 中的所有内容一样,我确信有很多方法可以使用iptables. 我想将答案限制为以下类别:

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

并且请清楚您所谈论的类别。陈述偏好是可以的,但不要暗示它是最好的

例如

我更喜欢把它--jump作为第一个参数,因为我认为首先有意图读起来更好,而且我喜欢像多个命令的参数一样垂直对齐。

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

iptables -I INPUT --jump ACCEPT --in-interface lo
iptables -I INPUT --jump ACCEPT --source localhost
Run Code Online (Sandbox Code Playgroud)

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

iptables -A INPUT --jump REJECT
iptables -P INPUT REJECT
Run Code Online (Sandbox Code Playgroud)

Mic*_*ton 8

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

第一的:

iptables -I INPUT --jump ACCEPT --in-interface lo
iptables -I INPUT --jump ACCEPT --source localhost
Run Code Online (Sandbox Code Playgroud)

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

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

第二:

iptables -A INPUT --jump REJECT
iptables -P INPUT REJECT
Run Code Online (Sandbox Code Playgroud)

这些通常在功能上是相同的,除了:

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

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