बिना किसी अनुरोध या उपयोगकर्ता एजेंट के साथ हमारे लॉग पर 408 त्रुटियां प्राप्त करना


36

मुझे अपने अपाचे लॉग में इस तरह दिखने वाले कई अनुरोध मिल रहे हैं

www.example.com:80 10.240.1.8 - - [06/Mar/2013:00:39:19 +0000] "-" 408 0 "-" "-" -

लगता है कोई अनुरोध नहीं है और कोई उपयोगकर्ता एजेंट नहीं है। क्या किसी ने इसे पहले कभी देखा है?


जवाबों:


29

क्या आप किसी भी तरह से अपने वेब सर्वर को अमेज़न पर एक इलास्टिक लोड बैलेंसर के पीछे चला रहे हैं?

ऐसा लगता है कि वे अपने स्वास्थ्य की जाँच के कारण 408 प्रतिक्रियाएँ उत्पन्न करते हैं

उस फोरम थ्रेड से कुछ समाधान:

  • RequestReadTimeout header=0 body=0

    यह 408 प्रतिक्रियाओं को निष्क्रिय कर देता है अगर कोई अनुरोध बार करता है।

  • ELB स्वास्थ्य जांच को एक अलग पोर्ट में बदलें।
  • ELB IP पते के लिए लॉगिंग को अक्षम करें:

    SetEnvIf Remote_Addr "10\.0\.0\.5" exclude_from_log
    CustomLog logs/access_log common env=!exclude_from_log
    

और इस ब्लॉग पोस्ट से :

  • 60 या उससे अधिक होने के लिए अपने अनुरोध का समय समायोजित करें।

2
मेरी समझ में यह आपको स्क्लोरोसिस के हमले के लिए बेनकाब करेगा, एक सभ्य reqtimeout है अपाचे का उपयोग कर किसी के लिए आजकल उपयोगी लगता है
neofutur

यदि आप ईएलबी से पीछे हैं, तो धीमेपन की समस्या नहीं है।
लदादादा

2
RequestReadTimeout header=0 body=0सभी एक साथ टाइमआउट पढ़ने के लिए अनुरोध को अक्षम करेगा, मैं यह सलाह नहीं
दूंगा

@Ladadada मुझे लगता है कि आपको अभी भी धीमी लोरिस सुरक्षा की आवश्यकता है क्योंकि http एक tcp प्रॉक्सी के रूप में काम करता है, https अगर offloaded tcp के बजाय http अनुरोधों को अग्रेषित करेगा, हालांकि धीमे कनेक्शन के लिए कोई फ़िल्टर नहीं हैं, तो प्रतिक्रिया के लिए केवल एक समय समाप्ति है।
mikejonesey

@Ladadada आप गलत हैं, ELB या ALB धीमेपन के खिलाफ मदद करने के लिए कुछ भी नहीं करता है और यह अधिकांश वेब सर्वर को प्रभावित करेगा, मेरे AWS प्रश्न और मुद्दे को यहां देखें: फ़ोरम .aws.amazon.com
क्रिस्टियानो कोएलो

9

कुछ पोर्ट से कनेक्ट हो रहा है और फिर कभी डेटा नहीं भेज रहा है। HTTP 408 एक "टाइमआउट" त्रुटि है। यहाँ एक अच्छा राइटअप है: http://www.checkupdown.com/status/E408.html


1
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं।
कास्परड

सिर्फ 100+ आईपी की एक सूची देखने के बाद 408s प्राप्त कर रहे हैं उनके खाली अनुरोधों पर यह ध्यान देने योग्य है कि अधिकांश मुख्य भूमि चीन से हैं और मुझे संदेह है कि समस्या मुख्य रूप से भीड़ से संबंधित है। कनेक्शन सेटअप के परिणामस्वरूप भीड़ सफल हो रही है लेकिन अनुरोध हेडर नहीं भेजा जा रहा है। चीन से क्रॉस बोर्डर बैंडविड्थ बहुत अधिक है और गैर मुख्य भूमि कनेक्शन भी खाली आ रहे हैं जो ब्राजील, यूरोप और ग्रामीण अमेरिका से बिखरे हुए थे जो कि वेस्ट कोस्ट यूएस सर्वर तक पहुंचने में समान रूप से समान मुद्दे हैं।
ClearCrescendo

8

