讓您查看所有限制和禁令的當前狀態。刪除現有的密鑰/禁令。手動新增禁令。
靈感來源: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
而不是 Web 介面:
+-------------------------------+--------------------+
| 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
命令更相似且一致的 API 和選項: # 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-store gem。 (由ActiveSupport::Cache::RedisStore
使用(來自 redis-activesupport/redis-rails gems))ActiveSupport::Cache::RedisCacheStore
( Rails 5.2+ 提供) 歡迎在 GitHub 上提交錯誤報告和拉取請求:https://github.com/TylerRick/rack_attack_admin。