帮助完成脚本(假的谷歌 IP,也许是 fail2ban)

帮助完成脚本(假的谷歌 IP,也许是 fail2ban)

我监控了访问我服务器的谷歌 ip 几年,并确定了这些掩码:66.249.64.0/19 66.102.0.0/20 64.233.160.0/19 34.64.0.0/10 216.58.192.0/19 74.125.0.0/16

然后我用 php 创建了这个脚本,并将其包含在我的所有网站中。

include_once('function_global/cidr_match_function.php');
    if(cidr_match($_SERVER['REMOTE_ADDR'], '66.249.64.0/19') === false && cidr_match($_SERVER['REMOTE_ADDR'], '66.102.0.0/20') === false && cidr_match($_SERVER['REMOTE_ADDR'], '64.233.160.0/19') === false && cidr_match($_SERVER['REMOTE_ADDR'], '34.64.0.0/10') === false && cidr_match($_SERVER['REMOTE_ADDR'], '216.58.192.0/19') === false&& cidr_match($_SERVER['REMOTE_ADDR'], '74.125.0.0/16') === false){ 
    $fake_google_ip_list = file_get_contents('function_global/ip_add_fwd.txt');

        if(strpos($fake_google_ip_list, $_SERVER['REMOTE_ADDR']) === false){
            file_put_contents('function_global/ip_add_fwd.txt', $_SERVER['REMOTE_ADDR'].PHP_EOL , FILE_APPEND | LOCK_EX);
        }
    }
}

结果是这个文件包含一个假装是谷歌并以诈骗意图访问我的服务器的 IP 列表。

然后我每天或多或少运行一次这个控制台命令,将所有这些 ip 添加到 ufw:

while read line; do sudo ufw insert 1 deny from $line to any; done < /var/www/html/function_global/ip_add_fwd.txt

并将新的空白文件上传到服务器。

我想使这最后一部分自动化,也许使用 fail2ban,而不是在 ufw 中填充越来越多的可能永远不会回来的 ip。

而且我认为我需要一个 .sh 脚本或类似的东西,但我不知道如何编写它...(我是一名 php 程序员,我只使用 ubuntu 作为 Web 服务器,仅限于我的网站运行所需的功能)。

该脚本应该是:

  • 可通过 crontab 调用
  • 将 IP 列表添加到 ufw,或者添加到 fail2ban
  • 清空 ip_add_fwd.txt 文件
  • 也许可以给我发送一封包含 IP 列表的电子邮件,只是为了知道它做了什么,并能够验证它是否正常工作(crontab 输出也是通过电子邮件发送的,所以也许一个输出就足够了?)

有人能帮我写一下吗?或者至少给我一些入门的提示?我不知道从哪里开始,我试图把一些其他文件的片段拼凑在一起,但效果不太好…… :(

答案1

你可以尝试一下这个办法。

对于 Apache,要在 fail2ban 配置中配置 Web 服务器“监狱”,有一个指南:Apache 中的 fail2ban

在这里您可以配置 IP 的临时禁令,并且还有一个客户端 fail2ban-client,您可以直接从 php 脚本调用它(需要检查权限)来手动禁止 IP。

我认为这比 cron 方法效果更好,但如果您仍然想通过 shell 进行:

#!/bin/bash
#assuming one IP per line
input="/var/www/html/function_global/ip_add_fwd.txt"
while IFS= read -r line
do
    sudo ufw deny from $line to any;
done < "$input"

#This line will empty the file
echo "">"$input"

使用fail2ban脚本

#!/bin/bash
#assuming one IP per line
input="/var/www/html/function_global/ip_add_fwd.txt"
while IFS= read -r line
do
    #sudo ufw deny from $line to any;
    sudo fail2ban-client set apache-badbots banip $line;
done < "$input"

#This line will empty the file
echo "">"$input"  

#added by JP - Will list all banned IPs for apache-badbots
sudo fail2ban-client get apache-badbots banip --with-time;

相关内容