Его мое первое взаимодействие с rack-attack поэтому, пожалуйста, не стесняйтесь указывать на любые ошибки, которые я мог бы иметь в коде. что я пытаюсь занести в черный список тех ip
, которые пытаются получить доступ к таким маршрутам, как "/azenv.php", "/setup.php" etc..
Поскольку эти люди постоянно сталкиваются с каким-то случайным адресом .php
и, вероятно, пытаются сбить сервер, я подумал, что было бы неплохо начать их блокировку но, по-видимому, стойка не блокирует ip
, который пытается получить доступ к указанному выше адресу.rack-attack не blacklists any ip
блок кода, который я пытаюсь запустить это:
class Rack::Attack
Rack::Attack.whitelist('allow from localhost') do |req|
# Requests are allowed if the return value is truthy
'127.0.0.1' == req.ip || '::1' == req.ip || '122.166.130.230' == req.ip
end
Rack::Attack.blacklist("Block Referrer Analytics Spam") do |request|
spammerList = ENV.has_key?("spammerList") ? ENV["spammerList"].split(',') : []
spammerList.find { |spammer| request.referer =~ %r{#{spammer}} }
end
Rack::Attack.blacklist('bad_login_ip') do |req|
(req.post? && req.path == "https://stackoverflow.com/users/sign_in" && IPCat.datacenter?(req.ip))
end
Rack::Attack.blacklist('Stupid IP for PHP') do |req|
if req.path == "/azenv.php" || req.path == "/testproxy.php" || req.path == "//web/scripts/setup.php"
req.ip
end
# req.path.include?(".php")
end
Rack::Attack.throttle('req/ip', limit: 300, period: 5.minutes) do |req|
req.remote_ip if ['/assets', '/check'].any? {|path| req.path.starts_with? path }
end
Rack::Attack.throttle('req/ip', :limit => 5, :period => 20.seconds) do |req|
if req.path == '/users/sign_in' && req.post?
req.ip
end
end
Rack::Attack.throttle("logins/email", :limit => 5, :period => 20.seconds) do |req|
if req.path == '/users/sign_in' && req.post?
# return the email if present, nil otherwise
req.params['email'].presence
end
end
end
несколько блоков от самих их вик. сделайте исправление, если что-то не так.
UPDATE
это кусок кода, который я пытаюсь из приведенного примера:
Rack::Attack.blacklist('fail2ban pentesters') do |req|
# `filter` returns truthy value if request fails, or if it's from a previously banned IP
# so the request is blocked
Rack::Attack::Fail2Ban.filter("pentesters-#{req.ip}", :maxretry => 1, :findtime => 10.minutes, :bantime => 5.minutes) do
# The count for the IP is incremented if the return value is truthy
req.path.include?('/testproxy.php') ||
req.path.include?('azenv.php')
end
end
Вы хотите, чтобы fail2ban, а не черный список? –
@FrederickCheung havent попробовал хотя, не могли бы вы дать мне пример – Abhinay
Они находятся в стойке. Readme –