如何拒绝我们的服务器和特定的域及其子域之间的所有通信?

假设我们不希望我们的服务器(运行在其上的任何程序)与example.com(该DNS名称可能发生parsing的任何IP地址)以及类似* .example.com等任何内容进行交谈。两个入站请求来自这些域名和我们的服务器上运行的程序尝试访问禁止域名的出站请求将被阻止。 什么是正确的方式来设置?

首先 – 重新思考,它会带给你更多成功的问题。

您不能在防火墙中使用DNS, 你不能使用DNS来检查“这个IP是否属于域名?” 从很多原因来看,最大的是不一致的recursionDNS。 您只能拥有一个IPlogging,这个logging由IP所有者pipe理。 没有那么多的域名是他们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服务器会将整个区域文件发送给任何需要请求的人,但是其中大部分将只发送给允许的服务器。 如果您将获得该文件,则可以parsing该文件并检测使用的IP。 但是,再次 – 如果这是一些CDN或共享主机,您将阻止该服务器上的任何东西。

防火墙或DNS或代理。

  • 您可以configuration外围防火墙和黑名单/阻止所有来往于域的关联ips的传入/传出通信。 当然,你也可以在每个服务器级别的防火墙中做到这一点。 你没有说你的networking中有什么样的防火墙。 一些防火墙分配有不同的select来实现类似的东西。 但是你可以通过iptables在linux系统中实现。 例如,pfSense提供了创buildalias并在防火墙规则中使用它的function。 看到这里: 阻止网站。

  • 另一种可能是通过查询域名的dns来创build一个ips列表,将其保存到一个文件并将其提供给iptables / firwall来阻止。 自定义脚本可以用来查询和生成IP列表并保持最新状态。

  • 本地DNS服务器也可以用来实现这一点。 您可以configuration一个DNS转发器或DNS代理,并将该域指向伪IP或防火墙IP,(种类DNS欺骗)。 例如,使用像dnsmasq这样的软件,将域名指向您想要的IP非常容易。 这是唯一有效的,如果你的networking的所有DNS查询被转发到这个DNS服务器,不允许直接发送到互联网。 用dnsmasq阻止服务器

  • 另一种可能是使用代理服务器或内容filter来阻止访问某个域,这也很容易。 事情是,它只适用于http或https协议。

请记住,创build将parsing为每个可能的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 )或通配符DNSlogging( *.example.com A 127.0.0.1 )到您的本地DNS服务器,这将足以阻止传出连接(只要他们使用域名连接)

PS虽然可以阻止连接到特定的物理服务器,但通过使用类似GeoIP数据库的东西来阻止来自某个AS的所有IP