如何做一家专门卖零食的网站,汉中建设工程招投标信息网官网,免费 网站模板,网站建设福建在网络安全领域#xff0c;我们经常需要监控服务器的访问日志#xff0c;并根据IP地址出现的频率来判断是否存在恶意访问。本文将介绍如何使用PHP编写一个脚本#xff0c;自动统计日志文件中IP出现的次数#xff0c;并根据设定的阈值自动添加iptables规则来阻止恶意IP的访问… 在网络安全领域我们经常需要监控服务器的访问日志并根据IP地址出现的频率来判断是否存在恶意访问。本文将介绍如何使用PHP编写一个脚本自动统计日志文件中IP出现的次数并根据设定的阈值自动添加iptables规则来阻止恶意IP的访问。 步骤 1、首先我们需要编写一个PHP函数来统计日志文件中IP出现的次数。函数的代码如下
function countIPOccurrences($logFile) {$ipCounts array();$handle fopen($logFile, r);if ($handle) {while (($line fgets($handle)) ! false) {preg_match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/, $line, $matches);if (!empty($matches)) {$ip $matches[0];if (array_key_exists($ip, $ipCounts)) {$ipCounts[$ip];} else {$ipCounts[$ip] 1;}}}fclose($handle);}return $ipCounts;
}里面具体正则根据你的log文件的情况来
2、接下来我们需要获取当前日期并构建日志文件的路径。代码如下
$date date(Y-m-d);
$logFile /home/mydemo/storage/logs/special-.$date..log;
3、然后调用上述函数来统计IP出现的次数并将结果保存到一个数组中。代码如下
$ipOccurrences countIPOccurrences($logFile);4、接下来我们需要读取已添加的iptables规则列表。代码如下
$ips fopen(/home/mydemo/storage/logs/iptables_rules.txt, r);
$ipArr [];
if ($ips) {while(($ip fgets($ips)) ! false) {array_push($ipArr, $ip);}fclose($ips);
}5、然后我们遍历IP出现次数的数组并根据设定的阈值判断是否需要添加iptables规则。如果IP出现次数超过阈值并且该IP不在已添加的规则列表中则执行添加规则的操作。代码如下
foreach ($ipOccurrences as $ip $count) {if ($count 200 !in_array($ip, $ips)) {$output shell_exec(sh . /home/mydemo/app/Sh/iptables.sh. .$ip);array_push($ipArr, $ip);// 将数组转换为带换行符的文本$ipText implode(, $ipArr);// 打开文件追加模式$ips fopen(/home/mydemo/storage/logs/iptables_rules.txt, a);if ($ips) {// 写入文本到文件fwrite($ips, $ip);fclose($ips);}echo IP: $ip | Occurrences: $count . PHP_EOL;}
}6、最后你可以将上述代码整理成一个完整的PHP脚本并在服务器上定期运行该脚本来自动统计IP出现次数并添加iptables规则。
/home/mydemo/app/Sh/iptables.sh
echo 参数一$1
sudo iptables -A INPUT -s $1 -j DROP /home/goodMorningAndNight/api/storage/logs/iptables.log 21