Hier können Sie den aktuellen Status aller Drosselungen und Sperren sehen. Vorhandene Schlüssel/Verbote löschen. Fügen Sie manuell Verbote hinzu.

Inspiriert von: https://www.backerkit.com/blog/building-a-rackattack-dashboard/
Fügen Sie diese Zeile zur Gemfile Ihrer Anwendung hinzu:
gem 'rack_attack_admin' Fügen Sie diese Zeile zur config/routes.rb Ihrer Anwendung hinzu:
mount RackAttackAdmin :: Engine , at : '/admin/rack_attack' Gehen Sie in Ihrem Browser zu http://localhost:3000/admin/rack_attack!
Sie können anstelle der Weboberfläche auch den bereitgestellten schreibgeschützten Befehlszeilenbefehl rake rack_attack_admin:watch verwenden:
+-------------------------------+--------------------+
| 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 |
+----------------------------------------------------------------------------------+---------------+--------------------+
Damit Ihre Fail2Ban/Allow2Ban-Regeln von dieser App überprüft werden können, müssen Sie sie etwas anders definieren, als in der Upstream-Rack::Attack-Dokumentation angegeben ist, sie zu definieren:
Wenn Sie einen Allow2Ban-Filter in einer Sperrliste wie dieser haben:
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, können Sie es in diese äquivalente Definition ändern:
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 speichern Ihre Konfiguration in einem Hash (nach Namen, ohne Diskriminator), ähnlich wie throttle .
Die Methoden fail2ban / allow2ban sind einfach Wrapper für Rack::Attack::Allow2Ban.filter , die die Optionen aus der Definition (die mit dem angegebenen Namen übereinstimmt) nachschlagen und verwenden.
Dies hat folgende Vorteile:
throttle Befehlen ähnlicher und konsistenter sind: # 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 )
endlimit und period anstelle der Optionen maxretry bzw. findtime verwenden.Fail2Ban.filter -Syntax in eine Zeichenfolge interpolieren. Dies ist völlig optional. Wenn Sie sie nicht auf diese Weise definieren, werden weiterhin die Schlüssel und der Wert Ihres fail2ban-Zählers angezeigt. Es wird einfach nicht in der Lage sein, die passende Regel zu finden, und daher nicht in der Lage sein, das Limit oder den Zeitrahmen für diesen Zählerschlüssel anzuzeigen. Anstatt also das Limit für allow2ban('login') anzuzeigen, wie es im Screenshot oben zu sehen ist, wird nur das wenige angezeigt, was über diesen Schlüssel angezeigt werden kann:

Dies wurde mit Rack::Attack.cache.store getestet, das auf eine Instanz von:
Redis::Store aus dem fantastischen Redis-Store-Juwel. (Wird vom ActiveSupport::Cache::RedisStore verwendet (von redis-activesupport/redis-rails gems))ActiveSupport::Cache::RedisCacheStore (bereitgestellt von Rails 5.2+) Fehlerberichte und Pull-Requests sind auf GitHub unter https://github.com/TylerRick/rack_attack_admin willkommen.