Vous permet de voir l’état actuel de toutes les limitations et interdictions. Supprimez les clés/interdictions existantes. Ajoutez manuellement des interdictions.

Inspiré par : https://www.backerkit.com/blog/building-a-rackattack-dashboard/
Ajoutez cette ligne au Gemfile de votre application :
gem 'rack_attack_admin' Ajoutez cette ligne au config/routes.rb de votre application :
mount RackAttackAdmin :: Engine , at : '/admin/rack_attack' Accédez à http://localhost:3000/admin/rack_attack dans votre navigateur !
Vous pouvez également utiliser la commande de ligne de commande en lecture seule fournie, rake rack_attack_admin:watch au lieu de l'interface 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 |
+----------------------------------------------------------------------------------+---------------+--------------------+
Afin de permettre à vos règles Fail2Ban/Allow2Ban d'être introspectées par cette application, vous devez les définir légèrement différemment de ce que la documentation Rack::Attack en amont vous indique de les définir :
Si vous avez un filtre Allow2Ban dans une liste de blocage comme celle-ci :
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, vous pouvez le remplacer par cette définition équivalente :
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 enregistrez votre configuration dans un hachage (par nom, sans discriminateur), de la même manière que throttle .
Les méthodes fail2ban / allow2ban sont simplement des wrappers pour Rack::Attack::Allow2Ban.filter qui recherchent et utilisent les options de la définition (qui correspondent au nom donné).
Cela présente les avantages suivants :
throttle classiques : # 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 et period au lieu des options maxretry et findtime , respectivement.Fail2Ban.filter . Ceci est complètement facultatif. Si vous choisissez de ne pas les définir de cette façon, les clés et la valeur de votre compteur fail2ban seront toujours affichées ; il ne pourra tout simplement pas trouver la règle de correspondance et ne pourra donc pas afficher la limite ou la tranche de temps pour cette clé de compteur. Ainsi, au lieu d'afficher la limite pour allow2ban('login') comme le montre la capture d'écran ci-dessus, il se contentera d'afficher le peu qu'il peut montrer sur cette clé :

Cela a été testé avec Rack::Attack.cache.store défini sur une instance de :
Redis::Store du fantastique joyau redis-store. (Qui est utilisé par ActiveSupport::Cache::RedisStore (à partir des gems redis-activesupport/redis-rails))ActiveSupport::Cache::RedisCacheStore (fourni par Rails 5.2+) Les rapports de bogues et les demandes d'extraction sont les bienvenus sur GitHub à l'adresse https://github.com/TylerRick/rack_attack_admin.