Позволяет увидеть текущее состояние всех ограничений и запретов. Удалить существующие ключи/баны. Добавляйте баны вручную.

Вдохновлено: 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 )
endmaxretry и findtime можно использовать знакомые параметры limit и period соответственно.Fail2Ban.filter . Это совершенно необязательно. Если вы решите не определять их таким образом, он все равно будет отображать ключи и значение вашего счетчика Fail2ban; он просто не сможет найти правило сопоставления и, следовательно, не сможет показать, каков предел или интервал времени для этого ключа счетчика. Таким образом, вместо того, чтобы показывать ограничение 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.