一些站长可能会经常遇到的问题是自己的网站会被一些境外IP无端的扫描或是攻击测试等,那么,要如何防范这种问题呢?!
如果只是把网站受到这些信息收集起来并制作成黑名单的话,效率很会差,因为可能对方使用的只是抓到的肉鸡。。。你可能会觉得没完没了。而且,对于新手来说,似乎又觉得好麻烦。
那有没有什么简单的办法呢?
办法还是有的,这里分四种方式:
文章目录
第一种,通过代码当中结合国内一些平台的API接口进行综合性屏蔽。
方案a:
实现原理,利用ip地址查询识别国家地区+浏览器语言判断。
以爱奇艺ip查询接口为例,禁止国内ip访问。ip地址中国或者浏览器语言为zh时:
$ipaddress = $_SERVER['REMOTE_ADDR'] == '::1' ? '127.0.0.1' : $_SERVER['REMOTE_ADDR'];
$lang = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$login_addr_arra = json_decode(file_get_contents('https://apis.map.qq.com/ws/location/v1/ip?output=json&key=2J5BZ-V6JK4-SHSUT-XGMGV-VRHM7-TBFKU&ip='.$ipaddress));
$country = $login_addr_arra->result->ad_info->nation;
if((!empty($country) && $country == '中国') || strstr($lang, 'zh'))
{
header("ip地址为中国");
echo 'ip地址为中国';
exit;
}
wordpress程序只需要添加到根目录下的index.php文件第二行即可(禁止国外访问,ip地址和浏览器语言两个条件同时满足):
$ipaddress = $_SERVER['REMOTE_ADDR'] == '::1' ? '127.0.0.1' : $_SERVER['REMOTE_ADDR'];$lang = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']);$login_addr_arra = json_decode(file_get_contents('https://apis.map.qq.com/ws/location/v1/ip?output=jsonkey=2J5BZ-V6JK4-SHSUT-XGMGV-VRHM7-TBFKUip='.$ipaddress));$country = $login_addr_arra-result-ad_info-nation;if(($country !== '中国') !strstr($lang, 'zh')){header("ip地址为国外");echo 'ip地址为国外';exit;}$ipaddress = $_SERVER['REMOTE_ADDR'] == '::1' ? '127.0.0.1' : $_SERVER['REMOTE_ADDR'];
$lang = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$login_addr_arra = json_decode(file_get_contents('https://apis.map.qq.com/ws/location/v1/ip?output=jsonkey=2J5BZ-V6JK4-SHSUT-XGMGV-VRHM7-TBFKUip='.$ipaddress));
$country = $login_addr_arra-result-ad_info-nation;
if(($country !== '中国') !strstr($lang, 'zh'))
{
header("ip地址为国外");
echo 'ip地址为国外';
exit;
}$ipaddress = $_SERVER['REMOTE_ADDR'] == '::1' ? '127.0.0.1' : $_SERVER['REMOTE_ADDR'];
$lang = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$login_addr_arra = json_decode(file_get_contents('https://apis.map.qq.com/ws/location/v1/ip?output=jsonkey=2J5BZ-V6JK4-SHSUT-XGMGV-VRHM7-TBFKUip='.$ipaddress));
$country = $login_addr_arra-result-ad_info-nation;
if(($country !== '中国') !strstr($lang, 'zh'))
{
header("ip地址为国外");
echo 'ip地址为国外';
exit;
}
方案b:
/**
* WordPress 显示评论者IP归属地PHP函数
* https://baidu.com/
**/
function aliuyun_getRealIp()
{
$ip=false;
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i < count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
function aliuyun_locate($ip) {
$ip=aliuyun_getRealIp();
if(empty($ip)) $ip = get_comment_author_IP();
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, 'http://ip.taobao.com/service/getIpInfo.php?ip='.$ip);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
$result = json_decode($file_contents,true);
if ($result['data']['country'] != '中国') {
wp_redirect( 'https://baidu.com/' );
} else {
echo '<!-- 运营商是'.$result['data']['isp'].',IP是'.$ip.',禁止外国IP访问!! -->';
}
}
add_action( 'wp_footer', 'aliuyun_locate' );
你只需将以上代码加入到主题中的function.php即可。刷新页面试试效果,
如果主题中出现那么恭喜你,封禁成功了!!
其中,wp_redirect( ‘https://baidu.com/’ );
可替换为wp_die(‘IP’, ‘IP!’, array(‘response’ => ‘503’));
这样直接503,SEO也还行。如果不替换的话,国外IP访问全部跳转到
https://baidu.com/这个链接自己修改即可。
方案c:
直接通过脚本当中的IP地址段进行屏蔽。
本脚本适用于CentOS、Debian、Ubuntu等常用系统。
使用root运行以下命令:
wget https://www.moerats.com/usr/shell/block-ips.sh
chmod +x block-ips.sh
./block-ips.sh
备用地址:https://raw.githubusercontent.com/cyberxsboy/block-ips.sh/main/block-ips.sh
封禁ip时会要求你输入国家代码,代码查看:点击进入。记住所填参数均为小写字母。比如JAPAN (JP),我们就输入jp这个参数。
演示
1、封禁IP
2、查看封禁列表
3、解封IP
IP拒绝国家/地区阻止下载 (所有国家/地区的 IP 块文件均以 CIDR 格式提供。) : https://www.ipdeny.com/ipblocks/
总结
一键屏蔽可以有效帮我们暂时防止一些CC攻击等,或者你不想让哪国的人进入博客也可以用,注意屏蔽cn的时候需谨慎,不然你SSH就上不去了。
第二种方法,通过wordpress插件去屏蔽:
a方案:
iQ Block Country 插件
iQ Block Country 是一个用来限制国家/地区IP访问WordPress外贸网站的插件。可让您限制对网站内容的访问。您可以允许或禁止来自特定国家/地区的访问者访问您的(部分)内容。例如,如果您的内容应限制在一组有限的国家/地区中,则可以这样做。如果您想阻止导致问题的流氓国家,例如黑客入侵,评论垃圾邮件等,您也可以阻止它们。
当然即使你阻止了一个国家的IP,还是可以通过将他们国家特定的IP地址列入白名单来允许某些访问者。同样你可以允许一个国家,但是可以将这个国家特定的IP地址加入黑名单禁止访问。
你可以向阻止的访问者们显示一条消息,也可以将他们重定向到WordPress网站中的某个特定页面,甚至重定向到外部的网站。你可以允许访问者们阅读网站里的文章,网站里某个类别或所有内容。你还可以阻止访问者在你的WordPress网站上做有害的事情,为WordPress网站添加额外的安全设置。
iQ Block Country 插件的安装非常简单,你可以直接在WordPress后台的插件中搜索 iQ Block Country 在线安装,或者点击此处下载官方 iQ Block Country 插件,上传到插件目录并启用。
iQ Block Country 插件下载地址:https://wordpress.org/plugins/iq-block-country/
b方案:
IP2Location Country Blocker 插件
IP2Location Country Blocker 插件可以帮助外贸建站用户按国家或代理服务器阻止不需要的访问者访问您的网站前台或后台管理。
主要特点:
允许您阻止来自多个国家的访问。
允许您按国家/地区分组(例如EU,APAC等)阻止访问。
允许您阻止来自匿名代理的访问。
允许您按IP范围阻止访问。
允许您将搜寻器列入白名单,例如Google,Bing,Yandex等,以对您的页面建立索引(对SEO友好)。
支持IPv4和IPv6
默认显示为403错误(权限被拒绝)
允许您自定义自己的403页面。
如果有人试图访问您的管理区域,请向您发送电子邮件通知。
为您提供阻止流量的统计报告。
IP2Location Country Blocker 插件 支持IP2Location BIN数据和Web服务,用于地理位置查询。如果您想使用BIN数据,则可以通过插件设置页面轻松下载和更新BIN数据。另外,您也可以使用以下链接手动下载和更新BIN数据文件:
IP2Location Country Blocker 插件下载地址: https://wordpress.org/plugins/ip2location-country-blocker/
c方案:
WP GEO Website Protection 插件
WP GEO Website Protection 是一个用来屏蔽限制指定国家IP访问网站的安全插件,该插件可让您限制对网站内容的访问。您可以启用或禁用来自某些国家(部分)内容的访问者。
例如,您网站的内容供特定范围的访问者使用,限于某些国家/地区,因此您可以自定义它。或者,如果您想阻止来自国家或IP地址的访问,而这些访问的特征是黑客企图,评论垃圾邮件等,则可以一键完成。
由于使用此插件在管理面板站点上发生了大规模的流行攻击,因此可以避免此问题。您可以轻松过滤网站前端访问者和想要登录到WordPress管理后台的访问者。
主要特点:
禁止来自您不想看到的国家的访客。
禁止以黑客企图,垃圾邮件等为特征的IP地址。
禁止访问者访问您的后端登录页面。
禁止强行使用您的密码的IP地址。
允许列表(白名单)可以阻止整个国家/地区,但允许该国家/地区提供一些IP地址
封锁国家/地区的图表(过去24小时,过去7天,过去30天)
它易于设置且免费使用。
免费支持。
而且, WP GEO Website Protection 插件还可以图表显示统计指定时间周期内容的限制访问信息。
WP GEO Website Protection 插件下载地址: https://wordpress.org/plugins/wp-geo-website-protection/
第三种方法,通过CDN的安全策略来实现。
比如:利用阿里云CDN禁止外国IP来访问。
如果你的网站使用了阿里云的CDN加速服务,那么可以尝试使用CDN加速中提供的区域封禁功能(该功能可能有些用户没有,需要申请开通),里面可以非常方便的设置禁止的区域。
第四种方法,通过宝塔的免费防火墙来实现。
a方案:
利用宝塔 的 “系统防火墙”指定屏蔽国家和端口。
b方案:
利用宝塔 的 “第三方应用”当中的“Nginx免费防火墙”去添加屏蔽。
看,这些方法是不是都挺简单的,你学会了吗?
评论