turbo124/bot-licker

用于Laravel在网络边缘阻止IP地址的包

0.1.6 2023-06-02 21:39 UTC

This package is auto-updated.

Last update: 2024-08-24 12:55:13 UTC


README

BotLicker

在网络边缘禁止/挑战IP/国家。

问题: 在研究了一些提供防火墙功能的Laravel包之后,一个共同的主题是它们都是在应用级别进行阻止。

这可能适用于流量较低的网站,但处理大量请求时,它就变得无效了。它还继续不必要地使用资源。

BotLicker应运而生,您可以将您的WAF规则直接发送到Cloudflare以立即实施。

安装

composer require turbo124/bot-licker

配置

在您的.env文件中,输入以下环境变量

CLOUDFLARE_API_KEY="your_cloudflare_API_KEY_that_has_permission to read/write/edit WAF rules"
CLOUDFLARE_EMAIL="your_cloudflare_email_address"
CLOUDFLARE_ZONE_ID="your_zone_id"
CLOUDFLARE_ACCOUNT_ID="your_account_id"

使用方法

永久禁止一个IP地址连接到您的服务器。

Firewall::ban('101.1.1.254');

要禁止一个IP地址一段时间,只需将Carbon实例作为第二个参数传递

Firewall::ban('10.1.1.1', Carbon::now()->addYear();

取消禁止一个IP地址

Firewall::unban('101.1.1.254');

如果您希望向一个IP地址发起挑战

Firewall::challenge('101.1.1.254', Carbon::now()->addYear());

然后禁用

Firewall::unchallenge('101.1.1.254');

如果您希望禁止一个整个国家,只需传入iso_3166_2国家代码

Firewall::banCountry('DE');

然后禁用

Firewall::unbanCountry('DE');

受保护的IP和国家

如果您需要规则来白名单IP地址范围或国家,只需...

这些可以添加到配置文件bot-licker.php中

自动化规则

您是否厌倦了在日志中看到试图访问.env或phpinfo.php的机器人?您可以构建一个自定义规则集,该规则集匹配请求URI中的字符串。然后对来自该IP(或国家)的用户执行操作。

Rule::matches('phpinfo.php', now()->addYear())->ban();

这将匹配任何包含phpinfo.php的URL的传入请求URI,例如 https://domain.com/phpinfo.php,然后禁止该IP地址一年。

通过新提供程序扩展BotLicker

目前仅支持Cloudflare,但您可以轻松实现ProviderContract并为其他WAF生成相应的方法。一旦创建了提供程序,只需将其注入到setProvider()中或替换配置文件中的默认提供程序。

Firewall::setProvider(OtherWAF::class)->ban('101.1.1.254', now()->addMinutes(5));

控制台命令

如果您喜欢从控制台进行禁止,可以使用这些命令

  • 防火墙规则
php artisan firewall:rule
  • 从WAF中删除规则
php artisan firewall:waf --delete=
  • 从命令行禁止
firewall:cf-rules {--ban} {--challenge} {--unban} {--unchallenge}
php artisan cf-rules --ban=10.1.1.1
  • 显示禁止
php artisan firewall:show

待办事项

目前该包仅执行简单的禁止/取消禁止等操作。在下一次迭代中,还将添加禁止持续时间,以便某些规则在X时间周期后删除。例如

许可

MIT许可(MIT)