আমি কি সমস্ত সার্ভার / ওএস তথ্য লুকিয়ে রাখতে পারি?


78

আমি চাই না যে কেউ ইন্টারনেট থেকে এনজিআইএনএক্স বা এমনকি উবুন্টু ব্যবহার করছে তা সনাক্ত করতে সক্ষম হোক। সেখানে সরঞ্জামগুলি রয়েছে (যেমন বিল্টউইথ) যা কোন সরঞ্জামগুলি তারা ব্যবহার করছে তা সনাক্ত করতে সার্ভারগুলি স্ক্যান করে। এছাড়াও, কিছু ক্র্যাকিং সরঞ্জাম সনাক্তকরণে সহায়তা করতে পারে। বাইরে থেকে এই সমস্ত তথ্য লুকিয়ে রাখতে আমি সবচেয়ে ভাল / নিকটেতম কী?

উত্তর:


114

আপনি যোগ করে এটি Nginx এবং OS এর সংস্করণ আউটপুট করা বন্ধ করতে পারেন

server_tokens off;

একটি http, serverবা locationপ্রসঙ্গে

অথবা আপনি যদি সার্ভার শিরোনাম সম্পূর্ণরূপে সরাতে চান তবে আপনাকে Nginx কে Headers More মডিউলটির সাথে সংকলন করতে হবে, কারণ শিরোনামটি শক্তভাবে এনগিনেক্স উত্সে কোডিং হয়েছে, এবং এই মডিউলটি কোনও HTTP শিরোনাম পরিবর্তন করতে দেয়।

 more_clear_headers Server;

যাইহোক, অনেকগুলি লুকানো উপায়ে সার্ভারগুলি দুর্ঘটনাক্রমে তাদের প্রয়োগের মাধ্যমে সম্পাদন করে যা সিস্টেমটি সনাক্ত করতে সহায়তা করতে পারে। যেমন এটি কীভাবে কোনও খারাপ এসএসএল অনুরোধের প্রতিক্রিয়া জানায়। আমি এটিকে প্রতিরোধের কোনও ব্যবহারিক উপায় দেখছি না।

আমি প্রস্তাবিত কিছু বিষয়:

  • ত্রুটি টেমপ্লেট পরিবর্তন করুন
  • প্রয়োজনীয় পরিষেবাগুলি বাদে সমস্ত বন্দরকে অবরুদ্ধ করুন

14
একমত। উদাহরণস্বরূপ nmap এর ওএস সনাক্তকরণের দিকে তাকান - এটি আইপি / টিসিপি অনুরোধগুলিতে লক্ষ্য হোস্টের প্রতিক্রিয়াগুলি দেখায় এবং ওএসকে সেভাবে নির্ধারণ করতে সক্ষম। এটিতে চেষ্টা চালিয়ে যাওয়া আসলেই মূল্যবান নয়।
EEAA

6
এরিকের পরামর্শে +1। অস্পষ্টতার মাধ্যমে সুরক্ষার উপর নির্ভর করার চেয়ে আপনার সার্ভারকে যতটা সম্ভব সুরক্ষিত করা ভাল।
অ্যান্ডি স্মিথ 21

4
সার্ভার টোকেনগুলি কেবল সংস্করণ নম্বরটি বন্ধ করে দেয়। Nginx সম্পূর্ণরূপে শিরোলেখ অপসারণ করার অনুমতি দেয় না।
মার্টিন Fjordvald

