ให้คุณเห็นสถานะปัจจุบันของการควบคุมและแบนทั้งหมด ลบคีย์/แบนที่มีอยู่ เพิ่มการแบนด้วยตนเอง
แรงบันดาลใจจาก: 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 ของคุณ คุณต้องกำหนดกฎให้แตกต่างจากเอกสาร Upstream 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
เป็นเพียง wrappers สำหรับ 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
มาตรฐาน นี่เป็นทางเลือกโดยสมบูรณ์ หากคุณเลือกที่จะไม่กำหนดด้วยวิธีนี้ มันจะยังคงแสดงคีย์ตัวนับและค่าที่ล้มเหลว 2ban ของคุณ มันจะไม่สามารถค้นหากฎที่ตรงกันได้ ดังนั้นจะไม่สามารถแสดงขีดจำกัดหรือช่วงเวลาสำหรับคีย์ตัวนับนั้นได้ ดังนั้น แทนที่จะแสดงขีดจำกัดสำหรับ allow2ban('login')
ดังที่แสดงในภาพหน้าจอด้านบน มันจะกลับไปแสดงเพียงสิ่งเล็กๆ น้อยๆ ที่สามารถแสดงได้เกี่ยวกับคีย์นั้น:
สิ่งนี้ได้รับการทดสอบโดยตั้งค่า Rack::Attack.cache.store
เป็นอินสแตนซ์ของ:
Redis::Store
จากอัญมณี Redis-store ที่ยอดเยี่ยม (ซึ่งใช้โดย ActiveSupport::Cache::RedisStore
(จากอัญมณี redis-activesupport/redis-rails))ActiveSupport::Cache::RedisCacheStore
(จัดทำโดย Rails 5.2+) รายงานข้อผิดพลาดและคำขอดึงข้อมูลยินดีต้อนรับบน GitHub ที่ https://github.com/TylerRick/rack_attack_admin