Я продолжаю получать HTTP-методы QUIT и CONNECT, отправляемые на мой сервер, что они означают?

Я продолжаю получать две следующие ошибки с моего сервера, я предположил, что это просто боты, ищущие потенциальные цели, но кто-нибудь знает конкретно, почему я получаю их? Я использую плагин SslRequirement, чтобы убедиться, что все обращения к странице входа/регистрации перенаправляются на SSL, поэтому все эти странные https-запросы к root должны быть просто перенаправлены на обычный http.


Ошибка ActionController::UnknownHttpMethod в application#index: quit, принятые HTTP-методы: get, head, put, post, delete и options

/usr/local/lib/ruby/gems/1.9.1/gems/actionpack-2.3.4/lib/action_controller/request.rb:35:in `request_method'

  • ПУТЬ_ИНФО: /
  • REMOTE_ADDR: 99.19.208.249
  • УДАЛЕННЫЙ_ПОРТ: 6376
  • REQUEST_METHOD: ПОДКЛЮЧИТЬСЯ
  • REQUEST_URI : /
  • ПОРТ_СЕРВЕРА: 443
  • СЕРВЕР_ПРОТОКОЛ: HTTP/1.0
  • СЕРВЕР_ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ: Apache

Ошибка ActionController::UnknownHttpMethod в application#index: CONNECT, принятые HTTP-методы: get, head, put, post, delete и options

/usr/local/lib/ruby/gems/1.9.1/gems/actionpack-2.3.4/lib/action_controller/request.rb:35:in `request_method'

  • HTTPS: вкл.
  • HTTP_X_FORWARDED_PROTO: https
  • ПУТЬ_ИНФО: /
  • УДАЛЕННЫЙ_АДРЕС: 91.209.196.76
  • УДАЛЕННЫЙ_ПОРТ: 50751
  • REQUEST_METHOD: выйти
  • REQUEST_URI : /
  • ПОРТ_СЕРВЕРА: 443
  • СЕРВЕР_ПРОТОКОЛ: HTTP/0.9

person go minimal    schedule 13.12.2009    source источник


Ответы (5)


Команда CONNECT используется прокси-серверами HTTP, чтобы указать, что клиент хочет просто подключить сокет напрямую к другому серверу; это обычно используется для туннелирования TLS через прокси-сервер HTTP, но может использоваться для туннелирования практически любого протокола.

QUIT — это не HTTP-команда, а SMTP-команда. Возможно, вы получаете эти команды от бота, который пытается найти открытые ретрансляторы для рассылки спама; он пытается выяснить, есть ли у вас открытый ретранслятор SMTP или открытый прокси-сервер HTTP, который позволяет использовать команду CONNECT, которую также можно использовать для туннелирования SMTP-трафика.

Так что, скорее всего, вы просто попали под спам-ботнет, пытающийся найти открытые ретрансляторы. Мой совет — отбрасывать такие запросы как можно раньше и не беспокоиться о них.

person Brian Campbell    schedule 19.01.2010
comment
Как мы должны предотвратить попадание этих запросов в наши приложения. мое приложение находится на слайсе в slicehost. - person Anand; 12.11.2010
comment
@lakshmanan Я бы порекомендовал задать отдельный вопрос о том, как предотвратить попадание этих запросов в ваше приложение, с подробностями о том, какие у вас настройки (любые обратные прокси, веб-серверы, серверы приложений и т. д.). Вы не предоставляете достаточно подробностей в своем комментарии, чтобы я мог вам помочь, и я, возможно, не знаком с элементами вашей настройки; новый вопрос даст вам лучшие ответы. Не стесняйтесь ссылаться на этот вопрос, чтобы понять, почему вы хотели бы отказаться от этих соединений. - person Brian Campbell; 12.11.2010

ПОДКЛЮЧЕНИЕ: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.9

QUIT обычно означает «закрыть соединение».

person Amber    schedule 13.12.2009

# Avoid annoying ActionController::UnknownHttpMethod exceptions like:
#
#   ActionController::UnknownHttpMethod) "CONNECT, accepted HTTP methods are get, head, put, post, delete, and options"
#
# Install this file in app/metal and these requests will receive a 405
# "Method Not Allowed" status and will be logged under `info'.
class IgnoreUnknownHttpMethod
  def self.call(env)
    [
     if ActionController::Request::HTTP_METHODS.include?(env["REQUEST_METHOD"].downcase)
       404 # Not Found
     else
       Rails.logger.info("Ignoring unknown HTTP method; #{env.inspect}")

       405 # Method Not Allowed
     end, {"Content-Type" => "text/plain"}, []]
  end
end

Кредит https://gist.github.com/remvee/600569

person Mark Locklear    schedule 17.10.2014

Я только что заметил несколько попыток подключения к моим серверам, как показано ниже, мы видим, что это заканчивается выходом...

198.20.87.98 - - [22/Dec/2015:21:43:42 -0800] "GET / HTTP/1.1" 444 5666 "-" "-"
198.20.87.98 - - [22/Dec/2015:21:43:42 -0800] "GET /robots.txt HTTP/1.1" 444 5666 "-" "-"
198.20.87.98 - - [22/Dec/2015:21:43:42 -0800] "GET /sitemap.xml HTTP/1.1" 444 5666 "-" "-"
198.20.87.98 - - [22/Dec/2015:21:43:58 -0800] "quit" 405 5461 "-" "-"
  • Кроме того, мой сервер возвращает код 444, что является недопустимым кодом HTTP. Это означает НЕТ ОТВЕТА, и я делаю это, потому что их "Строка агента" пуста.

Глядя на IP-адрес, я нашел поисковую систему, которая ищет вещи в Интернете. Не хакер, пытающийся взломать сам по себе. (Похоже, это не зло.) Я полагаю, что некоторые из проверяемых приложений должны понимать QUIT. Поэтому, как роботу, имеет смысл попробовать то, что в противном случае выглядело бы странными командами, такими как CONNNECT и QUIT. Не существует реальных ограничений на команды, которые может поддерживать приложение, даже если эти команды не являются официальными HTTP-командами.

Если ваше приложение не понимает эти методы, то ничего не произойдет, поэтому вам не следует слишком беспокоиться об этом.

Если ваше приложение получает эти методы, вы можете написать что-нибудь в начале, чтобы получить метод и сравнить его с GET и POST (и с чем-либо еще, что вы поддерживаете, например, DELETE и PUT), и если это не соответствует ни одному из них, тогда ответьте с кодом ошибки 405: «Метод не разрешен».

http://tools.ietf.org/html/rfc7231#section-6.5.5

Если вы не можете изменить свое приложение и не уверены, может ли оно отреагировать на нажатие CONNECT/QUIT, вы можете изучить возможность использования такой настройки, как mod_security для Apache2.

person Alexis Wilke    schedule 28.12.2015

согласно jturkel на https://gist.github.com/remvee/600569. В Rails 3.2 для действий, отличных от http, я добавил следующее в конец config/application.rb и решил проблему выхода.

# silence ActionController::UnknownHttpMethod exceptions
ActionDispatch::ExceptionWrapper.rescue_responses.merge!( 'ActionController::UnknownHttpMethod' => :method_not_allowed )
person jaambros    schedule 08.11.2017