有没有办法创建一个域记录,作为入站 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