2016-01-31 9 views
1

Его мое первое взаимодействие с 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 
+0

Вы хотите, чтобы fail2ban, а не черный список? –

+0

@FrederickCheung havent попробовал хотя, не могли бы вы дать мне пример – Abhinay

+0

Они находятся в стойке. Readme –

ответ

0

@abhinay Пожалуйста, вы можете выяснить, какие запросы успешны, что вы ожидали бы быть заблокирован ?

Если вы хотите заблокировать весь запрос с IP-адреса, который сделал несколько PHP-запросов, вам нужен Fail2Ban, например, @frederickcheung.

В файлах readme и wiki есть примеры.

+0

Просто обновите вопрос с помощью кода из примера Fail2Ban, но, к сожалению, это также не работает. – Abhinay

+0

Кроме того, я хотел бы понять, почему четвертый блок в коде 'Rack :: Attack.blacklist ('Stupid IP for PHP') do..' doesnt работает, если он просто ожидает значения' true', чтобы продолжить. Пожалуйста, поправьте меня, если я ошибаюсь – Abhinay

 Смежные вопросы

  • Нет связанных вопросов^_^