就像Linux中的所有东西一样,我相信有很多方法可以通过iptables获得预期的结果。 我想限制以下类别的答案:
请说清楚你正在说什么类别。 声明偏好是可以的 ,但不要暗示它是最好的 。
例如
我更喜欢把
--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理 。
对于无意义的格式化,我宁愿按照这样的顺序记下我的规则,以便无论使用多么简单的工具,我都可以轻松validation防火墙状态 。 检查更改应该与diff -wu <(iptables-save | egrep -v ^#) <(egrep -v ^# rules.v4)
当通用configuration下的两个类似的方法导致相同的行为时,我select了一个即使在非常规configuration下也能expression我真正意义的方法 。 因此,我更喜欢-A INPUT -i lo -J ACCEPT -A INPUT -s localhost -J ACCEPT因为后者带有一个假设 (在一个理智的设置中,没有其他接口可以接收这样的数据包)
当两个限制意味着同样的事情时,我select两个或不能无意中解除的限制 。 虽然规则-A INPUT -j REJECT可以被-R取代,但这样的错误不会影响链式策略,如-P INPUT REJECT