skydiver/laravel-route-blocker

1.5.0 2020-06-09 11:42 UTC

This package is auto-updated.

Last update: 2024-09-11 08:12:58 UTC


README

按IP阻止路由

(灵感来源于 Laravel Firewall)

要求

Laravel 5.x, 6.x, 7.x 和 8.x

安装

  1. 通过 composer 安装,请在终端运行以下命令

    $ composer require skydiver/laravel-route-blocker
  2. 发布配置文件

    运行以下命令以发布包配置文件

    $ php artisan vendor:publish --tag=LaravelRouteBlocker
仍在使用 Laravel 5.4 或更低版本?

请将服务提供者添加到您的 config/app.php providers 数组中

'providers' => [
    ...
    Skydiver\LaravelRouteBlocker\LaravelRouteBlockerServiceProvider::class,
]

使用方法

  1. app/Http/Kernel.php 中的 $routeMiddleware 数组中注册中间件
        'blacklist' => \Skydiver\LaravelRouteBlocker\Middleware\BlacklistMiddleware::class,
        'whitelist' => \Skydiver\LaravelRouteBlocker\Middleware\WhitelistMiddleware::class,
    
  • 黑名单允许所有流量,除非匹配规则。
  • 白名单阻止所有流量,除非匹配规则。
  • 您可以注册两者或只注册一个中间件。
  1. config/laravel-route-blocker.php 上创建一个配置组并插入您的允许/阻止 IP

        'whitelist' => [
            'my_group' => [
                '127.0.0.1',
                '192.168.17.0',
                '10.0.1.*'
            ],
            'another_group' => [
                '8.8.8.*'
            ],
        ],
        'blacklist' => [
            'blocked_ips' => [
                '127.0.0.1',
                '192.168.100.0',
            ],
            'blocked_ips2' => [
                '8.8.8.8',
            ],
        ],
    
    • 您可以根据需要创建任意数量的黑名单/白名单组,并使用不同的 IP 保护不同的路由集合

    此外,您还可以配置抛出 HTTP 状态代码或重定向到自定义 URL

    'redirect_to'      => '',   // URL TO REDIRECT IF BLOCKED (LEAVE BLANK TO THROW STATUS)
    'response_status'  => 403,  // STATUS CODE (403, 404 ...)
    'response_message' => ''    // MESSAGE (COMBINED WITH STATUS CODE)
    
  2. 将受保护的路由放在一个组内并指定白名单参数

        // Only IPs matched on "my_group" will be allowed to access route
        Route::group(['middleware' => 'whitelist:my_group'], function() {
    
            Route::get('/demo', function () {
                return "DEMO";
            });
    
        });
    
        // Only IPs matched on "my_group" will be blocked to access route
        Route::group(['middleware' => 'blacklist:blocked_ips'], function() {
    
            Route::get('/private', function () {
                return "Private Page";
            });
    
        });
    

Artisan 命令

  • 要获取当前 IP 组的列表,请运行

        $ php artisan route:blocks:groups
    
        +-----------------+--------------+-----------+
        | Group           | IP           | Type      |
        +-----------------+--------------+-----------+
        | allowed_group_1 | 127.0.0.1    | whitelist |
        | allowed_group_1 | 127.0.0.2    | whitelist |
        | allowed_group_1 | 192.168.17.0 | whitelist |
        | allowed_group_1 | 10.0.0.*     | whitelist |
        | allowed_group_2 | 8.8.8.8      | whitelist |
        | allowed_group_2 | 8.8.8.*      | whitelist |
        | allowed_group_2 | 8.8.4.4      | whitelist |
        | blocked_ips_1   | 127.0.0.1    | blacklist |
        | blocked_ips_1   | 127.0.0.2    | blacklist |
        | blocked_ips_1   | 192.168.17.0 | blacklist |
        | blocked_ips_1   | 10.0.0.*     | blacklist |
        | blocked_ips_2   | 8.8.8.8      | blacklist |
        | blocked_ips_2   | 8.8.8.*      | blacklist |
        | blocked_ips_2   | 8.8.4.4      | blacklist |
        +-----------------+--------------+-----------+
    

测试

要手动运行测试套件

vendor/bin/phpunit --verbose

位于 tests/Feature 的测试文件应由 GitHub Action 运行。