Rack-атака и фильтрация Allow2Ban в rails 4

Я реализую Rack-атаку Kickstarter в своем приложении для рельсов.

Фильтрация белого/черного списка работает правильно, но у меня возникают проблемы с использованием Allow2Ban для блокировки IP-адресов, которые забивают мою страницу входа (Devise). Примечание: я тестирую это локально и удалил локальный хост из белого списка.

# Lockout IP addresses that are hammering your login page.
# After 3 requests in 1 minute, block all requests from that IP for 1 hour.
Rack::Attack.blacklist('allow2ban login scrapers') do |req|
  # `filter` returns false value if request is to your login page (but still
  # increments the count) so request below the limit are not blocked until
  # they hit the limit.  At that point, filter will return true and block.
  Rack::Attack::Allow2Ban.filter(req.ip, :maxretry => 3, :findtime => 1.minute, :bantime => 1.hour) do
    # The count for the IP is incremented if the return value is truthy.
    req.path == '/sign_in' and req.post?
  end
end

В документации Rack-attack четко указано, что кэширование требуется для регулирования функциональности, т.е.:

Rack::Attack.throttle('req/ip', :limit => 5, :period => 1.second) do |req| )

, но это не указано для Allow2Ban. Кто-нибудь знает, требуется ли кеш для Allow2Ban, или я неправильно реализую код выше на странице входа в Devise


person dmt2989    schedule 28.03.2014    source источник
comment
поскольку для настроенного вами фильтра, вероятно, существует общее состояние, я предполагаю, что вам нужно включить кеширование, чтобы проверить это в разработке. ты пробовал, прежде чем спрашивать?   -  person phoet    schedule 29.03.2014
comment
Кстати, требует ли функциональность атаки на стойку установку некоторых утилит Linux (fail2ban и т. д.) на сервер?   -  person bmalets    schedule 02.08.2015


Ответы (1)


Да, Allow2Ban и Fail2Ban определенно нуждаются в чате (в https://github.com/kickstarter/rack-attack/blob/master/lib/rack/attack/fail2ban.rb можно посмотреть как и почему). Кстати. Я предлагаю использовать Redis в качестве кеша, потому что он гарантирует, что ваше приложение заблокирует IP-адрес, даже если вы используете более одного узла приложения. Если вы используете кеш Rails в сценарии узла с несколькими приложениями, ваши фильтры будут управляться для каждого экземпляра, что, как я предполагаю, не то, что вы хотели бы.

person Günther    schedule 24.02.2016