1. 犀牛前端部落首页
  2. WordPress百科

wordpress自动ip黑名单

wordpress自动ip黑名单

俺最近发现了一个很酷的PHP脚本,它可以自动更新你的站点的htaccess,并提供当前的错误IP地址列表。这是非常有用的,因为它为您提供更好的“实时”保护,防止攻击和恶意请求。本教程共享代码并解释如何通过两个简单的步骤实现。

环境要求:您将需要访问服务器来设置cron作业。或者,如果你使用WordPress,你需要一个插件或者自定义函数来设置一个WP Cron事件。

声明:本文提供的脚本和技术旨在演示概念和功能。它不能在实时的生产站点上按原样使用。它是用来学习的,作为进一步实验和开发的起点。所以要安全,要玩得开心!

步骤一:创建php脚本

要实现自动IP黑名单,首先要将脚本上传到服务器。您可以从以下代码复制粘贴,或者下载下面的PHP脚本副本。所以,言归正传,这里是自动的IP黑名单:

// Latest Blacklist IP file
$file 	= "https://myip.ms/files/blacklist/htaccess/latest_blacklist.txt";

// Latest Blacklist User Submitted IP 
// Optional, delete this variable $file2 if you don't need it
$file2 	= "https://myip.ms/files/blacklist/htaccess/latest_blacklist_users_submitted.txt";

// .htaccess apache file
$file3 = rtrim($_SERVER['DOCUMENT_ROOT'], "/ ")."/.htaccess";

// Separator
$line 	= "## BLACKLIST IP AUTO ADDED ##";

$data = @file_get_contents($file);
if ($data === false || !$data) die ("<font color='red'><b>Error!</b></font> No access to file: $file");

$htaccess = @file_get_contents($file3);
if ($htaccess === false) die ("<font color='red'><b>Error!</b></font> No access to file: $file3 in your website root directory. Please create this file or change file permissions if it exists");

$htaccess = trim($htaccess);
if (stripos($htaccess, $line) !== false) $htaccess = trim(substr($htaccess, 0, stripos($htaccess, $line)));
if (stripos($data, "# Copyright")) $data = substr($data, 0, strripos($data, "# Copyright")) . substr($data, strripos($data, "##############")+16);
$htaccess .= "\n\n\n" . $line . "\n\n" . $data;  

if (isset($file2) && $file2)
{
	$data2 = @file_get_contents($file2);
	if ($data2 === false || !$data2) die ("<font color='red'><b>Error!</b></font> No access to file: $file2");
	
	$data2 = substr($data2, strripos($data2, "##############"));
	$htaccess .= "\n\n" . $data2;
}

$htaccess = trim($htaccess) . "\n\n";


$res = file_put_contents($file3, $htaccess);

if ($res === false) die ("<font color='red'><b>Error!</b></font> Cannot write blacklist ip to file: $file3 in your website root directory. Please change file permissions to 0777 (command: chmod 0777 $file3)");
else die ("<font color='green'><b>File .htaccess successfully updated with new Myip.ms Blacklist IPs.</b></font><br>Date: " . date("r"));

最初这个脚本是几年前编写的,但代码仍然是100%可靠和有效的。

不需要做任何更改,只需上传,然后继续执行第2步cron作业。这个脚本本身不做任何事情。它需要被调用,以便查找和获取最新的拦截IP地址,并更新站点的根目录.htaccess文件。因此,从技术上讲,您可以每天通过浏览器手动调用脚本,但如果我们可以通过简单的cron命令自动化该过程,这将不需要手动设置

重要:你的站点的根目录.htaccess文件必须支持由服务器写入,以使这个脚本工作。因此,请确保特定服务器环境中的权限是CHMOD。

wordpress自动ip黑名单

步骤二:设置Cron

在将自动IP黑名单上传到服务器后,您需要设置cron作业来每天或每周运行脚本。设置cron作业至少有两种方法:直接通过服务器(或服务器控制面板)或使用WordPress cron API。让我们分别看一个例子。

注意:下面的示例使用24小时作为cron间隔。你可以根据自己的情况增加或减少时间。

Cron是Linux/Unix操作系统中的时序调度服务。Cron作业(crontab命令)用于按指定的时间间隔定期执行命令或脚本。在Linux/Unix中,cron服务(守护进程)在后台运行,并不断轮询/etc/crontab文件、/var/ spoole /cron/和/etc/ cron/。/ *目录。

每24小时运行一次的经典cron配置如下所示:

# [minute hour day month weekday] [resource] [command]
0 24 * * * /usr/bin/php /var/www/html/automatic-ip-blacklist.php

我可以从辛苦积累的经验告诉您,设置cron作业的棘手部分是正确地获得文件路径。但是,一旦一切都设置好了,cron就不会让您失败。有关设置和配置cron作业的更多信息,请参阅初学者指南。

WordPress Cron

与Linux/Unix Cron一样,WP Cron允许我们按循环间隔执行基于时间的任务。与Linux/Unix Cron不同,WP Cron是一个伪Cron服务。WP Cron只在页面加载时运行,而不是持续运行。因此,当页面加载时,WP Cron检查计划任务队列,并运行任何超过计划时间的内容。在大多数情况下,这种伪方法都很有效;但是对于很少活动的站点,计划事件的队列可能会增加。

下面是一个超级基本的脚本,用于设置一个新的WP Cron事件:

function shapeSpace_wpcron_activation() {
	if (!wp_next_scheduled('auto_ip_blacklist')) {
		wp_schedule_event(time(), 'daily', 'auto_ip_blacklist');
	}
}
add_action('admin_init', 'shapeSpace_wpcron_activation');

function shapeSpace_auto_ip_blacklist() {
	if (!defined('DOING_CRON')) return;
	require_once('/path/to/automatic-ip-blacklist.php');
}
add_action('auto_ip_blacklist', 'shapeSpace_auto_ip_blacklist');

需要做的惟一更改是:将/path/更改为/以匹配automatic-ip-blacklist.php的实际路径。要将这两个函数添加到WordPress中,可以创建一个简单的插件(推荐),或者将代码添加到活动主题的functions.php中。

在实现了自动IP黑名单之后,您可以通过关注站点的根目录.htaccess文件来验证一切正常。您应该注意到,ip阻止指令每天都在变化。

因此,要在设置时测试功能,可以将cron作业的时间间隔缩短为5分钟或任何较短的时间间隔。然后你可以在.htaccess文件的block-IP规则中添加注释或空行。等待5分钟或其他时间,然后检查注释或空行是否被删除。如果是这样,这意味着被阻止的IP规则被成功更新(并且在这个过程中您的注释或空白行被覆盖/删除)。

原创文章,作者:我心飞翔,如若转载,请注明出处:https://www.pipipi.net/3765.html

发表评论

登录后才能评论