您能否创建可用作入站 IP 允许列表的域记录?

您能否创建可用作入站 IP 允许列表的域记录?

有没有办法创建一个域记录,作为入站 IP 允许列表,供防火墙使用?本质上是创建一个 HTTPS 入口代理。

例子:

完整限定域名 (FQDN) IP 范围
allowlist.bob.com 103.102.101.100/19

我之所以问这个问题,是因为我们正在更新客户在其允许列表中使用的公共 IP。我认为如果他们只需将域添加到允许列表中,然后我们就可以自己为他们切换 IP,这样会容易得多。就像您可能要切换客户访问的后端服务器一样;您只需在他们使用的 A 记录中切换 IP 即可。

尽管您可以添加多个同名的 A 记录,但循环特性意味着每次查询 FQDN 时只允许一个 IP。它与入站源 IP 不相关。

通过某些防火墙的出站连接能够对域进行过滤,但我对入站连接的相同过滤了解不多。

我以为类似这个问题已经存在,但我似乎找不到它。

答案1

这种事情没有标准——基本上,你需要定义自己的协议。

一种常见的方法是使用相当通用的 TXT/16 记录和众所周知的资源名称,例如_allowlist.domain.tld TXT "192.0.2.0/24;198.51.100.0/24"

另一种方法是重新利用以前未使用的适合您目的的记录类型,例如包含 CIDR 前缀列表的 APL/42(实验性的,可能支持不佳)。

记录类型列表可能会有帮助。

答案2

是的,您可以在 DNS 记录中发布 IP 地址范围和子网,但据我所知,没有专用的、已建立的 DNS 资源记录类型来表示 IP 地址范围。

因此人们通常采用 TXT 记录来实现这一点。

一个常见的例子是防晒指数使用 TXT 记录发布域所有者希望用于发送电子邮件的 IP 和子网。
一个很好的例子是_spf.google.com引用的记录_netblocks.google.com和几个额外的 TXT 记录。

_spf.google.com.        300 IN  TXT "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"

_netblocks.google.com.  300 IN  TXT "v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"

_netblocks2.google.com. 300 IN  TXT "v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all"

防晒指数是所有邮件服务器(支持 SPF)都理解并实施相同的解析规则,以适应域所有者在 DNS 中为其域发布的策略,而防火墙访问规则的此类标准尚不存在。

您建议将多个 A 和/或 AAAA 记录作为循环记录放入其中,这也是有道理的(尽管如果您需要在其组成 IP 地址中写出整个子网,这会变得稍微麻烦一些)

这两种方法的问题在于,防火墙没有内置支持来正确加载您在 DNS 中发布的 IP,并且当它们加载时,当您更改 DNS 记录时,它们可能无法正确更新其策略。

许多防火墙已经接受 FQDN,但只会在加载规则时查找一次关联的 IP 和/或 IP 地址。(例如,当 FQDN 是循环记录时,Linux iptables 将正确加载所有 IP。)然后,防火墙将在内部继续使用发现的 IP 地址。在防火墙设备重新启动或规则库重新加载之前,防火墙不会进行新的查找。大多数当前防火墙不遵守 DNS 记录上的 TTL,并且当 FQDN 更新时,防火墙不会在可预测的时间间隔内更新它们使用的 IP

执行 DNS 查找相对较慢,并且防火墙无法在每次需要根据活动防火墙规则检查数据包/连接时执行 DNS 查找。请记住:该连接,该 IP 数据包仅包含数字 IP 数据即源和目标 IP 地址和端口号。因此 FQDN 作为 IP 地址存储在活动规则集中。


我之前用过移动设备,刚刚用以下方法测试了 Linux 防火墙iptables

  • 完全支持使用 FQDN 添加规则。

  • FQDN 被解析为 IP 地址iptables,解析后的 IP 将在有效规则库中使用。

  • 当 FQDN 是循环 DNS 记录时,iptables将添加多条规则,每条规则对应该循环 DNS 记录中的每个 IP。
    (到目前为止一切顺利,对吧)

  • 保存防火墙规则集iptables-save不会将解析的 IP 地址恢复为 FQDN。

    这意味着重新启动后,我的服务器将不会选择 FQDN 中所做的任何更改。如果gateway.example.com最初指向 192.0.2.1 和 192.0.2.2,例如更改为 192.0.2.1 和 192.0.2.5,我的服务器将仅恢复 IP 为 192.0.2.1 和 192.0.2.2 的规则。192.0.2.5 中的新循环记录gateway.example.com不会被添加,192.0.2.2 不会被删除。


创建测试记录

round-robin.example.com. 349    IN  A   192.0.2.2
round-robin.example.com. 349    IN  A   192.0.2.1
round-robin.example.com. 349    IN  A   192.0.2.4

其次是iptables -A INPUT -p tcp --dport 22 --source round-robin.example.com -j ACCEPT

iptables -L INPUT

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             
 ...
ACCEPT     tcp  --  192.0.2.4            anywhere             tcp dpt:ssh
ACCEPT     tcp  --  192.0.2.2            anywhere             tcp dpt:ssh
ACCEPT     tcp  --  192.0.2.1            anywhere             tcp dpt:ssh


iptables-save |grep 22

-A INPUT -s 192.0.2.4/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.0.2.2/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.0.2.1/32 -p tcp -m tcp --dport 22 -j ACCEPT

相关内容