Memungkinkan Anda melihat status terkini dari semua pembatasan dan larangan. Hapus kunci/larangan yang ada. Tambahkan larangan secara manual.
Terinspirasi oleh: https://www.backerkit.com/blog/building-a-rack Attack-dashboard/
Tambahkan baris ini ke Gemfile
aplikasi Anda :
gem 'rack_attack_admin'
Tambahkan baris ini ke config/routes.rb
aplikasi Anda :
mount RackAttackAdmin :: Engine , at : '/admin/rack_attack'
Kunjungi http://localhost:3000/admin/rack_action di browser Anda!
Anda juga dapat menggunakan perintah baris perintah read-only yang disediakan, rake rack_attack_admin:watch
alih-alih antarmuka 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 |
+----------------------------------------------------------------------------------+---------------+--------------------+
Untuk memungkinkan aturan Fail2Ban/Allow2Ban Anda diintrospeksi oleh aplikasi ini, Anda harus mendefinisikannya sedikit berbeda dari dokumentasi hulu Rack::Attack yang memberitahu Anda untuk mendefinisikannya:
Jika Anda memiliki filter Allow2Ban di daftar blokir seperti ini:
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
, Anda dapat mengubahnya ke definisi yang setara ini:
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
simpan konfigurasi Anda dalam hash (berdasarkan nama, tanpa diskriminator di dalamnya), sama seperti yang dilakukan throttle
.
Metode fail2ban
/ allow2ban
hanyalah pembungkus untuk Rack::Attack::Allow2Ban.filter
yang mencari dan menggunakan opsi dari definisi (yang cocok dengan nama yang diberikan).
Ini memiliki keuntungan sebagai berikut:
throttle
biasa: # 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
dan period
yang sudah dikenal, bukan opsi maxretry
dan findtime
.Fail2Ban.filter
standar. Ini sepenuhnya opsional. Jika Anda memilih untuk tidak mendefinisikannya dengan cara ini, kunci dan nilai penghitung fail2ban Anda akan tetap ditampilkan; itu tidak akan dapat menemukan aturan yang cocok, dan oleh karena itu tidak akan dapat menunjukkan batas atau jangka waktu untuk kunci penghitung tersebut. Jadi, alih-alih menampilkan batasan allow2ban('login')
seperti yang terlihat pada gambar di atas, ia akan kembali menampilkan sedikit saja yang dapat ditampilkan tentang kunci tersebut:
Ini telah diuji dengan Rack::Attack.cache.store
yang disetel ke instance:
Redis::Store
dari permata redis-store yang fantastis. (Yang digunakan oleh ActiveSupport::Cache::RedisStore
(dari permata redis-activesupport/redis-rails))ActiveSupport::Cache::RedisCacheStore
(disediakan oleh Rails 5.2+) Laporan bug dan permintaan penarikan diterima di GitHub di https://github.com/TylerRick/rack_action_admin.