iptables -i lo与-s localhost和-j REJECT与-P INPUT REJECT

前言

就像Linux中的所有东西一样,我相信有很多方法可以通过iptables获得预期的结果。 我想限制以下类别的答案:

  1. 选项有什么区别?
  2. 哪个选项最好(或者他们是一样的)?
  3. 你为什么比另一个更喜欢?

请说清楚你正在说什么类别。 声明偏好是可以的 ,但不要暗示它是最好的

例如

我更喜欢把--jump作为第一个参数,因为我认为它首先具有意图并且我喜欢像多个命令的参数那样垂直alignment。

其中一个比另一个好吗?

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

其中一个比另一个好吗?

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

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

第一:

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

它们中的第一个接受所有本地stream量,在lo接口上,不pipe它的IP地址如何。 第二个接受来自127.0.0.1的所有stream量,不pipe它到达什么接口。

在这种情况下,第一个显然更好。 在第一种情况下,本地stream量不一定使用127.0.0.1作为它的IP地址,但是您可能想要接受它(最为人所知的是Debian奇怪的127.0.1.1,但是可以附加全局IP地址到第二种情况),在第二种情况下,有人可能会以127.0.0.1作为源地址向您发送欺骗性数据包,而您可能不想接受该数据包。

第二:

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

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

当某人在INPUT链的末尾添加更多规则时,这些规则将不起作用。 这里的档案有很多人被这个混淆的例子。 所以你可能想要使用第二种forms。

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

关于首选项,我安装了iptables,这样很容易pipe理和难以pipe理

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

  2. 通用configuration下的两个类似的方法导致相同的行为时,我select了一个即使在非常规configuration下也能expression我真正意义的方法 。 因此,我更喜欢-A INPUT -i lo -J ACCEPT -A INPUT -s localhost -J ACCEPT因为后者带有一个假设 (在一个理智的设置中,没有其他接口可以接收这样的数据包)

  3. 当两个限制意味着同样的事情时,我select两个或不能无意中解除的限制 。 虽然规则-A INPUT -j REJECT可以被-R取代,但这样的错误不会影响链式策略,如-P INPUT REJECT