是否为iptables中的所有来源接受RELATED,ESTABLISHED是否被视为“过于开放”?


9

我经常看到该规则-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT适用。虽然我不是专家,但该行涉及到我。很明显,该规则允许所有流量,唯一的例外是必须已建立连接或与已建立的连接相关。

情境

  • 我将允许22从子网中的服务器LAN 192.168.0.0/16或其他任何端口连接到默认的SSH端口。
  • SuperInsecureApp®在port上暴露一些东西1337,我将其添加到INPUT链中。
  • 我添加了从所有来源conntrack接受ESTABLISHED和接受的规则RELATED
  • 连锁政策是 DROP

因此,基本上该配置应该只允许来自LAN的SSH连接,同时允许来自世界的端口1337上的入站流量。

这就是我困惑的地方。请问conntrack以任何方式暴露出安全漏洞,将允许人们得到一个已建立的连接上1337(因为它是世界开放的),然后使用该连接来访问SSH端口(或任何其他港口为此事)?

Answers:


8

我不会认为已建立和相关的流量过于开放。您也许可以省略RELATED,但绝对应该允许ESTABLISHED。这两个流量类别都使用conntrack状态。

已建立的连接已通过另一条规则验证。这使得实现单向规则更加简单。这仅允许您在同一端口上继续事务。

相关连接也将通过另一条规则进行验证。它们不适用于许多协议。同样,它们使配置规则变得更加简单。它们还确保在适用的地方对连接进行正确的排序。这实际上使您的规则更安全。尽管这可能使您可以在其他端口上进行连接,但该端口应仅是相关过程(如FTP数据连接)的一部分。允许哪些端口由协议特定的conntrack模块控制。

通过允许建立和相关的连接,您可以集中精力让防火墙接受哪些新连接。它还避免了旨在允许回程但允许新连接的破坏规则。

鉴于您已将端口1337上的程序分类为不安全程序,应使用专用的非root用户ID启动该程序。如果有人设法破解应用程序并获得增强的访问权限,这将限制他们可能造成的损害。

端口1337上的连接极不可能用于远程访问端口22,但与端口1337的连接可用于代理与端口22的连接。

您可能需要确保SSH的安全性:

  • 除了防火墙限制之外,还可以使用hosts.allow限制访问。
  • 禁止root用户访问,或者至少要求使用密钥,并限制它们在authorized_keys文件中的访问。
  • 审核登录失败。日志扫描器可以向您发送有关异常活动的定期报告。
  • 考虑使用诸如fail2ban之类的工具在重复访问失败时自动阻止访问。

尽管这是一个任意示例,但是我在新服务器上所做的第一件事始终是在sshd中禁用根访问和纯文本身份验证-这是一个很好的技巧。此外,fail2ban实际上已经安装在示例的灵感来源中。不确定已建立的连接已经通过另一条规则进行了验证”,这是我不确定的确切问题,可以完美回答我的问题。感谢您的明确答复!
Dencker

附带问题:从性能的角度来看,如果conntrack规则是在链的开始或结尾,它是否有任何改变?据我了解iptables,如果必须在已建立的连接中将所有规则都放在末尾,而只将一条规则放在开始时,它就必须处理?
Dencker

@Dencker您需要首先建立,相关的规则。它将接受到目前为止最多的流量。除此之外,您可能希望拥有接受最多流量的规则,尽管最好在可读性上进行权衡。我的规则是分组的,对延迟敏感的,高流量(按类型分组)及其他。iptables具有计数器,可让您查看每个规则处理多少流量。我使用Shorewall,它添加了一些有用的默认值,并且具有易于阅读的规则文件来构建防火墙。
BillThor

2

ESTABLISHED和RELATED是“有状态”数据包过滤的功能,其中过滤不仅取决于静态规则集,还取决于考虑数据包的上下文。您需要建立以便允许连接正常工作,并且需要相关的ICMP消息相关。与静态“无状态”规则相比,状态过滤允许更精确地过滤。

让我们先来看一下已建立。例如,考虑端口22上的TCP。发起方(客户端)将发送一个SYNserverIPaddr:22。服务器返回SYN+ACK到客户端。现在轮到客户发送了ACK。服务器上的过滤规则应如何显示,以便仅ACK接受“匹配” ?一般的无状态规则看起来像

-A INPUT --proto tcp --port 22 -j ACCEPT

比有状态规则更宽松。无状态规则允许任意的TCP段,例如ACKFIN不具有第一建立连接。端口扫描程序可以利用这种行为进行OS指纹识别。

现在让我们看一下“相关”。这用于ICMP消息,主要是错误消息。例如,如果丢弃了从服务器到客户端的数据包,则会向服务器发送错误消息。此错误消息与先前建立的连接“相关”。如果没有相关规则,要么要么需要允许一般情况下的传入错误消息(没有上下文),要么就象许多站点所习惯的那样,完全放弃ICMP并等待传输层的超时。(请注意,这对于IPv6而言是个坏主意; ICMPv6对于IPv6的作用比对IP旧版的ICMP更为重要。)

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.