यहां पहले से ही कुछ अच्छे उत्तर हैं, लेकिन मैं एक अतिरिक्त नोट को खतरे में डालना चाहूंगा जिसे विशेष रूप से संबोधित नहीं किया गया है। पहले से उल्लेख किए गए पिछले टिप्पणीकारों में से कई, 408 एक समयबाह्य इंगित करता है; और ऐसी बहुत सारी परिस्थितियाँ हैं जिनमें किसी वेब सर्वर पर टाइमआउट होता है।

उस के साथ, विभिन्न प्रकार के मामलों में 408 त्रुटियां उत्पन्न हो सकती हैं, जहां आपके सर्वर को कारनामों के लिए स्कैन किया जा रहा है। ऐसे मामलों में ग्राहक शायद ही कभी एक उपयोगकर्ता एजेंट को पेश करते हैं और अक्सर कनेक्शन को अचानक समाप्त कर देते हैं, जिसके परिणामस्वरूप उस कनेक्शन के लिए गर्भपात बंद हो जाता है जो 408 त्रुटि उत्पन्न कर सकता है।

उदाहरण के लिए, मान लें कि मैं एक खतरनाक हैकर हूं, जो उन कंप्यूटरों के लिए इंटरनेट को स्कैन कर रहा है जो अभी भी POODLE भेद्यता के लिए असुरक्षित हैं। जैसे, मैंने एक स्क्रिप्ट लिखी है जो सर्वरों को खोजने के लिए आईपी पतों के बड़े हिस्से के लिए कनेक्शन खोलता है जो एसएसएल संस्करण 3 को स्वीकार करेगा - बाद में मैं उस सूची का उपयोग विशेष रूप से अच्छे कारनामे को स्कैन करने के लिए करूंगा। यह पहली स्क्रिप्ट जो SSLv3 की जाँच करने के लिए Opensl का उपयोग करके एक कनेक्शन स्थापित करती है, जैसे:

openssl s_client -connect [IP]:443 -ssl3

यह आदेश, अपाचे के कई विन्यासों में, 408 संदेश में परिणाम देगा जैसा आपने वर्णित किया है। मेरे दो सर्वरों पर इस कमांड को करने से एक्सेस लॉग में प्रवेश होता है:

<remote IP address>  - - [04/Nov/2015:08:09:33 -0500] "-" 408 - "-" "-"

मैं यह भी स्पष्ट करना चाहता था कि ऐसी स्थिति में भी जब ओपी किसी भी प्रकार के लोड संतुलन का उपयोग नहीं कर रहा था, 408 त्रुटियां विभिन्न प्रकार की परिस्थितियों में हो सकती हैं - कुछ दुर्भावनापूर्ण, कुछ क्लाइंट के साथ परेशानी, और कुछ सर्वर के साथ परेशानी का संकेत दे रही हैं। (मैंने ओपी द्वारा प्रदान किए गए लॉग में देखा कि एक स्थानीय आईपी को रिमोट आईपी के रूप में इंगित किया गया था, लेकिन ओपी ने विशेष रूप से लोड बैलेंसर के उपयोग का उल्लेख नहीं किया था, इसलिए मुझे यकीन नहीं था कि ओपी ने प्रयोजनों के लिए बस एक गैर-परिवर्तनीय आईपी का उपयोग किया था प्रदर्शन का, जैसा कि उन्होंने यूआरएल के साथ किया था)

वैसे भी, भले ही मेरी पोस्ट अगर जाहिर तौर पर ओपी की मदद करने के लिए दिन में बहुत देर हो जाती है, तो यह उन अन्य लोगों की मदद कर सकता है जो उन सभी समयबद्ध त्रुटियों के समाधान की तलाश में यहां पहुंचते हैं।


6

408 टाइमआउट के विभिन्न कारण हैं। लेकिन एक आधार से शुरू करते हैं कि सब कुछ ठीक है तो किसी समय ये 408 की शुरुआत आपके एक्सेस लॉग में दिखाई दे रही है - यानी 408 0 "-" "-"।

नेट पर कई बिंदुओं की तरह, एक 408 एक कनेक्शन का प्रतिनिधित्व करता है, लेकिन उचित समय के पैमाने में कोई अनुरोध नहीं भेजा जाता है, इसलिए सर्वर 408 के साथ कनेक्शन को छोड़ देता है। एक अभिमानी व्यक्ति ने वास्तव में किसी से इस मुद्दे पर मदद के लिए जवाब दिया - "टाइमआउट का कौन सा हिस्सा आपको समझ नहीं आ रहा है"।

मुझे लगता है कि यह बहुत ही नौसिखिया उत्तर है और वेब-सर्वर सॉफ्टवेयर के साथ कुछ सुरक्षा तरीकों को कैसे काम करता है, यह समझने की कुल कमी दर्शाता है।

