【问题标题】:I keep getting QUIT and CONNECT HTTP methods sent to my server, what do they mean?我不断收到 QUIT 和 CONNECT HTTP 方法发送到我的服务器,它们是什么意思?
【发布时间】:2010-12-26 03:06:24
【问题描述】:

我不断从我的服务器收到以下两个错误,我认为它们只是寻找潜在目标的机器人,但有人知道我为什么会收到这些错误吗?我正在使用 SslRequirement 插件来确保登录/注册页面的所有点击都重定向到 SSL,因此所有这些对 root 的奇怪 https 请求都应该重定向到常规 http。


ActionController::UnknownHttpMethod 发生在 application#index: 退出,接受的 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'

  • PATH_INFO:/
  • REMOTE_ADDR : 99.19.208.249
  • REMOTE_PORT : 6376
  • REQUEST_METHOD:连接
  • REQUEST_URI:/
  • SERVER_PORT : 443
  • SERVER_PROTOCOL:HTTP/1.0
  • SERVER_SOFTWARE:阿帕奇

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
  • PATH_INFO:/
  • REMOTE_ADDR : 91.209.196.76
  • REMOTE_PORT : 50751
  • REQUEST_METHOD:退出
  • REQUEST_URI:/
  • SERVER_PORT : 443
  • SERVER_PROTOCOL:HTTP/0.9

【问题讨论】:

    标签: ruby-on-rails apache http connect quit


    【解决方案1】:

    CONNECT 命令被 HTTP 代理服务器用来指示客户端只想将一个套接字直接连接到另一个服务器;这通常用于通过 HTTP 代理传输 TLS,但也可用于传输几乎任何协议。

    QUIT 不是 HTTP 命令,而是SMTP command。您可能从试图寻找开放中继以发送垃圾邮件的机器人获得这些命令;它试图确定您是否有一个开放的 SMTP 中继,或者一个开放的 HTTP 代理,它允许 CONNECT 命令也可用于隧道 SMTP 流量。

    因此,您可能只是被试图寻找开放中继的垃圾邮件僵尸网络攻击。我的建议是尽早放弃此类请求,不要担心它们。

    【讨论】:

    • 我们应该如何阻止这些请求访问我们的应用程序。我的应用位于 slicehost 中。
    • @lakshmanan 我建议单独询问有关如何阻止这些请求访问您的应用的问题,并详细说明您的设置类型(任何反向代理、Web 服务器、应用服务器等) )。您在评论中没有提供足够的详细信息来帮助您,而且我可能不熟悉您的设置元素;一个新问题将为您提供更好的答案。随意链接到这个问题,了解您为什么要删除这些连接。
    【解决方案2】:

    连接:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.9

    QUIT 通常表示“关闭连接”。

    【讨论】:

      【解决方案3】:
      # 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

      【讨论】:

        【解决方案4】:

        我刚刚注意到有人尝试连接到我的服务器,如下所示,我们看到它以 QUIT 结尾...

        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 地址,我发现了一个在互联网上搜索 things 的搜索引擎。不是试图闯入本身的黑客。 (似乎没有恶意。) 我想他们正在检查的一些应用程序必须理解 QUIT。所以作为一个机器人,你想尝试一些看起来很奇怪的命令是有道理的,比如 CONNNECT 和 QUIT。应用程序可以支持的命令没有真正的限制,即使这些命令不是官方的 HTTP 命令。

        如果你的应用程序不理解这些方法,那么什么都不会发生,所以你不应该为这些烦恼太多。

        如果您的应用程序接收到这些方法,那么您可能希望在开始时编写一些内容来获取该方法并与 GET 和 POST(以及您支持的任何其他方法,例如 DELETE 和 PUT)进行比较,如果它不匹配这些,然后回复 405 错误代码:“方法不允许”。

        https://www.rfc-editor.org/rfc/rfc7231#section-6.5.5

        如果您无法更改您的应用程序并且您不确定它是否可以对 CONNECT / QUIT 命中做出反应,那么您可以考虑使用诸如 mod_security for Apache2 之类的设置。

        【讨论】:

          【解决方案5】:

          根据https://gist.github.com/remvee/600569 的 jturkel。 在 Rails 3.2 的非 http 操作中,我在 config/application.rb 的末尾添加了以下内容并解决了退出问题。

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

          【讨论】:

            猜你喜欢
            • 2011-06-05
            • 1970-01-01
            • 1970-01-01
            • 2022-12-03
            • 2019-11-24
            • 2020-05-12
            • 2018-08-29
            • 2016-07-06
            • 2013-01-14
            相关资源
            最近更新 更多