fgreinus / antonioribeiro-firewall
Laravel 4.1+ IP 白名单和黑名单
Requires
- php: >=5.3.7
- fgreinus/antonioribeiro-support: ^0.7
- illuminate/cache: ~4|~5
- illuminate/filesystem: ~4|~5
- illuminate/support: ~4|~5
Suggests
- geoip/geoip: ~1.14
- geoip2/geoip2: ~2.0
README
一个 Laravel 软件包,帮助你阻止 IP 地址访问你的应用程序或某些路由
概念
黑名单
那些列表中的所有 IP 地址将无法访问通过黑名单过滤器筛选的路由。
白名单
这些 IP 地址可以
- 即使它们在黑名单 IP 地址范围内,也可以访问黑名单路由。
- 访问“允许白名单”筛选的路由。
- 如果路由由“允许白名单”过滤器筛选,并且 IP 地址没有白名单,则请求将被重定向到另一个 URL 或路由名称。
Playground & Bootstrap App
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(白名单和黑名单)列表可以存储在数组、文件和数据库中。最初禁用了对列表的数据库访问,因此,为了测试您的防火墙配置,您可以发布配置文件并编辑 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安装防火墙包
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-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
文件
贡献
欢迎提交拉取请求和问题。