如何仅允许访问指定域名(该域名使用Cloudflare CDN)并阻止其他所有域名?
如何仅允许访问指定域名(该域名使用Cloudflare CDN)并阻止其他所有域名?
嘿,这个问题我之前帮朋友处理过!因为目标域名挂了Cloudflare CDN,它的后端IP会频繁变动,而且很多其他网站也在用Cloudflare的IP段,靠拦IP根本行不通,得从域名层面做访问控制才行。下面给你几个实用的方案,看哪种适配你的服务器环境:
方案一:用代理服务器(比如Squid)做精准域名过滤
这是最直接靠谱的方式,Squid这类代理可以直接基于域名配置规则,精准放行目标域名,拒绝所有其他请求。
- 先安装Squid(根据系统用
apt install squid或yum install squid) - 打开配置文件(一般是
/etc/squid/squid.conf),添加以下规则:
# 定义允许访问的域名(.domain.com会匹配所有子域名,比如sub.domain.com) acl allowed_domain dstdomain .domain.com # 允许该域名的访问请求 http_access allow allowed_domain # 拒绝所有其他请求 http_access deny all
- 重启Squid服务生效:
systemctl restart squid - 最后把用户浏览器的代理设置指向你的服务器IP和Squid默认端口(3128),这样用户就只能访问domain.com及其子域名了。
方案二:用本地DNS强制解析控制
如果你的服务器是用户的网关或DNS服务器,可以通过DNS过滤来限制——只允许解析指定域名,其他域名直接返回无效IP。
比如用dnsmasq配置:
- 安装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
- 重启dnsmasq:
systemctl restart dnsmasq - 强制用户使用你的服务器作为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




