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


3

前言

就像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

Answers:


8

在这两种情况下,您正在比较的两个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有关拒绝原因列表,请参见手册页)。


很好的解释。我很高兴我决定问这个。对于第一个问题,我认为情况就是如此(尽管我没有考虑过欺骗)。对于第二个问题,我已经阅读了数十篇参考文献,但从未理解过。
布鲁诺·布罗诺斯基

iptables在防火墙之间可能是唯一的,因为它按规则出现的顺序评估规则。如果您习惯了这一点,那就没问题了。但是,对于习惯于几乎所有其他防火墙的任何人来说,这都是一个惊喜。
迈克尔·汉普顿

1

关于首选项,我将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. 当2个限制表示同一件事时,我选择了这两个限制,或者选择了一个不能无意解除的限制。虽然-A INPUT -j REJECT可以-R制定规则,但这种错误不会影响连锁政策,例如-P INPUT REJECT


区别2个流程替换技巧非常棒。我很少考虑使用文件描述符vs重定向流可以做什么。
布鲁诺·布鲁诺斯基
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.