在设置 iptables 时,您会做什么:更改默认策略(iptables -P INPUT DROP
例如),还是在规则集末尾添加一条捕获所有规则(iptables -A INPUT DROP
)?如果您确实特别喜欢其中一种,那么这种偏好背后的原因是什么?
对于这个论坛来说,这个问题可能太主观了,但也许有一些我不知道的很好的理由来选择其中一个。
反对政策的方式,我认为可能更容易因为过于乐观而将自己锁定在服务器之外iptables -F
。而支持政策的方式,我认为可能更容易在不注意的情况下删除包罗万象的规则,从而有效地让服务器处于完全开放状态(我过去也遇到过这种情况)。
确实,您不应该依赖防火墙作为您唯一的互联网保护(例如,大多数情况下,您可以使内部网络服务仅绑定到本地主机或内部网络),但有时被迫将半公共服务暴露给特定的源网络等。
就我个人而言,如果从头开始编写规则集,我倾向于选择第一种,但如果更新现有规则集,则坚持现有的规则。
答案1
我同时使用了这两种策略,以及最终的删除规则,因为我就是这么硬核。
我在脚本中定义了规则,然后调用并更新。除了偶尔列出规则/统计数据外,我从不直接调用 iptables。我从未真正看到过一个比另一个更好的原因。
答案2
就权衡而言,我宁愿让一台机器在一段时间内意外地没有防火墙(如果您刷新规则并忘记或类似情况,则存在 -P ALLOW 的风险),也不愿让一台机器意外地脱离网络(如果策略是 DROP,则这是刷新的结果)。我的理由是,防火墙不是保护我的服务器的唯一方法,因此防火墙故障是一种错误,而不是灾难。服务对用户不可用的最常见原因是一场灾难。
答案3
以下两个原因说明为何制定一条包罗万象的规则可能会更好:
- 默认策略的选项有限。如果您不想让数据包通过,您只有一个选择:DROP(数据包落地)。在 catch-all 规则中,您可以使用 REJECT,它可以发送 ICMP 响应。
- 如果您有任何脚本可以解析 iptables -L 的输出,那么 catch-all 规则将以与所有其他规则相同的格式出现,从而使解析更容易。
答案4
我刚刚注意到:DROP 策略允许您事后将规则附加到规则集。这很方便,因为它允许您轻松保持规则集的有序性,并且在您即时构建规则集(事后使用或类似方法iptables -A
保存)时特别有用。iptables-save