让您查看所有限制和禁令的当前状态。删除现有的密钥/禁令。手动添加禁令。
灵感来源:https://www.backerkit.com/blog/building-a-rackattack-dashboard/
将此行添加到应用程序的Gemfile
中:
gem 'rack_attack_admin'
将此行添加到应用程序的config/routes.rb
中:
mount RackAttackAdmin :: Engine , at : '/admin/rack_attack'
在浏览器中访问 http://localhost:3000/admin/rack_attack!
您还可以使用提供的只读命令行命令rake rack_attack_admin:watch
而不是 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 |
+----------------------------------------------------------------------------------+---------------+--------------------+
为了允许此应用程序内省您的 Fail2Ban/Allow2Ban 规则,您的定义必须与上游 Rack::Attack 文档告诉您定义它们的方式略有不同:
如果您的阻止列表中有一个 Allow2Ban 过滤器,如下所示:
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
,您可以将其更改为等效定义:
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
将您的配置保存在散列中(按名称,其中不带鉴别器),与throttle
非常相似。
fail2ban
/ allow2ban
方法只是Rack::Attack::Allow2Ban.filter
的包装器,用于查找并使用定义中的选项(与给定名称匹配)。
这样做有以下优点:
throttle
命令更相似且一致的 API 和选项: # 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
和period
选项来代替maxretry
和findtime
选项。Fail2Ban.filter
语法那样将鉴别器插入字符串中。这是完全可选的。如果您选择不以这种方式定义它们,它仍然会显示您的fail2ban计数器键和值;它只是无法找到匹配规则,因此无法显示该计数器键的限制或时间段。因此,它不会像上面的屏幕截图中显示的那样显示allow2ban('login')
的限制,而是会回退到仅显示该密钥可以显示的内容:
这已经通过设置为以下实例的Rack::Attack.cache.store
进行了测试:
Redis::Store
来自神奇的 redis-store gem。 (由ActiveSupport::Cache::RedisStore
使用(来自 redis-activesupport/redis-rails gems))ActiveSupport::Cache::RedisCacheStore
(由 Rails 5.2+ 提供) 欢迎在 GitHub 上提交错误报告和拉取请求:https://github.com/TylerRick/rack_attack_admin。