44
"কোনও সংস্করণ নম্বর নয়" এবং সম্ভবত "কোনও সার্ভার বিক্রেতার নাম" যেমন গুরুত্বপূর্ণ সুরক্ষা বিষয়গুলিকে উপেক্ষা করা কেবলমাত্র ... একটি প্রাথমিক ভুল। অস্পষ্টতার মাধ্যমে সুরক্ষা অবশ্যই আপনার সুরক্ষার জন্য কিছুই করে না তবে এটি নিশ্চিত যে নরকে কমপক্ষে সবচেয়ে জাগতিক, সরল আক্রমণাত্মক ভেক্টরদের বিরুদ্ধে রক্ষা করবে - অস্পষ্টতার মধ্য দিয়ে সুরক্ষা একটি প্রয়োজনীয় পদক্ষেপ, এটি প্রথম হতে পারে এবং কখনই শেষ নিরাপত্তা হওয়া উচিত নয় পরিমাপ-এটিকে সম্পূর্ণরূপে ছাড়াই একটি খুব খারাপ ভুল, এমনকি কোনও সংস্করণ-ভিত্তিক আক্রমণকারীর ভ্যাক্টরটি জানা থাকলে সর্বাধিক সুরক্ষিত ওয়েবসার্সগুলি ক্র্যাক করা যেতে পারে।
বিশেষায়িত করুন

1
301 পুনর্নির্দেশিত প্রতিক্রিয়াটির শরীরে একটি বিরক্তিকর সার্ভার নাম "এনগিনেক্স" ফিরে এসেছে এবং এড়াতে কোনও উপায় খুঁজে পাওয়া যায়নি, একটি কাস্টম এইচটিএমএল টেমপ্লেট ব্যবহার করার নিয়ম 301 এর জন্য কার্যকর হয় না
গিলাইম পেরেট

30

আপনি যদি ডেবিয়ান বা উবুন্টুতে অ্যাপটি-গেট ব্যবহার করে এনগিনেক্স ইনস্টল করেন তবে "সার্ভার" শিরোনাম সেট বা সাফ করার জন্য আপনার প্যাকেজ এনজিনেক্স-এক্সট্রা ইনস্টল করতে হবে might

এটি শেষ হয়ে গেলে, আপনি নীচটি লাইনগুলি এনজিএনএক্স.কম-এ যুক্ত করতে পারেন (সাধারণত /etc/nginx/nginx.conf):

পুরোপুরি "সার্ভার" শিরোনাম সাফ করার জন্য:

more_clear_headers Server; 

"সার্ভার" হিসাবে একটি কাস্টম স্ট্রিং সেট করতে

more_set_headers 'Server: some-string-here';

1
নিশ্চিত more_clear_headers Server;করা ডেবিয়ান জেসি 8.5 এনগিনেক্স সংস্করণেও কাজ করে: এনগিনেক্স / 1.6.2
ব্র্যান্ডন

এই উত্তরের আরও উন্নতি প্রয়োজন। যদিও সম্ভবত এটি লক্ষ করা উচিত যে নির্দেশটি কনফ ফাইলের HTTP ব্লকের ভিতরে রাখা দরকার (আমি মনে করি)
অ্যান্ডি

2
এই কাজ করে http, server, location, এবং location ifপ্রেক্ষিতে। সূত্র: ngx_headers_more ডকুমেন্টেশন
কেলভিন

1
উবুন্টু ব্যবহারকারীদের জন্য: sudo apt-get install nginx-extras এবং তারপর হেডার সেট
jchnxu

আমার জন্য এটি ব্যর্থ unknown directive "more_set_headers"। স্পষ্টভাবে মডিউলটি সক্ষম করার মাধ্যমে এটি সমাধান করেছেন /etc/nginx/nginx.confload_module modules/ngx_http_headers_more_filter_module.so;কনফিগার ফাইলের শুরুতে কেবল যুক্ত করুন।
র‌্যাপস্ট্যাক

17

@ মার্টিন এফ। হ্যাঁ তা করে। আপনাকে এটি উত্স থেকে সংকলন করতে হবে এবং উত্স সংকলনের আগে যা প্রয়োজন তা পরিবর্তন করতে হবে।

আমি ধরে নিয়েছি আপনি শেষ স্থিতিশীল সংস্করণটি ডাউনলোড করেছেন আপনি এটি সঙ্কুচিত করেছেন এবং ফাইলগুলি কোথায় রয়েছে তা আপনি জানেন। যদি এটি হয় তবে নিম্নলিখিতগুলি করুন:

nano src/http/ngx_http_header_filter_module.c

