这是一个“软防火墙”包。其目的是帮助人们防止通过IP地址对路由进行未经授权的访问。它能够跟踪 IP、国家/地区和主机(动态 IP),并将未经授权的用户重定向到“即将推出”页面等,同时允许列入白名单的 IP 访问整个网站。现在它还能够检测和阻止来自单个 IP 或整个国家的攻击(过多请求)。
该软件包可以防止一些令人头疼的问题,并帮助您阻止对应用程序的某些访问,但不能取代防火墙和设备,对于网络级别的攻击,您仍然需要真正的防火墙。
这些列表中的所有 IP 地址将无法访问经过黑名单过滤器过滤的路由。
这些 IP 地址、范围或国家/地区可以
防火墙能够通过计算来自同一 IP 或国家/地区的请求来检测对您页面的简单攻击。只需在config/firewall.php
上启用它,并在config/services.php
中配置 Slack 服务即可接收通知:
' slack ' => [
' webhook_url ' => env ( ' SLACK_WEBHOOK_URL ' ),
],
并将路由通知方法添加到您的用户模型中:
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack ()
{
return config ( ' services.slack.webhook_url ' );
}
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 地址可以被阻止或重定向。要配置重定向,您必须发布config.php
文件并配置:
' redirect_non_whitelisted_to ' => ' coming/soon ' ,
您可以访问以下命令:
firewall:cache:clear Clear the firewall cache.
firewall:list List all IP address, white and blacklisted.
firewall:updategeoip Update the GeoIP database.
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 |
+--------------+-----------+-----------+
+-----------------------+-----------+-----------+
| IP Address | Whitelist | Blacklist |
+-----------------------+-----------+-----------+
| 172.0.0.0-172.0.0.255 | | X |
| country:br | | X |
| host:mypc.myname.com | X | |
+-----------------------+-----------+-----------+
您还可以使用Firewall Facade
来管理列表:
$ whitelisted = Firewall:: isWhitelisted ( ' 10.17.12.1 ' );
$ blacklisted = Firewall:: isBlacklisted ( ' 10.0.0.3 ' );
Firewall:: whitelist ( ' 192.168.1.1 ' );
Firewall:: blacklist ( ' 10.17.12.1 ' , true ); /// true = force in case IP is whitelisted
Firewall:: blacklist ( ' 127.0.0.0-127.0.0.255 ' );
Firewall:: blacklist ( ' 200.212.331.0/28 ' );
Firewall:: blacklist ( ' country:br ' );
if (Firewall:: whichList ( $ ip ) !== false ) // 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"
您需要在firewall.php配置文件中启用国家/地区搜索:
' enable_country_search ' => true,
您可以安排此命令定期更新您的城市 GeoIp 数据库:
php artisan firewall:updategeoip
您可以在这里找到这些代码:isocodes
您可以使用以下方法阻止用户仅在当前会话中访问某些页面:
Firewall:: whitelistOnSession ( $ ip );
Firewall:: blacklistOnSession ( $ ip );
Firewall:: removeFromSession ( $ ip );
单击此处查看它的工作情况,如果您需要帮助解决问题,请尝试此存储库。
需要使用 Composer 的防火墙包:
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,
将中间件添加到您的 app/Http/Kernel.php
protected $ routeMiddleware = [
...
' fw-only-whitelisted ' => PragmaRX Firewall Middleware FirewallWhitelist::class,
' fw-block-blacklisted ' => PragmaRX Firewall Middleware FirewallBlacklist::class,
' fw-block-attacks ' => PragmaRX Firewall Middleware BlockAttacks::class,
];
或者
protected $ middlewareGroups = [
' web ' => [
...
],
' api ' => [
...
],
' firewall ' => [
PragmaRX Firewall Middleware FirewallBlacklist::class,
PragmaRX Firewall Middleware BlockAttacks::class,
],
];
然后你可以在你的路线中使用它们:
Route:: group ([ ' middleware ' => ' fw-block-blacklisted ' ], function ()
{
Route:: get ( ' / ' , ' HomeController@index ' );
});
或者你可以两者都用。在以下示例中,允许组将允许免费访问“即将推出”页面,并阻止或仅将非白名单 IP 地址重定向到另一个地址,同时仍阻止对黑名单 IP 地址的访问。
Route:: group ([ ' middleware ' => ' fw-block-blacklisted ' ], function ()
{
Route:: get ( ' coming/soon ' , function ()
{
return " We are about to launch, please come back in a few days. " ;
});
Route:: group ([ ' middleware ' => ' fw-only-whitelisted ' ], function ()
{
Route:: get ( ' / ' , ' HomeController@index ' );
});
});
注意:您可以将已创建的其他中间件添加到新组中,只需将其添加到fw-allow-wl
或fw-block-bl
中间件组中即可。
迁移您的数据库
php artisan migrate
警告:如果您已经安装并迁移了防火墙软件包,则需要将migrations
表中的迁移名称更新为2014_02_01_311070_create_firewall_table
,否则迁移命令将失败并告诉您该表已存在。
要发布配置文件,您必须:
拉拉维尔 4
php artisan config:publish pragmarx/firewall
拉拉维尔 5
php artisan vendor:publish --provider="PragmaRXFirewallVendorLaravelServiceProvider"
安东尼奥·卡洛斯·里贝罗
防火墙根据 BSD 3-Clause License 获得许可 - 有关详细信息,请参阅LICENSE
文件
拉取请求和问题非常受欢迎。