独立站怎么屏蔽访问?

今天讲讲独立站如何屏蔽访问,至于为啥要屏蔽访问,每个人都有每个人的原因,所以我只讲如何屏蔽。
一、CDN端限制
CDN 有很多家服务商,大多数都是提供图片等静态文件的加速。当然也可以用来隐藏服务器的IP。但今天我讲利用CDN的WAF(网页防火墙)来屏蔽访问,而屏蔽功能做得最好的,我觉得是Cloudflare,下文简称CF 。
1、登录CF 。把你的域名加入CF,一路提交后CF 会给你两个NS服务器名称。然后在你注册域名的服务商那里修改,把名称服务器(NS)设置为CF 给你的。

2、当你修改了域名注册商的名称服务器后,在CF 点检查,当名称服务器更新后,就会出现 CF 正在保护你的站点。

3、这个时候可以用CF 的DNS 解析了。A记录一般解析名称是@,后面则填入服务器ip,把云朵那个图标点一下,这样就可以隐藏服务器ip了。别人Ping你的域名,看不到的ip就不是你的服务器ip。
当然除了CDN可以隐藏ip,还可以用反向代理,特别是某些域名被CF拒绝了。这里不详细讲方向代理。如果有兴趣,我以后单独开一篇,如何使用反向代理。
我一般还喜欢加一个 www 的名称,这个因人而异,看你自己。
4、这样就使用CF的DNS系统了。 再讲讲如何屏蔽访问。我们打开左边菜单的安全--安全规则。英文版应该是叫WAF 。 版本不一样,界面可能有差异,但是选择WAF 就对了。

5、点创建规则,创建自定义规则。

名称写一个你能看懂的,比如 限制**** 。
第一个ASN ,ASN 简单说就是一个网络编号,对应的是一个大型网络,比如AS32934, 就是Facebook的。 怎么查ASN 呢。用 ipinfo.io/查询的ip ,就能看到这个ip所属的网络和ASN,公司等信息。
我在这里就屏蔽了来自于这些AS的访问。这些访问大多数来自于这些公司网络的爬虫进行的恶意访问。有的AS 是属于某个网络服务商的。比如Hetzner , alicloud 等等.....
国家和地区,这个就很简单,你想限制或者允许哪个国家,就填写哪个国家。
引用方,英文就是Reffer ,用于判断来路,可以限制来自于某个网站的访问。
用户代理,User-Agent, 对于访问者的UA ,可以通过服务器网站的访问日志里去查询。如果你发现有异常的访问,最好是先看日志文件,然后再来限制。
可以限制的类型很多,每个类型都有它对应的意义和方法。 可能我没提到,你可以自己摸索下。
6、速率限制规则
有的时候我们被恶意流量访问,但是恶意流量又找不到规则,那这个时候我们可以设置通过一些具体的URL 限制速度。
比如Url 路径设置包含 product- 的,这样我们就可以对产品页面 /product/ 和 产品分类页/product-category , 产品标签页/product-tag 等等页面的访问进行速度限制。 这也是一种反爬虫的方式,效果非常好。
7、限制IP段访问

可以设置允许或者阻止的IP段,建议设置IP段,而不是某个ip 。
8、CF 的WAF 功能特别强,不仅可以通过某个维度去设置,在自定义规则里,还可以使用AND和OR 的逻辑去进行全面的设置。比如前面我限制ASN的时候就用了多个OR ,只要属于其中一个,就进行限制。
二、网页端屏蔽
因为一些特别的原因,有的站可能没用CF ,这种情况我们也可以在网页端进行屏蔽。
1、网页端的屏蔽,主要是针对浏览器。比如浏览器语言,浏览器版本,浏览访问的来路,浏览器Cookies 等等..... 当然我在这里说的网页端,说的是WP ,Opencart这种搭在自己可控制的服务器上的站,而不是Shopify 那种Saas站。可以这样理解,要想网页端进行控制,必须有修改网页Web程序的权限。
2、因为可以限制的方法太多,在文章里我就举例如何通过判断访问来路Reffer进行限制,讲讲这段小程序的逻辑。
以下这段代码是写在WP 里面, 作用就是对网站的部分页面进行限制。
1、允许爬虫访问网站
2、如果是从程序列表里的搜索引擎点击访问网站,允许访问,并写入Cookies,时效24小时。
3、如果有Cookies ,允许访问
4、如果不满足以上的条件,禁止访问,比如直接打开网址,直接打开商品页面,直接打开商品目录则不允许访问。
add_action('init', function() {$uri = $_SERVER['REQUEST_URI'];// 只针对以下路径进行检查$is_target_page = ($uri === '/' ||strpos($uri, '/product/') !== false ||strpos($uri, '/product-category/') !== false ||strpos($uri, '/product-tag/') !== false);if (!$is_target_page) {return;}// 允许的搜索引擎来源$allowed_referrers = ['google.', 'bing.', 'yahoo.', 'duckduckgo.', 'yandex.', 'brave.'];// 允许的爬虫 UA 关键词$allowed_bots = ['google', // 放宽匹配 googlebot / google-inspectiontool / google-speakr 等'bing','yahoo','duckduck','yandex','aol','brave'];$user_agent = strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');$referer = strtolower($_SERVER['HTTP_REFERER'] ?? '');// 放行爬虫foreach ($allowed_bots as $bot) {if (strpos($user_agent, $bot) !== false) {return;}}//判断是否搜索引擎来源$has_valid_referrer = false;foreach ($allowed_referrers as $domain) {if (strpos($referer, $domain) !== false) {$has_valid_referrer = true;break;}}// 如果从搜索引擎来,设置 cookieif ($has_valid_referrer) {setcookie('from_search_engine', '1', time() + 86400, '/', '', false, true);return;}// 如果已有 cookie,放行if (isset($_COOKIE['from_search_engine']) && $_COOKIE['from_search_engine'] === '1') {return;}// 否则拒绝访问status_header(500);exit;});
3、网页程序限制的方法还有很多,也可以组合使用。比如浏览器的语言,浏览器的Cookies ....都是非常好用的。
三、Web服务器程序限制访问
在这里的Web服务器程序主要是讲Nginx和Apache,以Nginx为例。
1、限制ip访问
location / {allow 192.168.1.100; # 允许访问的IPallow 203.0.113.45;deny all; # 其他禁止} 2、限制国家和地区,使用 GeoIP2 模块和GeoLite2-Country 数据库
geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {$geoip2_data_country_code country iso_code;}map $geoip2_data_country_code $allowed_country {default no;US yes; # 只允许美国访问CA yes; # 允许加拿大访问}server {if ($allowed_country = no) {return 403;}}3、限制访问频率
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {location / {limit_req zone=one burst=5 nodelay;}} 4、限制访问来路 Reffer
location / {valid_referers none blocked yoursite.com *.yoursite.com;if ($invalid_referer) {return 403;}}Nginx也是非常强大,可以设置的也很多。但值得注意的是,Nginx的设置也只适合于你自己的服务器。 以上三种屏蔽访问,我更喜欢CF和Web程序上的设置,因为CF是最前端,功能也很强大。Web程序PHP虽然属于后端,但编码比Nginx设置更灵活。
本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。



