fgreinus/antonioribeiro-firewall

此软件包已被废弃,不再维护。未建议替代软件包。

Laravel 4.1+ IP 白名单和黑名单

v1.1.1 2017-02-13 14:50 UTC

README

Latest Stable Version License Downloads

一个 Laravel 软件包,帮助你阻止 IP 地址访问你的应用程序或某些路由

概念

黑名单

那些列表中的所有 IP 地址将无法访问通过黑名单过滤器筛选的路由。

白名单

这些 IP 地址可以

  • 即使它们在黑名单 IP 地址范围内,也可以访问黑名单路由。
  • 访问“允许白名单”筛选的路由。
  • 如果路由由“允许白名单”过滤器筛选,并且 IP 地址没有白名单,则请求将被重定向到另一个 URL 或路由名称。

Playground & Bootstrap App

点击 这里 查看效果,如果需要帮助理解,请尝试 此存储库

Playground 的截图

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安装防火墙包

composer require pragmarx/firewall

将服务提供者添加到您的app/config/app.php

PragmaRX\Firewall\Vendor\Laravel\ServiceProvider::class,

将外观添加到您的app/config/app.php

'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文件

贡献

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