Позволяет увидеть текущее состояние всех ограничений и запретов. Удалить существующие ключи/баны. Добавляйте баны вручную.
Вдохновлено: 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
maxretry
и 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.