Le permite ver el estado actual de todas las limitaciones y prohibiciones. Eliminar claves/prohibiciones existentes. Agregar prohibiciones manualmente.
Inspirado por: https://www.backerkit.com/blog/building-a-rackattack-dashboard/
Agregue esta línea al Gemfile
de su aplicación:
gem 'rack_attack_admin'
Agregue esta línea al config/routes.rb
de su aplicación:
mount RackAttackAdmin :: Engine , at : '/admin/rack_attack'
¡Vaya a http://localhost:3000/admin/rack_attack en su navegador!
También puede utilizar el comando de línea de comandos de solo lectura proporcionado, rake rack_attack_admin:watch
en lugar de la interfaz 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 |
+----------------------------------------------------------------------------------+---------------+--------------------+
Para permitir que esta aplicación introspeccione sus reglas Fail2Ban/Allow2Ban, debe definirlas de manera ligeramente diferente a como la documentación anterior de Rack::Attack le indica que las defina:
Si tiene un filtro Allow2Ban en una lista de bloqueo como esta:
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
, puedes cambiarlo a esta definición equivalente:
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
guarda su configuración en un hash (por nombre, sin discriminador), de la misma manera que lo hace throttle
.
Los métodos fail2ban
/ allow2ban
son simplemente contenedores para Rack::Attack::Allow2Ban.filter
que buscan y usan las opciones de la definición (que coincide con el nombre de pila).
Esto tiene las siguientes ventajas:
throttle
habituales: # 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
y period
en lugar de las opciones maxretry
y findtime
, respectivamente.Fail2Ban.filter
. Esto es completamente opcional. Si elige no definirlos de esta manera, aún mostrará las claves y el valor del contador de fail2ban; simplemente no podrá encontrar la regla coincidente y, por lo tanto, no podrá mostrar cuál es el límite o el período de tiempo para esa clave de contador. Entonces, en lugar de mostrar el límite para allow2ban('login')
como se muestra en la captura de pantalla anterior, volverá a mostrar solo lo poco que puede mostrar sobre esa clave:
Esto se ha probado con Rack::Attack.cache.store
configurado en una instancia de:
Redis::Store
de la fantástica joya redis-store. (Que es utilizado por ActiveSupport::Cache::RedisStore
(de las gemas redis-activesupport/redis-rails))ActiveSupport::Cache::RedisCacheStore
(proporcionado por Rails 5.2+) Los informes de errores y las solicitudes de extracción son bienvenidos en GitHub en https://github.com/TylerRick/rack_attack_admin.