তারপরে 48 টি লাইনের সন্ধান করুন যদি আমি সঠিকভাবে স্মরণ করি।

static char ngx_http_server_string[] = "Server: nginx" CRLF;

মাইওয়েজস্ সার্ভারনেমআইওয়ান্ট যেমন-এর সাথে এনজিন্স প্রতিস্থাপন করুন

static char ngx_http_server_string[] = "Server: MyWhateverServerNameIWant" CRLF; 

তারপর

nano src/core/nginx.h 

লাইন জন্য চেহারা

#define NGINX_VER          "nginx/" NGINX_VERSION

"এনজিনেক্স /" কে "মাইওয়েওয়াসসভার সার্ভারনেমআইওয়ান্ট /" এ পরিবর্তন করুন সুতরাং এটি পড়বে

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

অবশেষে আপনি যদি চান সংস্করণ নম্বর পরিবর্তন

# ডিজাইনটি NGINX_VERSION "1.0.4" নির্ধারণ করুন

এবং যে সংস্করণটি আপনি চান তার জন্য "1.0.4" পরিবর্তন করুন। উদাহরণস্বরূপ এটি পড়বে

#define NGINX_VERSION      "5.5.5"

আশা করি এটা সাহায্য করবে. তা সত্ত্বেও। কোনও সার্ভারকে সুরক্ষিত করা কী চলছে তা না দেখিয়ে beyond পিএইচপি প্রকৃতিগতভাবে সুরক্ষিত এবং লিনাক্সও। যদি কোনও শালীন সুরক্ষা পাওয়ার জন্য প্রয়োজনীয় সমস্ত ব্যবস্থা গ্রহণ করা হয় তবে অবশ্যই লিনাক্স বেশ সুরক্ষিত হতে পারে। যতদূর পিএইচপি সম্পর্কিত, আমি আপনার কোডটির সুরক্ষা আরও কঠোর করতে সহায়তা করতে Suoshin ব্যবহার করার পরামর্শ দেব ।


4
+1, ধন্যবাদ আমি @ অ্যান্ডিকে অফিসিয়াল হিসাবে ছেড়ে চলেছি, কেবল সহজ পদ্ধতির কারণে, তবে এটি দুর্দান্ত তথ্য।
orokusaki

আমার মনে হয় তুমি সুহোসিনকে বোঝাতে চাইছ।
বিটল

7

উবুন্টুতে এনগিনেক্সের কাস্টম ফ্লেভার কীভাবে করা যায় তা অনেকক্ষণ কাজ করার পরে আমি বুঝতে পেরেছি আপনি এর জন্য লুয়া মডিউলটি ব্যবহার করতে পারেন।

উবুন্টুতে 14.04 এ আপনি যদি nginx-extrasপ্যাকেজটি ইনস্টল করেন তবে আপনি সার্ভারের শিরোনামটি ব্যবহার করে মুছে ফেলতে পারেন:

header_filter_by_lua 'ngx.header["server"] = nil';

এটি HTTP ব্লকের মধ্যে ফেলে দিন এবং প্রতিটি অনুরোধের Serverশিরোনামের অভাব হবে ।

যদি এটি nginx -Vআপনার এনজিএনএক্সের অনুলিপিতে লুয়া মডিউলটি সংকলিত করে আছে তা যাচাই করার জন্য এটি যদি রান কাজ করে না । যদি তা না হয় তবে সম্ভবত এটির জন্য একটি বিকল্প প্যাকেজ আপনি ব্যবহার করতে পারেন।


ডিবিয়ান জেসি 8.5 এনগিনেক্স সংস্করণ: এনগিনেক্স / 1.6.2
ব্র্যান্ডন


এটি কাজ করার জন্য আপনার কেবল LUA সক্ষম করা দরকার। Tnx
glavić

6

