يتيح لك رؤية الوضع الحالي لجميع القيود والحظر. حذف المفاتيح/الحظر الموجود. إضافة الحظر يدويا.
مستوحاة من: https://www.backerkit.com/blog/building-a-rackattack-dashboard/
أضف هذا السطر إلى Gemfile
الخاص بالتطبيق الخاص بك:
gem 'rack_attack_admin'
أضف هذا السطر إلى config/routes.rb
الخاص بتطبيقك:
mount RackAttackAdmin :: Engine , at : '/admin/rack_attack'
انتقل إلى http://localhost:3000/admin/rack_attack في متصفحك!
يمكنك أيضًا استخدام أمر سطر الأوامر للقراءة فقط، rake rack_attack_admin:watch
بدلاً من واجهة الويب:
+-------------------------------+--------------------+
| Banned IP | Previous (5 s ago) |
+-------------------------------+--------------------+
| allow2ban:ban:login-127.0.0.1 | |
+-------------------------------+--------------------+
+----------------------------------------------------------------------------------+---------------+--------------------+
| Key | Current Count | Previous (5 s ago) |
+----------------------------------------------------------------------------------+---------------+--------------------+
| ('allow2ban:count'):login-127.0.0.1 | 2 | 1 |
| throttle('logins/ip'):127.0.0.1 | 1 | |
| throttle('logins/email'):[email protected] | 1 | |
| throttle('req/ip'):127.0.0.1 | 2 | 1 |
+----------------------------------------------------------------------------------+---------------+--------------------+
من أجل السماح باستكشاف قواعد Fail2Ban/Allow2Ban الخاصة بك بواسطة هذا التطبيق، يجب عليك تحديدها بشكل مختلف قليلاً عما تخبرك به وثائق Rack::Attack الأولية لتعريفها:
إذا كان لديك مرشحallow2Ban في قائمة الحظر مثل هذا:
blocklist ( 'login:allow2ban' ) do | req |
Rack :: Attack :: Allow2Ban . filter ( "login- #{ req . ip } " , maxretry : 5 , findtime : 1 . minute , bantime : 10 . minutes ) do
# The count for the IP is incremented if this return value is truthy.
is_login . ( req )
end
end
، يمكنك تغييره إلى هذا التعريف المكافئ:
blocklist ( 'login:allow2ban' ) do | req |
def_allow2ban ( 'login' , limit : 5 , period : 1 . minute , bantime : 10 . minutes )
allow2ban ( 'login' , req . ip ) do
is_login . ( req )
end
end
def_fail2ban
/ def_allow2ban
احفظ التكوين الخاص بك في تجزئة (بالاسم، بدون تمييز فيه)، تمامًا كما يفعل throttle
.
أساليب fail2ban
/ allow2ban
هي ببساطة أغلفة لـ Rack::Attack::Allow2Ban.filter
التي تبحث عن الخيارات الموجودة في التعريف وتستخدمها (التي تطابق الاسم المحدد).
وهذا له المزايا التالية:
throttle
العادية ومتوافقة معها: # Compare:
def_allow2ban ( 'login' , limit : 5 , period : 1 . minute , bantime : … )
allow2ban ( 'login' , discriminator ) do
# Return truthy value to increment counter
end
# allow2ban returns true if counter reaches limit
throttle ( 'logins/email' , limit : 5 , period : 1 . minute ) do | req |
discriminator . ( req )
end
limit
period
المألوفة بدلاً من خيارات maxretry
و findtime
، على التوالي.Fail2Ban.filter
القياسي. هذا أمر اختياري تماما. إذا اخترت عدم تعريفها بهذه الطريقة، فسوف يستمر عرض مفاتيح عداد Fail2ban وقيمته؛ لن يتمكن من العثور على قاعدة المطابقة، وبالتالي لن يتمكن من إظهار الحد الأقصى أو مجموعة الوقت لمفتاح العداد هذا. لذلك بدلاً من إظهار الحد المسموح به لـ allow2ban('login')
كما هو موضح في لقطة الشاشة أعلاه، سيعود فقط إلى إظهار القليل الذي يمكن أن يظهره حول هذا المفتاح:
تم اختبار ذلك من خلال تعيين Rack::Attack.cache.store
على مثيل:
Redis::Store
من جوهرة متجر redis الرائعة. (الذي يستخدمه ActiveSupport::Cache::RedisStore
(من جواهر redis-activesupport/redis-rails))ActiveSupport::Cache::RedisCacheStore
(مقدم من Rails 5.2+) نرحب بتقارير الأخطاء وطلبات السحب على GitHub على https://github.com/TylerRick/rack_attack_admin.