turbo124 / bot-licker
用于Laravel在网络边缘阻止IP地址的包
0.1.6
2023-06-02 21:39 UTC
Requires
- guzzlehttp/guzzle: ^7.5
- illuminate/support: ^9|^10
Requires (Dev)
- orchestra/testbench: ^8.5
- phpunit/phpunit: ^10.1
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)