如何限制IP访问网站

资源共享 · 05-11 09:43

分享一个如何通过简单的设置和配置,限制特定IP地址访问您的网站的方法。通过这些方法,您可以有效地控制谁可以访问您的网站,从而保护您的在线资源免受不必要的干扰。无论是为了安全还是其他原因,限制IP访问是一种有用的技能。

相关文章推荐:如何限制IP请求数和连接数

1.禁止IP访问网站

1.1.屏蔽国外IP

方法1:代码屏蔽

如果你想要禁止某一个国家的IP访问你的网站,可以参考以下代码(位置参考:Header.php文件中):

<?php
/**
 *
 * test.php(屏蔽国外IP)
 *
 */
$verification = '美国';//需要屏蔽国家的IP
function get_client_ip() { 
               $ip = $_SERVER['REMOTE_ADDR'];     
         if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {            
         $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];       
         }          
         elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {             
         $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];       
         }          
         elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {           
         $ip = $_SERVER['HTTP_CLIENT_IP'];       
         }          
         return $ip;    
         }
$ip = get_client_ip();//获取访客IP
$antecedents = $_SERVER['HTTP_REFERER'];//访客来路地址
$result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP数据库来自淘宝。
$address = json_decode($result,true);
//判断访客是否属于美国,是否来自百度,是否来自谷歌
if($address['data']['country'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){
        sleep(10);//设置一个10秒等待。
        header('HTTP/1.1 503 Service Temporarily Unavailable');
        header('Status: 503 Service Temporarily Unavailable');
        header('Retry-After: 3600000');
        exit;
}
?>

方法2:域名解析

利用域名解析禁止国外ip访问网站(这里以阿里云 DNS 解析为例):

先设置一个 A 记录类型,然后解析线路为"境外",最后把记录值设为:127.0.0.1

IMG_5634.png

效果:
IMG_5635.png

方法3:脚本屏蔽

该脚本适用于 CentOS、Debian、Ubuntu 等常用系统。用 shh 连接服务器运行以下命令:

wget https://blog.isww.cn/file/shell/block-ips.sh
chmod +x block-ips.sh
./block-ips.sh

封禁 ip 时会要求你输入国家代码,代码查看:点击进入。记住所填参数均为小写字母。比如 JAPAN (JP),我们就输入 jp 这个参数。

封禁IP:
IMG_5636.png

查看封禁列表:
IMG_5637.png

解封IP:
IMG_5638.png

1.2.屏蔽地方IP

如果你想要禁止某一个省份的IP访问你的网站,可以参考以下代码(参考位置同上):

<?php
/**
 *
 * test.php(屏蔽地方IP)
 *
 */
$verification = '江西省';//需要屏蔽省份的IP
function get_client_ip() { 
               $ip = $_SERVER['REMOTE_ADDR'];     
         if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {            
         $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];       
         }          
         elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {             
         $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];       
         }          
         elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {           
         $ip = $_SERVER['HTTP_CLIENT_IP'];       
         }          
         return $ip;    
         }
$ip = get_client_ip();//获取访客IP
$antecedents = $_SERVER['HTTP_REFERER'];//访客来路地址
$result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP数据库来自淘宝。
$address = json_decode($result,true);
//判断访客是否属于江西省,是否来自百度,是否来自谷歌
if($address['data']['region'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){
  sleep(99999999);//设置一个999999秒的等待。
  Header("HTTP/1.1 204 No Content");
  exit;
}
?>

注意:如果你想精确到市一级IP,只需要替换成city即可

2.IP访问提示

2.1.弹出提示

当特定省份和城市的IP访问你的网站时,可以使用以下代码弹出提示:

<script type="text/javascript" src="https://ip.ws.126.net/ipquery"></script>
<script>
var province=localAddress.province;//获取所在省,比如广东省
var city=localAddress.city;//获取所在市,比如广州市
//判断省
if(province.indexOf('广东')  != -1){
    alert(province);    
    }else{
        }
//判断市
if(city.indexOf('广州')  != -1){
    alert(city);    
    }else{
        }
</script>

2.2.指定跳转位置

当特定省份和城市的IP访问你的网站时,可以使用以下代码跳转到某一个网址:

<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
<script>
$.getScript('https://ip.ws.126.net/ipquery', function(){  
     console.log(localAddress.city)
    if(localAddress.city.indexOf('北京') != -1||localAddress.city.indexOf('杭州') != -1||localAddress.city.indexOf('上海') != -1||localAddress.city.indexOf('广州') != -1||localAddress.city.indexOf('深圳') != -1||localAddress.city.indexOf('东莞') != -1||localAddress.city.indexOf('房山') != -1){        
       window.location.href = 'https://www.baidu.com';      
    }else{        
     return;      
    }
    console.log(localAddress.province)    
    if(localAddress.province.indexOf('福建') != -1){        
       window.location.href = 'https://www.baidu.com';      
    }else{        
     return;      
    }    
});
</script>

此方法来自挖站否

3.使用须知

在使用以上方法时,如果代码中提供的ip库失效,请自行百度其他ip库并替换即可。

命令 优化 Bash WordPress IP

上一篇 : 复制提醒和右键菜单提醒

下一篇 : JS图片预览


  1. 肖寒武   Lv1
    05-11 15:35 第5楼 中国浙江省杭州市联通Windows 10 · Google Chrome

    直接VPS脚本的话,会不会误判CDN的ip呢

    1. 刘郎   博主
      05-11 15:39 第6楼 中国移动iPhone · Safari
      @肖寒武

      如果你使用的是简单的IP地址检测脚本,它可能会将CDN提供商的IP地址识别为终端用户的IP地址,从而造成误判

      1. 刘郎   博主
        05-11 15:40 第7楼 中国移动iPhone · Safari
        @刘郎

        具体情况得具体分析

  2. 和和   访客
    05-11 11:27 第3楼 中国陕西省西安市移动Windows 10 · Google Chrome

    我最近就需要这个,老是有国外的给我留言,一看就是机器人写的。

    1. 刘郎   博主
      05-11 11:32 第4楼 中国移动iPhone · Safari
      @和和

      只能作为参考而已,不一定100%准确,懂点技术可以自己优化。或者直接找专业的三方,一步到位

  3. obaby   Lv2
    05-11 11:13 第1个脚印 中国山东省青岛市联通iPhone · Google Chrome

    自己写防御还是有点累啊

    1. 刘郎   博主
      05-11 11:22 第2楼 中国移动iPhone · Safari
      @obaby

      能用可靠的第三方还是得用的,毕竟人家是专业的

| 黔ICP备2024020400号 | 萌ICP备20246777号 | | 当前有 1 人在线 |
本站已加入BLOGS·CN
订阅
Sitemap
博友圈 星球穿梭
开往-友链接力