นี่เป็นแพ็คเกจ "soft-firewall" โดยมีวัตถุประสงค์คือเพื่อช่วยให้ผู้คนป้องกันการเข้าถึงเส้นทางโดยไม่ได้รับอนุญาต ด้วยที่อยู่ IP สามารถติดตาม IP ประเทศ และโฮสต์ (IP แบบไดนามิก) และเปลี่ยนเส้นทางผู้ใช้ที่ไม่ได้รับอนุญาตไปยังหน้า "เร็วๆ นี้" ได้ ในขณะที่อนุญาตให้ IP ที่อนุญาตพิเศษเข้าถึงทั้งไซต์ได้ ขณะนี้ยังสามารถตรวจจับและบล็อกการโจมตี (คำขอมากเกินไป) จาก IP เดียวหรือทั้งประเทศได้
แพ็คเกจนี้สามารถป้องกันการปวดหัวและช่วยคุณบล็อกการเข้าถึงแอปของคุณได้ แต่ไม่สามารถแทนที่ไฟร์วอลล์และอุปกรณ์ได้ สำหรับการโจมตีในระดับเครือข่าย คุณยังคงต้องใช้ไฟร์วอลล์จริง
ที่อยู่ IP ทั้งหมดในรายการเหล่านั้นจะไม่สามารถเข้าถึงเส้นทางที่ถูกกรองโดยตัวกรองบัญชีดำ
ที่อยู่ IP ช่วงหรือประเทศเหล่านั้นสามารถทำได้
ไฟร์วอลล์สามารถตรวจจับการโจมตีง่ายๆ บนเพจของคุณ โดยการนับคำขอจาก IP หรือประเทศเดียวกัน เพียงเปิดใช้งานบน config/firewall.php
ของคุณ และหากต้องการรับการแจ้งเตือน ให้กำหนดค่าบริการ Slack ใน config/services.php
:
' 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 ขึ้นไป
คุณไม่จำเป็นต้องดำเนินการใดๆ อีกต่อไป แพ็คเกจนี้ใช้คุณสมบัติของ Package Auto-Discovery และควรจะพร้อมใช้งานทันทีที่คุณติดตั้งผ่าน Composer
Laravel 5.4 และต่ำกว่า
เพิ่มผู้ให้บริการและ Facade ให้กับ 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 ที่ไม่อยู่ในรายการที่ปลอดภัยไปยังอีกรายการหนึ่ง ในขณะที่ยังคงบล็อกการเข้าถึงรายการที่อยู่ในบัญชีดำ
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
คำขอดึงและปัญหาต่างๆ เป็นเรื่องที่น่ายินดีอย่างยิ่ง