तो शुरुआत में, मैं इन 408 को क्यों देख रहा हूं। एक चीज जो हम में से बाकी लोगों के पास होती है, वह यह है कि एक सर्वर को प्रबंधित करना एक बड़ी मात्रा में हमला है जो आपको दैनिक आधार पर प्राप्त होता है। अब, आप इन के बारे में क्या करते हैं? ठीक है: आप उनसे निपटने के लिए अपने चुने हुए सुरक्षा तरीकों को नियुक्त करते हैं, यही बदलाव है।

आइए एक बहुत ही आसान उदाहरण लेते हैं, एक आईपी एड्रेस ड्रॉप करें। एक iptabes फ़ाइल (नियमों.v4) में शामिल है "आपके पास"-ufw-user-input -s 37.58.64.228 -j DROP "है। तो 37.58.64.228 के साथ फ़ायरवॉल आईपी को पहचानता है और कनेक्शन को छोड़ देता है। बहुत सारे कॉन्फ़िगरेशन में आपको पता भी नहीं होगा कि यह दरवाजे पर दस्तक दे चुका है।

अब एक और अधिक उन्नत उदाहरण लेने देता है, कुछ मानदंडों के आधार पर कनेक्शन को छोड़ें। एक iptabes फ़ाइल (rules.v4) में शामिल है "आपके पास" -एक INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j AROP "। यह अलग है क्योंकि इस iptable रूल में हम कह रहे हैं कि रिक्वेस्ट स्ट्रिंग के पहले 1000 बाइट्स देखें और देखें कि क्या आप "cgi" का सब-स्ट्रिंग पा सकते हैं और यदि आप उस सब-स्ट्रिंग को ढूंढते हैं तो किसी भी तरह से न जाएं इसके अलावा, बस कनेक्शन छोड़ दें।

यहाँ सुरक्षा विधि अच्छी है, लेकिन जहाँ तक आपके लॉग भ्रामक संबंध हैं। 408 0 "-" "-" उत्पन्न सबसे अच्छा अपाचे इन परिस्थितियों में कर सकता है। कनेक्शन बनाया गया था और स्ट्रिंग तुलना नियम को लागू करने के लिए अनुरोध को एक बिंदु तक स्वीकार किया जाना था, जो अंततः 408 में परिणाम देता है क्योंकि आपके नियम ने कनेक्शन को छोड़ने के लिए मानदंडों को पूरा किया। इसलिए, हमारे छोटे नौसिखिए डार्लिंग अधिक गलत नहीं हो सकते यदि वे कोशिश करते हैं। एक कनेक्शन बनाया गया था और एक अनुरोध प्राप्त हुआ था (आपको इन परिस्थितियों में इसकी दृश्यता नहीं होगी)। हालांकि एक 408 उत्पन्न होता है, यह 'टाइमआउट' नहीं है; आपके सर्वर ने आपके फ़ायरवॉल नियम के साथ अनुरोध किए जाने के बाद बस कनेक्शन को छोड़ दिया। कई अन्य नियम हैं, जो समान 408 स्थिति पैदा करेंगे। डॉन'

आदर्श रूप से एक और अपाचे जनरेट किया हुआ एरर कोड होगा, उदाहरण के लिए - '499' जिसका मतलब होगा 'सर्वर रीड योर रिक्वेस्ट एंड डिसाइड इट जस्ट बॉनट बी बीटर्ड एन एंटरटेनिंग यू - सोद ऑफ हाहा'।

नवीनतम वेब-सर्वर सॉफ्टवेयर के साथ आप व्यावहारिक रूप से डॉस हमलों को बाहर कर सकते हैं और भविष्यवाणियों को शामिल करने वाले ब्राउज़रों के नए जीन इस समस्या का कारण नहीं बन सकते हैं जैसा कि कुछ ने सुझाव दिया है।

संक्षेप में, 408 जेनरेट होता है क्योंकि सर्वर ने रिक्वेस्ट का जवाब नहीं दिया है, इसलिए जहां तक ​​क्लाइंट का संबंध है समय समाप्त हो गया है, जब वास्तव में सर्वर ने रिक्वेस्ट पढ़ी थी, लेकिन टाइमआउट के इंतजार के अलावा अन्य कारणों से कनेक्शन को छोड़ दिया गया था एक दरख्वास्त।


