pragmarx / firewall
一个 Laravel IP 白名单和黑名单插件
Requires
- php: >=5.6
- illuminate/support: >=5.3
- pragmarx/support: >=0.8.0
Requires (Dev)
- geoip2/geoip2: ~2.0
- orchestra/testbench: 3.8.*|4.*|5.*|6.*|7.*|8.*
- phpunit/phpunit: ~7|~8|~9
Suggests
- geoip/geoip: ~1.14
- geoip2/geoip2: ~2.0
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0.0
- v1.1.1
- v1.1.0
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- 0.5.x-dev
- dev-master / 0.5.x-dev
- v0.5.4
- v0.5.3
- v0.5.2
- v0.5.1
- v0.5.0
- v0.3.1
- v0.3.0
- v0.2.0
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-fix-php56-for-1.1.0
- dev-composer
This package is auto-updated.
Last update: 2024-09-17 15:29:30 UTC
README
目的
这是一个“软防火墙”包。其目的是帮助人们通过IP地址防止未经授权的访问路由。它能够跟踪IP、国家和主机(动态IP),并将未经授权的用户重定向到例如“即将推出”页面,同时允许白名单IP访问整个网站。现在它还能检测并阻止来自单个IP或整个国家的攻击。
这个包可以防止一些头疼的问题,并帮助您阻止对您的应用程序的某些访问,但不能取代防火墙和设备。对于网络级别的攻击,您仍然需要一个真正的防火墙。
特性
- 通过黑白名单控制路由和组访问。
- 检测并阻止来自IP地址或国家的应用程序攻击。
- 在攻击事件中发送Slack通知。
- 允许白名单访问整个网站并将其他人重定向到“即将推出”页面。
- 将黑名单用户重定向到其他页面。
- 使用数据库或数组存储IP列表。
- 使用动态DNS主机名白名单您的开发机器。
- 使用中间件完成,因此您可以保护/取消保护路由组。
- 所有功能都适用于主机、IP地址、IP地址范围和整个国家。
- 超级快速,每个请求增加不到10ms。
- 高度可配置。
概念
黑名单
那些列表中的所有IP地址将无法访问黑名单过滤器过滤的路由。
白名单
那些IP地址、范围或国家可以
- 访问黑名单中的路由,即使它们位于黑名单IP地址范围内。
- 访问允许白名单过滤的路由。
- 如果路由被“允许白名单”过滤器过滤,并且IP地址没有白名单,则请求将被重定向到替代URL或路由名称。
攻击检测
防火墙能够通过计算来自同一IP或国家的请求来检测对您页面的简单攻击。只需在您的 config/firewall.php
中启用它,并在 config/services.php
中配置Slack服务以接收通知,然后添加路由通知方法到您的用户模型中。
'slack' => [ 'webhook_url' => env('SLACK_WEBHOOK_URL'), ],
和添加路由通知方法到您的用户模型
/** * Route notifications for the Slack channel. * * @return string */ public function routeNotificationForSlack() { return config('services.slack.webhook_url'); }
IP列表
IP列表(白名单和黑名单)可以存储在数组、文件和数据库中。最初禁用了数据库访问列表,因此,要测试您的防火墙配置,您可以发布配置文件并编辑 blacklist
或 whitelist
数组
'blacklist' => array( '127.0.0.1', '192.168.17.0/24' '127.0.0.1/255.255.255.255' '10.0.0.1-10.0.0.255' '172.17.*.*' 'country:br' '/usr/bin/firewall/blacklisted.txt', ),
文件(例如 /usr/bin/firewall/blacklisted.txt
)必须按行包含一个IP、范围或文件名,是的,它会递归地搜索文件,所以如果您需要,您可以有一个文件中的文件
127.0.0.2
10.0.0.0-10.0.0.100
/tmp/blacklist.txt
重定向非白名单IP地址
非白名单IP地址可以被阻止或重定向。要配置重定向,您将必须发布 config.php
文件并配置
'redirect_non_whitelisted_to' => 'coming/soon',
Artisan命令
您可以使用以下命令
全局
firewall:cache:clear Clear the firewall cache.
firewall:list List all IP address, white and blacklisted.
firewall:updategeoip Update the GeoIP database.
当数据库启用时
firewall:blacklist Add an IP address to blacklist.
firewall:clear Remove all ip addresses from white and black lists.
firewall:remove Remove an IP address from white or black list.
firewall:whitelist Add an IP address to whitelist.
这些是来自 firewall:list
的结果
+--------------+-----------+-----------+
| IP Address | Whitelist | Blacklist |
+--------------+-----------+-----------+
| 10.17.12.7 | | X |
| 10.17.12.100 | X | |
| 10.17.12.101 | X | |
| 10.17.12.102 | X | |
| 10.17.12.200 | | X |
+--------------+-----------+-----------+
+-----------------------+-----------+-----------+
| IP Address | Whitelist | Blacklist |
+-----------------------+-----------+-----------+
| 172.0.0.0-172.0.0.255 | | X |
| country:br | | X |
| host:mypc.myname.com | X | |
+-----------------------+-----------+-----------+
外观
您还可以使用 Firewall Facade
来管理列表
$whitelisted = Firewall::isWhitelisted('10.17.12.1'); $blacklisted = Firewall::isBlacklisted('10.0.0.3'); Firewall::whitelist('192.168.1.1'); Firewall::blacklist('10.17.12.1', true); /// true = force in case IP is whitelisted Firewall::blacklist('127.0.0.0-127.0.0.255'); Firewall::blacklist('200.212.331.0/28'); Firewall::blacklist('country:br'); if (Firewall::whichList($ip) !== false) // returns false, 'whitelist' or 'blacklist' { Firewall::remove($ip); }
返回阻止访问的响应
return Firewall::blockAccess();
可疑事件将被(如果您愿意)记录,因此请使用 tail
命令查看
php artisan tail
阻止整个国家
您可以通过传递 country:<2-letter ISO code>
来阻止一个国家,而不是使用IP地址。因此,要阻止巴西的所有IP地址,您需要这样做
php artisan firewall:blacklist country:br
您需要将此要求添加到您的 composer.json
文件中
"geoip/geoip": "~1.14"
或者
"geoip2/geoip2": "~2.0"
您需要在您的 firewall.php 配置文件中启用国家搜索
'enable_country_search' => true,
您可以将此命令计划为定期更新您的城市 GeoIp 数据库
php artisan firewall:updategeoip
您可以在以下位置找到这些代码: isocodes
会话阻止
您可以通过使用以下方法仅阻止用户在当前会话中访问某些页面
Firewall::whitelistOnSession($ip); Firewall::blacklistOnSession($ip); Firewall::removeFromSession($ip);
游乐场 & 引导应用程序
点击 这里 查看其工作情况,如果您需要帮助理解某些内容,请尝试 此存储库。
安装
兼容性
- Laravel 4+ (版本 1.*)
- Laravel 5.0, 5.1, 5.2 和 5.3 (版本 1.*)
- Laravel 5.4, 5.5, 5.6 和 5.7 (版本 2.*)
安装
使用 Composer 安装 Firewall 包
composer require pragmarx/firewall
-
Laravel 5.5 及以上版本
您无需做任何事情,此包使用自动发现功能,一旦通过 Composer 安装即可使用。
-
Laravel 5.4 及以下版本
将服务提供者和外观添加到您的 app/config/app.php 文件中
PragmaRX\Firewall\Vendor\Laravel\ServiceProvider::class,
'Firewall' => PragmaRX\Firewall\Vendor\Laravel\Facade::class,
将中间件添加到您的 app/Http/Kernel.php 文件中
protected $routeMiddleware = [ ... 'fw-only-whitelisted' => \PragmaRX\Firewall\Middleware\FirewallWhitelist::class, 'fw-block-blacklisted' => \PragmaRX\Firewall\Middleware\FirewallBlacklist::class, 'fw-block-attacks' => \PragmaRX\Firewall\Middleware\BlockAttacks::class, ];
或者
protected $middlewareGroups = [ 'web' => [ ... ], 'api' => [ ... ], 'firewall' => [ \PragmaRX\Firewall\Middleware\FirewallBlacklist::class, \PragmaRX\Firewall\Middleware\BlockAttacks::class, ], ];
然后您可以在路由中使用它们
Route::group(['middleware' => 'fw-block-blacklisted'], function () { Route::get('/', 'HomeController@index'); });
或者您可以使用两者。在下面的示例中,允许组将允许对“即将推出”页面的访问,并阻止或重定向非白名单IP地址到另一个地址,同时仍然阻止对黑名单的访问。
Route::group(['middleware' => 'fw-block-blacklisted'], function () { Route::get('coming/soon', function() { return "We are about to launch, please come back in a few days."; }); Route::group(['middleware' => 'fw-only-whitelisted'], function () { Route::get('/', 'HomeController@index'); }); });
注意:您可以通过将它们添加到 fw-allow-wl
或 fw-block-bl
中间件组来将您已创建的其他中间件添加到新组中。
迁移您的数据库
php artisan migrate
警告:如果您已经安装并迁移了 Firewall 包,您需要更新迁移名称,在 migrations
表中更改为 2014_02_01_311070_create_firewall_table
,否则迁移命令将失败,并告知表已存在。
要发布配置文件,您需要
Laravel 4
php artisan config:publish pragmarx/firewall
Laravel 5
php artisan vendor:publish --provider="PragmaRX\Firewall\Vendor\Laravel\ServiceProvider"
TODO
- 测试,测试,测试。
作者
许可证
Firewall 在 BSD 3-Clause 许可证下授权 - 详细信息请参阅 LICENSE
文件
贡献
欢迎提交拉取请求和问题。