আমি আমাদের অ্যাপাচি লগগুলিকে দেখতে দেখতে অনেক অনুরোধ করছি
www.example.com:80 10.240.1.8 - - [06/Mar/2013:00:39:19 +0000] "-" 408 0 "-" "-" -
কোনও অনুরোধ এবং কোনও ব্যবহারকারী এজেন্ট নেই বলে মনে হচ্ছে। এর আগে কি কেউ দেখেছেন?
আমি আমাদের অ্যাপাচি লগগুলিকে দেখতে দেখতে অনেক অনুরোধ করছি
www.example.com:80 10.240.1.8 - - [06/Mar/2013:00:39:19 +0000] "-" 408 0 "-" "-" -
কোনও অনুরোধ এবং কোনও ব্যবহারকারী এজেন্ট নেই বলে মনে হচ্ছে। এর আগে কি কেউ দেখেছেন?
উত্তর:
আপনি কি কোনও সুযোগে অ্যামাজনে কোনও ইলাস্টিক লোড ব্যালান্সারের পিছনে আপনার ওয়েব সার্ভারগুলি চালাচ্ছেন?
দেখে মনে হচ্ছে তাদের স্বাস্থ্য পরীক্ষার কারণে তারা 408 টি প্রতিক্রিয়া তৈরি করেছে ।
ফোরামের থ্রেড থেকে কিছু সমাধান:
RequestReadTimeout header=0 body=0
একটি অনুরোধ সময় শেষ হলে এটি 408 টি প্রতিক্রিয়া অক্ষম করে।
ELB আইপি ঠিকানার সাথে এর জন্য লগিং অক্ষম করুন:
SetEnvIf Remote_Addr "10\.0\.0\.5" exclude_from_log
CustomLog logs/access_log common env=!exclude_from_log
এবং এই ব্লগ পোস্ট থেকে :
RequestReadTimeout header=0 body=0
অনুরোধ পড়ার সময়সীমাটি একসাথে নিষ্ক্রিয় করবে, আমি
কিছু বন্দরে সংযুক্ত হচ্ছে এবং তারপরে কখনও ডেটা প্রেরণ করছে না। HTTP 408 একটি "সময়সীমা" ত্রুটি। এখানে একটি ভাল লেখার ব্যবস্থা রয়েছে: http://www.checkupdown.com/status/E408.html
এখানে ইতিমধ্যে বেশ কয়েকটি ভাল উত্তর রয়েছে, তবে আমি একটি অতিরিক্ত নোটকে ঝুঁকিপূর্ণ করে বলতে চাই যা বিশেষভাবে মোকাবেলা করা হয়নি। পূর্ববর্তী বহু কমেন্টার ইতিমধ্যে উল্লিখিত হিসাবে, 408 একটি সময়সীমা নির্দেশ করে; এবং বেশ কয়েকটি পরিস্থিতিতে রয়েছে যেখানে ওয়েব সার্ভারে টাইমআউট হয়।
এই বলে যে, আপনার সার্ভারটি শোষণের জন্য স্ক্যান করা হচ্ছে সেখানে বিভিন্ন ক্ষেত্রে 408 ত্রুটি তৈরি করা যেতে পারে। এই ধরনের ক্ষেত্রে ক্লায়েন্টরা খুব কমই কোনও ব্যবহারকারী এজেন্ট উপস্থিত হন এবং প্রায়শই হঠাৎ সংযোগগুলি শেষ করে, যার ফলে 403 ত্রুটি উত্পন্ন হতে পারে সেই সংযোগটির জন্য একটি গর্ভপাত বন্ধ হয়ে যায় in
উদাহরণস্বরূপ, ধরা যাক যে আমি একজন জঘন্য হ্যাকার যিনি এখনও কম্পিউটারের জন্য দুর্বলতা বজায় থাকা কম্পিউটারগুলির জন্য ইন্টারনেট স্ক্যান করছি। এর মতো, আমি একটি স্ক্রিপ্ট লিখেছি যা সার্ভারগুলি খুঁজে পেতে আইপি ঠিকানার বৃহত অংশগুলির সাথে সংযোগ খুলবে যা এসএসএল সংস্করণ 3 গ্রহণ করবে - পরে আমি সেই তালিকাটি বিশেষত পুষ্টির শোষণের জন্য স্ক্যান করতে ব্যবহার করব। এই প্রথম স্ক্রিপ্টটি যা করে তা হ'ল এসএসএলভি 3 যাচাই করার জন্য ওপেনসেল ব্যবহার করে একটি সংযোগ স্থাপন করা:
openssl s_client -connect [IP]:443 -ssl3
এই কমান্ডটি অ্যাপাচি-র অনেকগুলি কনফিগারেশনে ফলাফল হিসাবে 409 বার্তা দেবে ঠিক যেমনটি আপনি বর্ণনা করেছেন। আমার নিজের দুটি সার্ভারে এই কমান্ডটি সম্পাদন করার ফলে অ্যাক্সেস লগের এই প্রবেশের ফলে:
<remote IP address> - - [04/Nov/2015:08:09:33 -0500] "-" 408 - "-" "-"
আমি এটি পরিষ্কার করতে চেয়েছিলাম এমনকি এমন পরিস্থিতিতেও যেখানে ওপি লোড ব্যালেন্সিং কোনও ধরণের ব্যবহার করে না, 408 ত্রুটি বিভিন্ন পরিস্থিতিতে ঘটতে পারে - কিছু দূষিত, কিছু ক্লায়েন্টের সাথে সমস্যা নির্দেশ করে এবং কিছু সার্ভারের সাথে সমস্যা নির্দেশ করে। (আমি ওপি কর্তৃক প্রদত্ত লগটিতে লক্ষ্য করেছি যে একটি স্থানীয় আইপি দূরবর্তী আইপি হিসাবে চিহ্নিত করা হয়েছিল, তবে ওপি বিশেষত লোড ব্যালান্সারের ব্যবহারের কথা উল্লেখ করেনি তাই আমি নিশ্চিত নই যে ওপি সাধারণ উদ্দেশ্যে কোনও রাউটেবল আইপি ব্যবহার করেছে কিনা? প্রদর্শনের, যেমনটি তিনি ইউআরএল দিয়েছিলেন)
যাইহোক, যদিও আমার পোস্টটি স্পষ্টতই ওপিকে সাহায্যের জন্য খুব বেশি দেরি করে আশা করি আশা করি এটি অন্যদের যারা এখানে পৌঁছাতে সহায়তা করতে পারে এই সমস্ত জঘন্য সময়সীমা ত্রুটির সমাধানের সন্ধানে।
একটি 408 সময়সীমার জন্য বিভিন্ন কারণ রয়েছে। তবে এমন এক অনুমান থেকে শুরু করা যাক যে সবকিছু ঠিকঠাক হয়ে গেছে তখন কোনও একক সময়ে এই 408 এর আপনার অ্যাক্সেস লগটিতে প্রদর্শিত হবে - যেমন 408 0 "-" "-"।
নেটে অনেকগুলি পয়েন্ট আউট হিসাবে, একটি 408 প্রতিনিধিত্ব করে একটি সংযোগ তৈরি হয়েছে তবে উপযুক্ত সময় স্কেলে কোনও অনুরোধ প্রেরণ করা হয়নি, তাই সার্ভারটি 408 এর সাথে সংযোগটি বাদ দেয় One এক অহঙ্কারী ব্যক্তি প্রকৃতপক্ষে এই বিষয়ে সহায়তা চেয়ে কাউকে সাড়া দিয়েছিল - "টাইমআউটটির কোন অংশ আপনি বুঝতে পারছেন না"।
আমি মনে করি এটি একটি আশ্চর্যজনক উত্তর এবং ওয়েব-সার্ভার সফ্টওয়্যার দিয়ে কিছু সুরক্ষা পদ্ধতি কীভাবে কার্যকরী হয় তার সম্পূর্ণ বোঝার অভাব প্রদর্শন করে।
শুরুতে ফিরে, কেন আমি এই 408 এর সমস্ত দেখতে পাচ্ছি। সার্ভার পরিচালনার জন্য আমাদের বাকী অংশগুলির সাথে আপনার মিল থাকতে পারে তা হ'ল আপনি প্রতিদিনের ভিত্তিতে প্রচুর পরিমাণে আক্রমণ পান। এখন, আপনি এইগুলি সম্পর্কে কি করবেন? ভাল: আপনি তাদের বেছে নেওয়ার জন্য আপনার নির্বাচিত সুরক্ষা পদ্ধতি নিয়োগ করেন, এটিই পরিবর্তন হয়।
আসুন একটি খুব সহজ উদাহরণ গ্রহণ করুন, একটি আইপি ঠিকানা ড্রপ করুন। একটি আইপ্যাব ফাইল (নিয়ম.ভি 4) অন্তর্ভুক্ত আপনার "-A ufw- ব্যবহারকারী-ইনপুট -s 37.58.64.228 -j DROP" রয়েছে। সুতরাং বরাবর আসে 37.58.64.228 ফায়ারওয়াল আইপি সনাক্ত করে এবং সংযোগটি ড্রপ করে। অনেকগুলি কনফিগারেশনে আপনি জানতেন না যে এটি দরজায় নক করেছে।
এখন আরও উন্নত উদাহরণ গ্রহণ করা যাক, কিছু মানদণ্ডের ভিত্তিতে সংযোগটি ড্রপ করুন। একটি আইপ্যাব ফাইল (নিয়ম.ভি 4) অন্তর্ভুক্ত আপনার "-A ইনপুট -p টিসিপি-এম টিসিপি --dport 80-মি স্ট্রিং - স্ট্রিং" সিজি "--আলগো বিএম - থেকে 1000 -j DROP" রয়েছে। এটি ভিন্ন কারণ কারণ এই iptable নিয়মটিতে আমরা অনুরোধের স্ট্রিংয়ের প্রথম 1000 বাইটগুলি দেখুন এবং দেখুন আপনি "cgi" এর একটি সাব-স্ট্রিং খুঁজে পেতে পারেন এবং যদি আপনি সেই সাব-স্ট্রিংটি খুঁজে পান তবে কোনও দিকে যান না আরও, কেবল সংযোগটি ফেলে দিন।
এখানে সুরক্ষা পদ্ধতিটি ভাল তবে আপনার লগগুলি বিভ্রান্তিকর সম্পর্কিত। 408 0 "-" "-" উত্পন্ন হ'ল সর্বোত্তম অ্যাপাচি এই পরিস্থিতিতে করতে পারে। সংযোগটি তৈরি করা হয়েছিল এবং স্ট্রিং তুলনা নিয়মটি প্রয়োগ করার জন্য অনুরোধটি এক পর্যায়ে গ্রহণ করতে হয়েছিল যা পরিণামে 408 এর ফলাফল দেয় কারণ আপনার নিয়মটি সংযোগটি বাদ দেওয়ার জন্য মানদণ্ড পূরণ করেছিল। সুতরাং, আমাদের ছোট বাচ্চা প্রিয়তমারা চেষ্টা করলে আরও ভুল হতে পারে না। একটি সংযোগ তৈরি হয়েছিল এবং একটি অনুরোধ গৃহীত হয়েছিল (এই পরিস্থিতিতে আপনার এটির দৃশ্যমানতা থাকবে না)। 408 উত্পন্ন হলেও এটি 'সময়সীমা' নয়; আপনার ফায়ারওয়াল নিয়মের সাথে অনুরোধ করার অনুরোধের পরে আপনার সার্ভারটি সহজেই সংযোগটি বাদ দিয়েছে। আরও অনেক বিধি রয়েছে, যা একই 408 পরিস্থিতি তৈরি করে। ডন'
আদর্শভাবে এখানে অন্য অ্যাপাচি উত্পন্ন ত্রুটি কোড থাকবে, উদাহরণস্বরূপ - '499' যার অর্থ 'সার্ভার আপনার অনুরোধটি পড়ুন এবং সিদ্ধান্ত নিয়েছেন এটি আপনাকে বিনোদন দেওয়ার জন্য বিরক্ত হতে পারে না - সোড অফ হাহা'।
সর্বশেষতম ওয়েব-সার্ভার সফ্টওয়্যার দ্বারা আপনি ডস আক্রমণগুলি ব্যবহারিকভাবে বাদ দিতে পারেন এবং ব্রাউজারগুলির নতুন জিনটি ভবিষ্যদ্বাণীপূর্ণ সক্ষমতাকে অন্তর্ভুক্ত করে এই সমস্যার কারণ হতে পারে না কারও কারও পরামর্শ অনুসারে।
সংক্ষেপে, 408 উত্পন্ন হয়েছিল কারণ সার্ভারটি অনুরোধটির প্রতিক্রিয়া জানায়নি, তাই ক্লায়েন্ট যতদূর মনে করছেন সংযোগের সময়সীমা শেষ হয়ে গেছে, বাস্তবে যখন সার্ভারটি অনুরোধটি পড়েছে তবে সময়সীমা অপেক্ষা অপেক্ষা সময় ছাড়া অন্য কারণে সংযোগটি বাদ দিয়েছে একটি অনুরোধ.
আমাদের খুব সমস্যা হয়েছিল, এবং এটি বেশ কিছুক্ষণের জন্য বিস্মিত হয়েছিল। আমরা যে সর্বোত্তম সমাধানটি নিয়ে এসেছি তা এডাব্লুএস সমর্থনের ইএলবি দল প্রস্তাব করেছিল। এটি মূলত আপনার HTD সার্ভারের টাইমআউট সেটিংসগুলি আপনার ELB idle timeout
সেটিং (যা seconds০ সেকেন্ডের ডিফল্ট হবে) এর চেয়ে বড় সেগুলি নিশ্চিত করার উপর নির্ভর করে ।
Timeout
নির্দেশিকার মানটি idle timeout
আপনার ELB- এর দ্বিগুণ সেটিং নিশ্চিত করুন।KeepAlive
বৈশিষ্ট্যটি চালু করুন , তা নিশ্চিত করুন যে MaxKeepAliveRequests
এটি খুব বড় (অনন্তের জন্য 0 বা 2000 এর মতো খুব বেশি) এবং এটি KeepAliveTimeout
আপনার ELB এর চেয়ে বেশি idle timeout
।আমরা দেখতে পেয়েছি যে KeepAlive
(এবং সম্পর্কিত সেটিংস) সেটিংটি 408s এর পরিমাণকে কার্যকরভাবে 0 এ কমিয়েছে (আমরা কয়েকটি দেখি, তবে খুব কম)।
আমার এই সমস্যাটি এডাব্লুএস ইলাস্টিক লোড ব্যালান্সারের পিছনে ছিল। স্বাস্থ্য পরীক্ষাগুলি লগতে 408 টি প্রতিক্রিয়ার একটি ভয়ঙ্কর পরিমাণ তৈরি করেছে।
আমার পক্ষে কাজ করা একমাত্র সমাধান হ'ল লোড ব্যালেন্সারের আইডল টাইমআউটটি তার স্বাস্থ্য চেক এর প্রতিক্রিয়া সময়সীমার চেয়ে কম সেট করা ছিল ।
একজন সহকর্মী সম্প্রতি মন্তব্য করেছিলেন যে আমার শেষ পোস্টটি কীভাবে একটি 408 সুরক্ষার পরিমাপের সাথে সম্পর্কিত হতে পারে তার একটি বৈধ ব্যাখ্যা দিয়েছিল, এটি কোনও সমাধান দেয়নি।
পাইপড অ্যাক্সেস লগ আমার ব্যক্তিগত সমাধান।
নিম্নলিখিত বেশিরভাগ উবুন্টু কনফিগারেশনগুলিতে এবং অন্য অ্যাপাচি কনফিগারেশনে নূন্যতম টিঙ্কারিংয়ের সাথে বাক্সের বাইরে কাজ করা উচিত। আমি পিএইচপি চয়ন করেছি কারণ এটি বোঝার পক্ষে সহজ। দুটি স্ক্রিপ্ট রয়েছে: প্রথমটি আপনার অ্যাক্সেস লগটিতে 408 রচিত হওয়া রোধ করে। দ্বিতীয় স্ক্রিপ্ট সমস্ত 408 গুলি আলাদা লগ ফাইলে প্রেরণ করে। যে কোনও উপায়ে ফলাফল আপনার অ্যাক্সেস লগটিতে আর 408s নেই। কোন স্ক্রিপ্টটি প্রয়োগ করবেন এটি আপনার পছন্দ।
আপনার প্রিয় পাঠ্য সম্পাদকটি ব্যবহার করুন, আমি ন্যানো ব্যবহার করি। আপনার 'লগফর্ম্যাট' এবং 'কাস্টমলগ' নির্দেশিকা রয়েছে এমন ফাইলটি খুলুন। সাধারণ # এর সাথে অরিজিনালকে মন্তব্য-আউট করুন এবং নিম্নলিখিতটি যুক্ত করুন। আপনি নীচের ফাইলে এই নির্দেশিকা খুঁজে পেতে পারেন।
sudo ন্যানো / ইত্যাদি / apache2 / সাইট-উপলব্ধ / ডিফল্ট
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" AccessLogPipe
CustomLog "|/var/log/apache2/PipedAccessLog.php" AccessLogPipe env=!dontlog
দ্রষ্টব্য: আমি আমার অ্যাক্সেস লগে ছবিগুলি লগ করি না। আমার ইত্যাদি / apache2 / httpd.conf ফাইলে আমি লাইনটি অন্তর্ভুক্ত করি
SetEnvIfNoCase Request_URI ".(gif)|(jpg)|(png)|(css)|(js)|(ico)$" dontlog
এটি যদি আপনার আগ্রহী না env=!dontlog
হয় তবে CustomLog
নির্দেশিকা থেকে সরান ।
এখন নীচের একটি পিএইচপি স্ক্রিপ্ট তৈরি করুন ( #!/usr/bin/php
এটি দোভাষীর অবস্থানের একটি রেফারেন্স, আপনার সিস্টেমের জন্য অবস্থানটি সঠিক কিনা তা নিশ্চিত করুন - আপনি $ প্রম্পটে টাইপ করে এটি whereis php
করতে পারেন - এটির মতো কিছু ফিরে আসবে php: /usr/bin/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
you আপনি হিসাবে #!/usr/bin/php
আমার সেটআপ জন্য সঠিক দেখতে পারেন )।
sudo ন্যানো /var/log/apache2/PipedAccessLog.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);
}
}
}
?>
sudo ন্যানো /var/log/apache2/PipedAccessLog.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
লিপিটি সংরক্ষণ করা ; root প্রম্পটে নিম্নলিখিতটি প্রয়োগ করে রুটের মালিকানা রয়েছে তা নিশ্চিত করুন।
sudo chown -R root:adm /var/log/apache2/PipedAccessLog.php
PipedAccessLog.php
স্ক্রিপ্ট পড়া করতে হবে / লেখা ও সম্পন্ন অনুমতি তাই $ প্রম্পটে নিম্নলিখিত চালানো।
sudo chmod 755 /var/log/apache2/PipedAccessLog.php
সবশেষে কাজ করার জন্য আপনাকে অ্যাপাচি পরিষেবাটি পুনরায় চালু করতে হবে। $ প্রম্পটে নিম্নলিখিতটি প্রয়োগ করুন।
sudo service apache2 restart
যদি আপনার অ্যাপাচি লগগুলি অন্য কোথাও অবস্থিত থাকে তবে আপনার কনফিগারেশন অনুসারে পথ পরিবর্তন করুন। শুভকামনা
আমি খুঁজে পেয়েছি যে 408 ত্রুটি সংখ্যা এবং ফ্রিকোয়েন্সি উভয়ই বৃদ্ধি পাচ্ছে। তারা যে আইপি অ্যাড্রেসগুলির উত্স থেকে শুরু হচ্ছে তার পরিসীমাও বাড়ছে (এগুলি তাদের নিজস্ব পৃথক ফাইলে লগ করা হয়েছে)। আইপি-র একই গোষ্ঠী থেকে ধারাবাহিক 408 গুলি প্রদর্শিত লগের নিদর্শনগুলিও রয়েছে যা সাধারণ সার্ভার সময়সীমার কারণে নয় যে প্রবর্তক একটি চক্রীয় বিন্যাসে প্রায় 2 বা 3 সেকেন্ডের ব্যবধানে সংযোগগুলি চেষ্টা করছে (অন্যটির আগে টাইমআউট করার অপেক্ষায় নেই) সংযোগ প্রচেষ্টা) আমি এগুলিকে সাধারণ ডিডিওএস স্টাইল সংযোগ প্রচেষ্টা হিসাবে দেখি। আমার মতে এগুলি প্রবর্তকের পক্ষে একধরণের নিশ্চিতকরণ বার্তা যা কোনও সার্ভার অনলাইন হয় ... তবে তারা পরে বিভিন্ন সরঞ্জাম নিয়ে ফিরে আসবে .... আপনি যদি আপনার সময়সীমা ব্যবধান বাড়ান, আপনি কেবল তাদের চালানোর জন্য আরও একটি বড় সময়_সংযোগ দিচ্ছেন তাদের হ্যাক প্রোগ্রামের মধ্যে।