2
लेकिन यह कनेक्शन क्यों छोड़ दिया? हम देख रहे हैं कि यह सर्वर लॉग है, क्लाइंट लॉग नहीं।
एरिक रॉबर्टसन

5

हमारे पास यह बहुत समस्या थी, और काफी समय से इस पर हैरान था। सबसे अच्छा समाधान जो हम साथ आए थे, वह एडब्ल्यूएस समर्थन की ईएलबी टीम द्वारा सुझाया गया था। यह अनिवार्य रूप से यह सुनिश्चित करने पर टिका है कि आपके httpd सर्वर की टाइमआउट सेटिंग्स आपकी ELB idle timeoutसेटिंग (जो कि 60 वर्ष से अधिक की चूक) से अधिक हैं।

  • सुनिश्चित करें कि आपका अपाचे Timeoutनिर्देश मूल्य idle timeoutआपके ईएलबी की सेटिंग से दोगुना है ।
  • KeepAliveसुविधा चालू करें , यह सुनिश्चित करें कि MaxKeepAliveRequestsबहुत बड़ी है (या तो अनंत के लिए या बहुत अधिक है, 2000 की तरह), और वह KeepAliveTimeoutआपके ELS की तुलना में अधिक है idle timeout

हमने पाया कि KeepAlive(और संबद्ध सेटिंग्स) सेटिंग ने विशेष रूप से 0 तक प्रभावी रूप से 408 की मात्रा कम कर दी है (हम कुछ देखते हैं, लेकिन बहुत कम)।


दुर्भाग्य से, मैं इलास्टिक बीनस्टॉक का उपयोग कर रहा हूं। मेरे पास ये विकल्प उपलब्ध नहीं हैं।
इरिक रॉबर्टसन

3

मेरे पास AWS इलास्टिक लोड बैलेंसर के पीछे यह मुद्दा था। स्वास्थ्य जांच ने लॉग में 408 प्रतिक्रियाओं की एक भयानक मात्रा उत्पन्न की।

एकमात्र समाधान है कि मेरे लिए काम किया है करने के लिए था लोड बैलेंसर के निष्क्रिय समय समाप्त की स्थापना कम अपने से स्वास्थ्य जाँच के रिस्पांस समय समाप्त


0

एक सहकर्मी ने हाल ही में टिप्पणी की कि जब मेरी पिछली पोस्ट ने एक वैध विवरण दिया कि एक सुरक्षा उपाय के साथ 408 का जुड़ाव कैसे हो सकता है, तो इसने कोई समाधान नहीं दिया।

पाइप्ड एक्सेस लॉग मेरा व्यक्तिगत समाधान है।

निम्नलिखित को अधिकांश उबंटू विन्यासों पर आउट-ऑफ-द-बॉक्स काम करना चाहिए, और अन्य अपाचे कॉन्फ़िगरेशन पर न्यूनतम टिंकरिंग के साथ। मैंने PHP को चुना है क्योंकि यह समझना सबसे आसान है। दो स्क्रिप्ट हैं: पहला आपके एक्सेस लॉग पर लिखे गए 408 को रोकता है। दूसरी स्क्रिप्ट सभी 408s को एक अलग लॉग फ़ाइल में भेजती है। किसी भी तरह से परिणाम आपके पहुंच लॉग में 408s नहीं है। यह आपकी पसंद है कि किस स्क्रिप्ट को लागू करना है।

अपने पसंदीदा टेक्स्ट एडिटर का उपयोग करें, मैं नैनो का उपयोग करता हूं। उस फ़ाइल को खोलें जहाँ आपके पास 'LogFormat' और 'CustomLog' निर्देश हैं। सामान्य # के साथ मूल-टिप्पणी करें और निम्नलिखित जोड़ें। आपको नीचे दिए गए फ़ाइल में ये निर्देश मिल सकते हैं।

sudo नैनो / etc / apache2 / साइट्स-उपलब्ध / डिफ़ॉल्ट

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" AccessLogPipe

CustomLog "|/var/log/apache2/PipedAccessLog.php" AccessLogPipe env=!dontlog

नोट: मैं अपने एक्सेस लॉग में छवियों को लॉग नहीं करता। मेरे etc / apache2 / httpd.conf फ़ाइल में मैं लाइन शामिल करता हूँ

SetEnvIfNoCase Request_URI ".(gif)|(jpg)|(png)|(css)|(js)|(ico)$" dontlog

यदि यह आपके लिए कोई दिलचस्पी नहीं है, तो निर्देश env=!dontlogसे हटा दें CustomLog

