最近忙,所以断更了两个月。眼看2025也要结束了,抓紧时间多写几篇文章。
今天讲讲独立站如何屏蔽访问,至于为啥要屏蔽访问,每个人都有每个人的原因,所以我只讲如何屏蔽。
一、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;        }    }    // 如果从搜索引擎来,设置 cookie    if ($has_valid_referrer) {        setcookie('from_search_engine''1'time() + 86400'/'''falsetrue);        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;   # 允许访问的IP    allow 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设置更灵活。

OK . 今天的文章就写到这里,可能有的地方说得也不对,欢迎指正。
后续的文章可能会写自建服务器的好处,比如自动安装WP插件;如何利用WP的Tag 布局上万个关键词等.... 

欢迎加我交流,vx 6860145 ,不用寒暄,直接开聊。希望交流各种技术而不是白嫖。


点赞(23) 打赏

评论列表 共有 0 条评论

暂无评论

服务号

订阅号

备注【拉群】

商务洽谈

微信联系站长

发表
评论
立即
投稿
返回
顶部