這是一個「軟防火牆」包。其目的是幫助人們防止透過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
文件
拉取請求和問題非常受歡迎。