You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何仅允许访问指定域名(该域名使用Cloudflare CDN)并阻止其他所有域名?

如何仅允许访问指定域名(该域名使用Cloudflare CDN)并阻止其他所有域名?

嘿,这个问题我之前帮朋友处理过!因为目标域名挂了Cloudflare CDN,它的后端IP会频繁变动,而且很多其他网站也在用Cloudflare的IP段,靠拦IP根本行不通,得从域名层面做访问控制才行。下面给你几个实用的方案,看哪种适配你的服务器环境:

方案一:用代理服务器(比如Squid)做精准域名过滤

这是最直接靠谱的方式,Squid这类代理可以直接基于域名配置规则,精准放行目标域名,拒绝所有其他请求。

  1. 先安装Squid(根据系统用apt install squidyum install squid
  2. 打开配置文件(一般是/etc/squid/squid.conf),添加以下规则:
# 定义允许访问的域名(.domain.com会匹配所有子域名,比如sub.domain.com)
acl allowed_domain dstdomain .domain.com
# 允许该域名的访问请求
http_access allow allowed_domain
# 拒绝所有其他请求
http_access deny all
  1. 重启Squid服务生效:systemctl restart squid
  2. 最后把用户浏览器的代理设置指向你的服务器IP和Squid默认端口(3128),这样用户就只能访问domain.com及其子域名了。

方案二:用本地DNS强制解析控制

如果你的服务器是用户的网关或DNS服务器,可以通过DNS过滤来限制——只允许解析指定域名,其他域名直接返回无效IP。

比如用dnsmasq配置:

  1. 安装dnsmasq后,编辑配置文件/etc/dnsmasq.conf
# 允许正常解析domain.com,用公共DNS比如8.8.8.8
server=/domain.com/8.8.8.8
# 所有其他域名解析到0.0.0.0(无法访问的无效地址)
address=/#/0.0.0.0
  1. 重启dnsmasq:systemctl restart dnsmasq
  2. 强制用户使用你的服务器作为DNS(比如通过DHCP分配,或在路由里锁定DNS),这样用户访问其他域名会直接解析失败,只有domain.com能正常访问。

方案三:用Nginx反向代理做访问拦截

如果你的服务器用Nginx,可以把它做成透明代理,只转发指定域名的请求,其他请求直接返回403禁止访问。

配置示例(编辑Nginx配置文件):

server {
    listen 80;
    listen 443 ssl;
    server_name _;

    # 处理HTTP请求
    location / {
        # 检查请求的Host是否为目标域名
        if ($host != 'domain.com') {
            return 403;
        }
        # 转发请求到目标域名
        proxy_pass https://domain.com$request_uri;
        proxy_set_header Host $host;
    }

    # SSL证书配置(处理HTTPS请求需要配置证书,或依赖SNI转发)
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;
}

配置完成后重启Nginx,再把用户流量导向这台Nginx服务器(比如作为网关),就能实现访问限制了。

小提醒

  • 如果用户能自行修改代理或DNS,可能绕开限制,最好结合网络层面的规则(比如防火墙强制流量走你的代理/DNS)。
  • 优先推荐Squid代理方案,配置简单规则清晰,适配大多数场景。

备注:内容来源于stack exchange,提问作者Afshin

火山引擎 最新活动