2009-12-13 25 views
8

我不斷從服務器上得到以下兩個錯誤,我認爲他們只是尋找潛在目標的機器人,但有誰明確知道爲什麼我得到這些?我使用SslRequirement插件確保登錄/註冊頁面的所有命中都重定向到SSL,因此所有這些對root用戶的奇怪https請求都應該重定向到常規http。我不斷收到QUIT和CONNECT HTTP方法發送到我的服務器,它們是什麼意思?


一個的ActionController :: UnknownHttpMethod發生在應用程序#指數: 辭職,接受的HTTP方法是GET,HEAD,PUT,POST,刪除和選項

在/ usr/local/lib目錄/紅寶石/寶石/ 1.9.1 /寶石/ ActionPack的-2.3.4/LIB/action_controller/request.rb:35:在`REQUEST_METHOD」

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

甲ActionController的:: UnknownHttpMethod發生在應用程序#索引中: CONNE CT,可接受的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:在`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

回答

13

HTTP代理服務器使用CONNECT命令來指示客戶端只想將套接字直接連接到另一臺服務器;這通常用於通過HTTP代理隧道傳輸TLS,但可用於幾乎任何協議的隧道傳輸。

QUIT不是HTTP命令,但它是一個SMTP command。您可能正在從正在嘗試查找用於發送垃圾郵件的開放中繼的bot中獲取這些命令;它試圖弄清楚你是否有一個開放的SMTP中繼,或者是一個允許CONNECT命令的開放式HTTP代理,它也可以用來傳輸SMTP流量。

所以,你可能剛剛被一個垃圾郵件僵屍網絡試圖找到開放式中繼。我的建議是儘早放棄這些請求,而不用擔心。

+1

我們應該如何阻止這些來自我們的應用程序的請求。我的應用程序位於slicehost中的一個切片中。 – Anand 2010-11-12 02:35:05

+1

@lakshmanan我建議問一個關於如何阻止這些來自你的應用的請求的單獨問題,以及你有什麼樣的設置(任何反向代理,Web服務器,應用服務器等)的詳細信息。您在評論中沒有提供足夠的細節以幫助我,而且我可能不熟悉您的設置的元素;一個新的問題會給你更好的答案。隨意鏈接到這個問題的上下文爲什麼你想要放棄這些連接。 – 2010-11-12 16:48:04

0
# 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

0

我只注意到了幾個嘗試連接到我的服務器如下,我們看到它有一個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地址,我發現,搜索在互聯網上事情的搜索引擎。不是黑客試圖打破本身。 (有意圖不是邪惡的,看來。)我想他們檢查的一些應用程序必須瞭解QUIT。所以作爲一個機器人,有意義的是,你會想要嘗試一下看起來像奇怪的命令,如CONNNECT和QUIT。即使這些命令不是官方的HTTP命令,應用程序可以支持的命令也沒有真正的限制。

如果你的應用程序不理解這些方法,那麼什麼都不會發生,所以你不應該打擾太多這些。

如果你的應用程序接收到這些方法,那麼你可能想在開始時寫一些東西來獲取方法,並比較GET和POST(以及其他支持的東西,比如DELETE和PUT),如果它們不匹配其中,然後回覆405錯誤代碼:「方法不允許」。

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

如果你不能改變你的應用程序,你不知道它是否能以一個CONNECT/QUIT命中反應,那麼你可以考慮使用一個設置,如針對mod_security的Apache2的。

0

根據jturkel在https://gist.github.com/remvee/600569。 在用於非http操作的Rails 3.2中,我在config/application.rb的末尾添加了以下內容並解決了退出的問題。

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