هذه حزمة "جدار الحماية الناعم". والغرض منه هو مساعدة الأشخاص على منع الوصول غير المصرح به إلى المسارات عن طريق عنوان 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
لارافيل 5.5 وما فوق
ليس عليك القيام بأي شيء آخر، فهذه الحزمة تستخدم ميزة Package Auto-Discovery، ويجب أن تكون متاحة بمجرد تثبيتها عبر Composer.
لارافيل 5.4 وما دونه
أضف مزود الخدمة والواجهة إلى التطبيق/config/app.php الخاص بك:
PragmaRX Firewall Vendor Laravel ServiceProvider::class,
' Firewall ' => PragmaRX Firewall Vendor Laravel Facade::class,
أضف البرامج الوسيطة إلى تطبيقك/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 فقرات - راجع ملف LICENSE
للحصول على التفاصيل
طلبات السحب والقضايا هي موضع ترحيب كبير.