假设我们不希望我们的服务器(服务器上运行的任何程序)与 example.com(任何可以解析此 DNS 名称的 IP 地址)以及 *.example.com 等任何内容通信。来自这些域的入站请求和服务器上运行的程序试图访问禁止域的出站请求都将被阻止。如何正确设置?
答案1
首先——重新想一想,它会给你带来更多的问题而不是成功。
您无法在防火墙中使用 DNS,也无法使用 DNS 检查“此 IP 是否属于域?”原因有很多,最大的原因是不一致的递归 DNS。您只能为 IP 设置一个 PTR 记录,并且此记录由 IP 所有者管理。并不是很多域真正拥有其 IP - 他们只是使用一些服务提供商,如共享主机、云提供商等 - 因此,如果您尝试将 IP 解析为域,您将获得这些提供商,而不是域。
例如,serverfault.com 的 IP 为 104.16.46.232。但是当您尝试检测此 IP 是否属于 serverfault.com 时,您将会失败,因为此 IP 属于 CloudFlare.net,而 CloudFlare.net 和 serverfault.com 之间没有任何联系。
如果您“不想要”的域名有自己的 IP 子网,您可以使用whois
工具检测其分配的子网并阻止该子网。如果是上述情况,您可以阻止整个 CloudFlare,但您将阻止所有使用 CloudFlare 的人,这不是您想要的。
下一步是破解 DNS 并窃取该域的区域文件(使用 AXFR 并尝试初始化区域传输 - 请参阅SuperUser 上的这个问题)。一些 DNS 服务器会将整个区域文件发送给任何请求的人,但大多数 DNS 服务器只会将其发送给允许的服务器。如果您获取该文件,则可以解析它并检测使用的 IP。但同样,如果这是某些 CDN 或共享主机,您将阻止该服务器上的任何东西。
答案2
防火墙、DNS 或代理。
您可以配置您的外围防火墙,并将来自和发往域的关联 IP 的所有传入/传出流量列入黑名单/阻止。当然,您也可以在每个服务器级防火墙中执行此操作。您没有说明您的网络中有哪种防火墙。某些防火墙发行版有不同的选项来实现类似的功能。但您可以在 Linux 机器中使用 iptables 来实现这一点。例如,pfSense 提供了在
alias
防火墙规则中创建和使用它的功能。请参见此处:封锁网站。另一种可能性是通过查询域的 DNS 来创建 IP 列表,将其保存到文件中并将其提供给 iptables/firwall 进行阻止。可以使用自定义脚本来查询和生成 IP 列表并使其保持最新。
本地 DNS 服务器也可用于实现此目的。您可以配置 DNS 转发器或 DNS 代理,并将域指向虚假 IP 或防火墙 IP(一种 DNS 欺骗)。例如,使用类似软件,
dnsmasq
可以非常轻松地将域指向您想要的 IP。仅当您网络的所有 DNS 查询都转发到此 DNS 服务器并且不允许直接发送到互联网时,此方法才有效。 使用 dnsmasq 阻止服务器另一种方法是使用代理服务器或内容过滤器来阻止对特定域的访问,这也很容易。问题是,它仅适用于 http 或 https 协议。
答案3
请记住,创建可以解析为每个可能的 IP 地址的“子域”(即 1.0.0.1.example.com、192.168.1.1.example.com、254.254.254.254.example.com 等)是一项非常容易的任务,因此如果没有某种有限的主机名列表,就不可能完全阻止传入连接。
另一方面,阻止传出可能非常简单 - 只需添加
127.0.0.1 example.com
到您的主机文件(即/etc/hosts
)或通配符 DNS 记录(*.example.com A 127.0.0.1
)到您的本地 DNS 服务器,这将足以阻止传出连接(前提是它们使用域名进行连接)
PS 可以阻止与某些身体的不过,通过使用 GeoIP 数据库之类的东西来阻止来自特定作为