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 )
end
limit
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.