分享一个如何通过简单的设置和配置,限制特定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库并替换即可。