按域过滤防火墙出口

信息安全 防火墙 dns
2021-09-09 13:28:04

在我们的生产环境中,我们通过 API 连接到一些核心外部服务提供商,并且需要阻止所有其他服务 (PCI DSS)。

我们目前有一个防火墙,它支持通过 ip 地址进行出口过滤,因此所有非必要地址都会根据静态创建的防火墙规则(全部拒绝、允许 1.2.3.4:443 等)被阻止

到目前为止一切都很好,现在问题来了,我们的一个服务提供商(一家大银行)正在为它的一项服务迁移到边缘/cdn 托管 API,并且服务的 ip 将每天更改几次.

我读过其他关于出口过滤的文章: 防火墙出口过滤/快速白名单

...以及可能使用脚本根据 DNS 查询修改基于 iptables 的防火墙。 https://stackoverflow.com/questions/14096966/can-iptables-allow-dns-queries-only-for-a-certain-domain-name

...但是这些解决方案似乎很老套

是否有我们可以使用的具有基于域的规则的防火墙,而不是基于 IP 的防火墙,因此我们的 API 请求继续不间断地到达,但我们继续阻止所有其他出站连接?

2个回答

是否有我们可以使用的具有基于域的规则的防火墙,而不是基于 IP 的防火墙,因此我们的 API 请求继续不间断地到达,但我们继续阻止所有其他出站连接?

是的,尽管通常通过代理功能而不是传统的防火墙规则意义。

例如,Check Point URL 过滤软件刀片允许您根据请求访问的 DNS 名称限制传出 HTTP 和 HTTPS 连接 - 例如,只有当存在允许访问 example.com 的规则时,aGET http://example.com/ HTTP/1.0或 aCONNECT example.com HTTP/1.1才会成功。

代理方面是问题空间的结果。反向 DNS 不能以任何方式、形状或形式被信任,因此防火墙不能仅反转客户端想要连接的 IP 并以此为基础做出决定。它必须由客户提供一个名称,并根据该名称做出决定。HTTP 风格的代理可以很好地解决这个问题,因为即使是用于加密连接,客户端也会在建立连接之前将名称交给代理。

这种方法的问题在于,它有效地将安全性建立在针对远程域的 DNS 查询结果之上。反向 DNS永远不能被信任,因为任何人都可以为他们拥有的 IP 输入任何名称。但即使是正向 DNS 也缺乏所需的安全性 - 您可以放心地假设,如果攻击者允许他们从您的数据中心窃取 PCI 数据,那么他们可以设法欺骗或毒害 DNS。

(这并不意味着你不能得到 QSA 的祝福 - 这是一个合理的补偿控制。我只是不希望你认为它是完全安全的!)

一年多前,出于与您相同的原因,我遇到了同样的问题,并得出结论认为,“安全”方法需要的不仅仅是 DNS 来为远程站点提供担保,而且 SSL 证书是一个合理的固定方法上的安全。我最终实现了这样一个代理并将其用于我的目的;mr.spuratic 提供的答案承诺做同样的事情(我还没有接受它的唯一原因是因为我觉得有必要先测试它)。

证书代理白名单的想法是一个非常有趣/简洁的想法,我个人以前从未想过这种情况;我肯定会看一眼,看看它是否适合您的情况。

但是,让我谈谈您自己提到的较旧的、更简单的解决方案:设置脚本以定期进行 DNS 检查,以查看当前可以使用的 IP 地址。具体来说:当几年前在 Unix 和 Linux SE 提出的一个相关问题crontab产生了几个用于 iptables 的示例脚本时,这些脚本将使用规则每五分钟检查一次给定域的 IP(来自 DynamicDNS,特别是case) 然后创建一个规则,允许来自该 IP 的入站流量通过。我看不出你为什么不能采用这样一个预先存在的脚本,将规则类型设置为出站,做任何你喜欢的其他有用的添加或减少,然后就可以了。当然,这不是理想的优雅,但我也不会称这种方法为 hacky 或 gimicky。

不确定直接从我提到的那个 Linux SE 问题中复制和粘贴示例代码是否合适,所以我不会。但是,问题页面上只有两个答案,每个都有一个脚本示例。一点也不难阅读和整理。

最后,我们确实应该解决您可以做些什么来更好地保护您的 DNS 查找本身。从理论上讲,如果您的支付软件仅通过 https 与金融机构通信,则接收服务器通过有效证书向客户端验证为合法。在这种情况下,即使是恶意更改的 DNS 结果(无论是通过本地 MitM DNS 欺骗、对您要连接的解析服务器进行的 DNS 缓存中毒等)都不足以让攻击者侵入安全连接/s您正在发送财务信息。(因为攻击者设置的虚假服务器的证书与域名不匹配。)但是由于我们应该考虑深度防御并假设任何一层都可能出现问题安全性(比如证书颁发机构的私有签名密钥可能被泄露,因此攻击者可以使用任何域名签署他们想要的任何服务器),假设我们想要某种强大的 DNS 查询保护。不幸的是,这意味着(a)实际运行 DNS 服务器 -启用并正确配置DNSSec以防止中毒攻击 - 直接在将进行连接的本地计算机上或(b)使用DNSCrypt与您在本地网络中设置的OpenDNS或受信任的 DNS 服务器(打开 DNSSec)建立加密连接

所以你至少有一两个选择。