হেডার_ফিল্টার_বাই_লুয়ার পরিবর্তে নতুন নির্দেশক হেডার_ফিল্টার_বাই_লুয়া ব্লক ব্যবহার করার পরামর্শ দেওয়া হয় যা লুয়া উত্সটি সরাসরি কোঁকড়া ধনুর্বন্ধনী ( {}) এর মধ্যে ইনলাইন করে । এটির সাথে বিশেষ চরিত্রগুলি থেকে বাঁচার দরকার নেই।

header_filter_by_lua_block { ngx.header["server"] = nil }

https://github.com/openresty/lua-nginx-module#header_filter_by_lua_block


1

প্রথম এবং সর্বাগ্রে: শিরোনাম আরও এনগিনেক্স হিসাবে অতিরিক্ত মডিউলটি কেন ব্যবহার করবেন? কেবল সার্ভারের শিরোনামটি লুকানোর জন্য। কয়েকটি লাইন থাকলে, সাধারণ প্যাচ আপনার জন্য একই সমাধানে পৌঁছতে পারে।

অতিরিক্ত মডিউল ব্যবহারের ফলে অস্থিরতা হতে পারে (এটি আপনার পরিবেশের সাথে কতটা ভালভাবে পরীক্ষা করা হয়েছে? আপনার অন্যান্য মডিউল ইত্যাদির সাথে ইত্যাদি) বা নিরাপত্তাহীনতা (এই মডিউলটি কি বাগ এবং / অথবা সুরক্ষা সম্পর্কিত সংশোধনগুলির সাথে নিয়মিত আপডেট করা হয়?)

দ্বিতীয়ত। এই থ্রেডটি 279389 জবাব হিসাবে বর্ণনা করে যে আপনি কীভাবে সার্ভার শিরোলেখ পরিবর্তন করতে Nginx কোড সামঞ্জস্য করতে পারেন। সমস্যাটি হ'ল তারা HTTP / 2 ভুলে গেছে forgotten সংক্ষেপে, কিছুই পরিবর্তন হবে না। সার্ভার শিরোলেখটি এখনও দৃশ্যমান হবে।

কম আরও ভাল হয়। ঠিক আছে আমি স্বীকার করি, আমি দীর্ঘদিন ধরেও একটি ভাল সমাধান খুঁজছিলাম। তবে শেষ পর্যন্ত পাওয়া গেছে:

Nginx সার্ভার শিরোলেখ অপসারণ প্যাচ

অবশেষে আমি সেই বিরক্তিকর Nginx সার্ভার শিরোনাম থেকে মুক্তি পেয়েছি।


0

এনগিনেক্স উত্স কোড ফোল্ডারে এই ব্যাশ ফাংশনটি চালান। Nginx- $ সংস্করণে, src / এ নয়।

এই উত্তরের ভিত্তিতে ।

hidengxver () {
read -r -p "Your own http_server_string for safety: " http_server_string
first_string="static char ngx_http_server_string\[\] = \"Server: nginx\" CRLF;"
second_string="static char ngx_http_server_string\[\] = \"$http_server_string\" CRLF;"
sed -ire "s/$first_string/$second_string/g" src/http/ngx_http_header_filter_module.c

read -r -p "Your own NGINX_VER const: " nginx_ver
third_string="\#define NGINX\_VER          \"nginx\/\" NGINX\_VERSION"
forth_string="\#define NGINX\_VER          \"$nginx_ver\" NGINX\_VERSION"
sed -ire "s/$third_string/$forth_string/g" src/core/nginx.h

real_nginx_version=$( grep '#define NGINX_VERSION' src/core/nginx.h | gawk -F'"' '{print $2}' )
read -r -p "Your own NGINX_VERSION const: " new_nginx_version
fifth_string="\#define NGINX\_VERSION      \"$real_nginx_version\""
sixth_string="\#define NGINX\_VERSION      \"$new_nginx_version\""
sed -ire "s/$fifth_string/$sixth_string/g" src/core/nginx.h
}

-1

এই টুকরোটি দেখুন । অবশ্যই আপনাকে সাহায্য করবে।


9
সার্ভার ফল্ট আপনাকে স্বাগতম! যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
জেরাল্ড স্নাইডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.