arkitecht / firewall
Laravel 4.1+ 的 IP 白名单和黑名单
Requires
- php: >=5.3.7
- illuminate/cache: ~4|~5
- illuminate/filesystem: ~4|~5
- illuminate/support: ~4|~5
- pragmarx/support: ~0.6.12
Suggests
- geoip/geoip: ~1.14
- geoip2/geoip2: ~2.0
README
一个 Laravel 包,帮助您阻止 IP 地址访问您的应用程序或部分路由
概念
黑名单
黑名单中的所有 IP 地址将无法访问通过黑名单过滤器过滤的路由。
白名单
这些 IP 地址可以
- 即使它们在黑名单 IP 地址的范围内,也可以访问黑名单路由。
- 访问'允许白名单'过滤的路由。
- 如果路由通过'允许白名单'过滤器过滤,且 IP 未列入白名单,则请求将被重定向到备用 URL 或路由名称。
游乐场 & 启动应用程序
点击 这里 查看其工作情况,如果需要帮助了解事物,请尝试 此存储库。
游乐场的截图
路由
此包提供两个中间件组,可在路由中使用
'fw-block-bl':阻止所有黑名单 IP 地址访问过滤的路由
'fw-allow-wl':允许所有白名单 IP 地址访问过滤的路由
因此,例如,您可以有一个阻止组,并将所有路由放入其中
Route::group(['middleware' => 'fw-block-bl'], function () { Route::get('/', 'HomeController@index'); });
或者您可以使用两者。在下面的示例中,允许组将允许访问'即将推出'页面,并将未列入白名单的 IP 地址重定向到另一个,同时仍然阻止对黑名单 IP 地址的访问。
Route::group(['middleware' => 'fw-block-bl'], function () { Route::get('coming/soon', function() { return "We are about to launch, please come back in a few days."; }); Route::group(['middleware' => 'fw-allow-wl'], function () { Route::get('/', 'HomeController@index'); }); });
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 命令
要黑名单或白名单 IP 地址,请使用 artisan 命令
firewall:list List all IP address, white and blacklisted.
仅用于数据库使用
firewall
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 |
+--------------+-----------+-----------+
外观
您还可以使用 Firewall Facade 来管理列表
$ip = '10.17.12.1'; $whitelisted = Firewall::isWhitelisted($ip); $blacklisted = Firewall::isBlacklisted($ip); Firewall::whitelist($ip); Firewall::blacklist($ip, true); /// true = force in case IP is whitelisted if (Firewall::whichList($ip)) // 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"
您可以在以下位置找到这些代码: isocodes
会话阻止
您可以使用这些方法阻止用户仅在当前会话中访问某些页面
Firewall::whitelistOnSession($ip); Firewall::blacklistOnSession($ip); Firewall::removeFromSession($ip);
安装
兼容
- Laravel 4+ 和 5+
安装
使用 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,
将中间件组 fw-block-bl 和 fw-allow-wl 添加到您的 app/Http/Kernel.php 文件中
protected $middlewareGroups = [ ... 'fw-block-bl' => [ \PragmaRX\Firewall\Middleware\FirewallBlacklist::class, ], 'fw-allow-wl' => [ \PragmaRX\Firewall\Middleware\FirewallWhitelist::class, ], ];
注意: 您可以通过简单地将其添加到 fw-allow-wl 或 fw-block-bl 中间件组中,将您已经创建的其他中间件添加到新组中。
创建迁移文件
php artisan firewall:tables
执行迁移
php artisan migrate
要发布配置文件,您需要
Laravel 4
php artisan config:publish pragmarx/firewall
Laravel 5
php artisan vendor:publish
待办事项
- 测试,测试,测试。
作者
许可证
防火墙遵循 BSD 3-Clause 许可协议 - 详细信息请参阅 LICENSE 文件
贡献
欢迎提交拉取请求和问题。