अब निम्नलिखित PHP लिपियों में से एक बनाएं ( #!/usr/bin/phpदुभाषिया के स्थान का एक संदर्भ है, सुनिश्चित करें कि स्थान आपके सिस्टम के लिए सही है - आप इसे $ प्रांप्ट पर लिखकर कर सकते हैं; whereis php- इसे कुछ इस तरह वापस करना चाहिए php: /usr/bin/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz। देख सकते हैं #!/usr/bin/phpमेरे सेटअप के लिए सही है)।

सुडो नैनो / सवर / लौकी / पचे 2/PededAccessLog.php

#!/usr/bin/php
<?php
  $file = '/var/log/apache2/access.log';
  $no408 = '"-" 408 0 "-" "-"';
  $stdin = fopen ('php://stdin', 'r');
  ob_implicit_flush (true);
  while ($line = fgets ($stdin)) {
    if($line != "") {
      if(stristr($line,$no408,true) == "") {
        file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
      }
    }
  }
?>

सुडो नैनो / सवर / लौकी / पचे 2/PededAccessLog.php

#!/usr/bin/php
<?php
  $file = '/var/log/apache2/access.log';
  $file408 = '/var/log/apache2/408.log';
  $no408 = '"-" 408 0 "-" "-"';
  $stdin = fopen ('php://stdin', 'r');
  ob_implicit_flush (true);
  while ($line = fgets ($stdin)) {
    if($line != "") {
      if(stristr($line,$no408,true) != "") {
        file_put_contents($file408, $line, FILE_APPEND | LOCK_EX);
      }
      else {
        file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
      }
    }
  }
?>

PipedAccessLog.phpस्क्रिप्ट को सहेजने के बाद ; सुनिश्चित करें कि $ प्रांप्ट पर निम्नलिखित को निष्पादित करके रूट का स्वामित्व है।

sudo chown -R root:adm /var/log/apache2/PipedAccessLog.php

PipedAccessLog.phpस्क्रिप्ट पढ़ी की आवश्यकता होगी / लिखने और निष्पादित अनुमतियाँ तो $ प्रॉम्प्ट पर निम्नलिखित निष्पादित।

sudo chmod 755 /var/log/apache2/PipedAccessLog.php

अंत में काम करने के लिए आपको अपाचे सेवा को पुनः आरंभ करने की आवश्यकता है। $ प्रांप्ट पर निम्नलिखित को निष्पादित करें।

sudo service apache2 restart

यदि आपके अपाचे लॉग कहीं और स्थित हैं तो अपने कॉन्फ़िगरेशन के अनुरूप पथ बदलें। शुभ लाभ।


6
यदि 408 की हो रही है, तो हमें यह पता लगाने की आवश्यकता है कि क्यों और उनसे छुटकारा पाएं। बस उन्हें लॉग इन होने से रोकना या उन्हें किसी अन्य फ़ाइल में पाइप करना सर्वर टाइम की बर्बादी है। यह केवल समस्या को छिपाने का कार्य करता है। यह अपने बिस्तर के नीचे सब कुछ shoving द्वारा अपने कमरे की सफाई की तरह है।
एरिक रॉबर्टसन

-2

मैंने पाया है कि संख्या और आवृत्ति दोनों में 408 त्रुटियां बढ़ रही हैं। उनके द्वारा उत्पन्न किए जाने वाले IP पतों की सीमा भी बढ़ रही है (ये अपनी अलग फ़ाइल में लॉग इन हैं)। आईपी ​​के समान समूहों से लगातार 408 प्रदर्शित होने वाले स्पष्ट लॉग पैटर्न भी हैं जो सामान्य सर्वर टाइमआउट के कारण नहीं हैं, जिसमें प्रवर्तक एक चक्रीय पैटर्न में 2 या 3 सेकंड के अलावा कनेक्शन का प्रयास कर रहा है (एक दूसरे से पहले टाइमआउट की प्रतीक्षा नहीं है कनेक्शन प्रयास) मैं इन्हें साधारण DDOS शैली कनेक्शन प्रयासों के रूप में देखता हूं। मेरी राय में, ये प्रवर्तक के लिए एक प्रकार का पुष्टिकरण संदेश है कि एक सर्वर ऑनलाइन है ... फिर वे बाद में विभिन्न उपकरणों के साथ वापस आते हैं .... यदि आप अपना टाइमआउट अंतराल बढ़ाते हैं, तो आप बस उन्हें चलाने के लिए एक बड़ा time_allocation दे रहे हैं उनके हैक कार्यक्रमों के भीतर।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.