arkitecht/firewall

Laravel 4.1+ 的 IP 白名单和黑名单

维护者

详细信息

github.com/Arkitecht/firewall

源代码

安装: 376

依赖: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 163

v1.88 2017-07-07 01:27 UTC

README

Latest Stable Version License Downloads

一个 Laravel 包,帮助您阻止 IP 地址访问您的应用程序或部分路由

概念

黑名单

黑名单中的所有 IP 地址将无法访问通过黑名单过滤器过滤的路由。

白名单

这些 IP 地址可以

  • 即使它们在黑名单 IP 地址的范围内,也可以访问黑名单路由。
  • 访问'允许白名单'过滤的路由。
  • 如果路由通过'允许白名单'过滤器过滤,且 IP 未列入白名单,则请求将被重定向到备用 URL 或路由名称。

游乐场 & 启动应用程序

点击 这里 查看其工作情况,如果需要帮助了解事物,请尝试 此存储库

游乐场的截图

playground

路由

此包提供两个中间件组,可在路由中使用

'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 列表(白名单和黑名单)可以存储在数组、文件和数据库中。最初禁用了数据库对列表的访问,因此,要测试您的防火墙配置,您可以发布配置文件并编辑 blacklistwhitelist 数组

'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-blfw-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-wlfw-block-bl 中间件组中,将您已经创建的其他中间件添加到新组中。

创建迁移文件

php artisan firewall:tables

执行迁移

php artisan migrate

要发布配置文件,您需要

Laravel 4

php artisan config:publish pragmarx/firewall

Laravel 5

php artisan vendor:publish

待办事项

  • 测试,测试,测试。

作者

Antonio Carlos Ribeiro

许可证

防火墙遵循 BSD 3-Clause 许可协议 - 详细信息请参阅 LICENSE 文件

贡献

欢迎提交拉取请求和问题。