すべてのスロットルと禁止の現在の状態を確認できます。既存のキー/禁止を削除します。手動で禁止を追加します。
インスピレーション源: https://www.backerkit.com/blog/building-a-rackattach-dashboard/
次の行をアプリケーションのGemfile
に追加します。
gem 'rack_attack_admin'
次の行をアプリケーションのconfig/routes.rb
に追加します。
mount RackAttackAdmin :: Engine , at : '/admin/rack_attack'
ブラウザで http://localhost:3000/admin/rack_ Attack にアクセスしてください。
Web インターフェイスの代わりに、提供されている読み取り専用コマンドライン コマンドrake rack_attack_admin:watch
を使用することもできます。
+-------------------------------+--------------------+
| 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
maxretry
とfindtime
オプションの代わりに、使い慣れたlimit
オプションとperiod
オプションをそれぞれ使用できます。Fail2Ban.filter
構文のように、識別子を文字列に補間する必要はありません。これは完全にオプションです。この方法で定義しないことを選択した場合でも、fail2ban カウンターのキーと値が表示されます。一致するルールが見つからないだけで、そのカウンタ キーの制限や時間バケットを表示できません。したがって、上のスクリーンショットに示されているように、 allow2ban('login')
の制限を表示する代わりに、そのキーに関して表示できる範囲を少しだけ表示することに戻ります。
これは、 Rack::Attack.cache.store
を次のインスタンスに設定してテストされています。
Redis::Store
。 (これはActiveSupport::Cache::RedisStore
(redis-activesupport/redis-rails gems から) によって使用されます)ActiveSupport::Cache::RedisCacheStore
(Rails 5.2+ によって提供) バグ レポートとプル リクエストは、GitHub (https://github.com/TylerRick/rack_attach_admin) で歓迎されます。