क्या मैं सभी सर्वर / ओएस जानकारी छिपा सकता हूं?


78

मैं नहीं चाहता कि कोई भी यह पता लगा सके कि मैं एनजीआईएनएक्स या इंटरनेट से भी उबंटू का उपयोग कर रहा हूं। वहाँ ऐसे उपकरण हैं (जैसे बिल्टविथ) जो सर्वर का पता लगाने के लिए स्कैन करते हैं कि वे किस उपकरण का उपयोग कर रहे हैं। इसके अलावा, कुछ क्रैकिंग टूल डिटेटिंग में मदद कर सकते हैं। क्या सबसे अच्छा / निकटतम है कि मैं यह सब जानकारी बाहर से छिपाने के लिए प्राप्त कर सकता हूं?

जवाबों:


114

आप इसे जोड़कर Nginx और OS के संस्करण का उत्पादन रोक सकते हैं

server_tokens off;

एक करने के लिए http, serverया locationसंदर्भ।

या यदि आप सर्वर हेडर को पूरी तरह से हटाना चाहते हैं, तो आपको हेडर अधिक मॉड्यूल के साथ Nginx को संकलित करने की आवश्यकता है, क्योंकि हेडर को Nginx स्रोत में हार्ड कोडित किया गया है, और यह मॉड्यूल किसी भी HTTP हेडर को बदलने की अनुमति देता है।

 more_clear_headers Server;

हालांकि, कई छिपे हुए तरीके हैं सर्वर उनके कार्यान्वयन के माध्यम से दुर्घटना करते हैं जो सिस्टम को पहचानने में मदद कर सकते हैं। जैसे यह एक बुरा SSL अनुरोध का जवाब कैसे देता है। मैं इसे रोकने का व्यावहारिक तरीका नहीं देखता।

कुछ चीजें जो मैं सुझा सकता हूं:

  • त्रुटि टेम्पलेट बदलें
  • आवश्यक सेवाओं को छोड़कर सभी बंदरगाहों को ब्लॉक करें

14
माना। उदाहरण के लिए नैम के OS का पता लगाएं - यह आईपी / टीसीपी अनुरोधों के लक्ष्य मेजबान की प्रतिक्रियाओं को देखता है और इस तरह से ओएस को निर्धारित करने में सक्षम है। यह वास्तव में इस में प्रयास डालने लायक नहीं है।
EEAA

6
एरिक की सलाह पर +1। अपने सर्वर को सुरक्षित रखने के लिए बेहतर है क्योंकि आप अस्पष्टता के माध्यम से सुरक्षा पर भरोसा कर सकते हैं।
एंडी स्मिथ

4
सर्वर टोकन केवल संस्करण संख्या बंद करते हैं। नग्नेक्स हेडर को पूरी तरह से हटाने की अनुमति नहीं देता है।
मार्टिन फेजर्डवाल्ड

44
"कोई संस्करण संख्या" जैसे महत्वपूर्ण सुरक्षा कारकों की अवहेलना करना और शायद "कोई भी सर्वर विक्रेता का नाम" पूरी तरह से सिर्फ एक शुरुआत नहीं है ... एक शुरुआती गलती है। निश्चित रूप से अस्पष्टता के माध्यम से सुरक्षा आपकी सुरक्षा के लिए कुछ भी नहीं करती है, लेकिन यह सुनिश्चित करती है कि नरक कम से कम सबसे सांसारिक, सरल हमले वैक्टर के खिलाफ की रक्षा करेगा - अस्पष्टता के माध्यम से सुरक्षा एक आवश्यक कदम है, यह पहली बार हो सकता है और कभी भी अंतिम सुरक्षा नहीं होनी चाहिए। माप-इसे पूरी तरह से खराब करना एक बहुत ही गलत गलती है, यहां तक ​​कि सबसे सुरक्षित वेबसर्वर को भी क्रैक किया जा सकता है यदि संस्करण-विशिष्ट हमले के वेक्टर को जाना जाता है।
specializt

1
अभी भी एक कष्टप्रद सर्वर नाम "Nginx" एक 301 पुनर्निर्देशित प्रतिक्रिया के शरीर में वापस आ गया है और इससे बचने का कोई तरीका नहीं मिला है, अब तक एक कस्टम HTML टेम्पलेट का उपयोग करने का नियम 301 के लिए काम नहीं करता है।
गिलोय पेरोट

30

यदि आपने डेबियन या उबंटू में apt-get का उपयोग करके nginx स्थापित किया है, तो आपको "Server" हेडर सेट या क्लियर करने के लिए पैकेज nginx-extras स्थापित करने की आवश्यकता हो सकती है

एक बार यह हो जाने के बाद, आप nginx.conf (आमतौर पर /etc/nginx/nginx.conf) में नीचे की पंक्तियाँ जोड़ सकते हैं:

"सर्वर" हेडर को पूरी तरह से साफ़ करने के लिए:

more_clear_headers Server; 

"सर्वर" के रूप में एक कस्टम स्ट्रिंग सेट करने के लिए

more_set_headers 'Server: some-string-here';

1
पुष्टि more_clear_headers Server;काम करता है और साथ ही पर डेबियन जेसी 8.5 nginx संस्करण: nginx / 1.6.2
ब्रैंडन

इस उत्तर को और अधिक बढ़ाने की जरूरत है। हालाँकि शायद यह ध्यान दिया जाना चाहिए कि निर्देश को फाइल के http ब्लॉक के अंदर रखने की आवश्यकता है (मुझे लगता है)
एंडी

2
यह काम करता है http, serverमें location, और location ifसंदर्भों में। स्रोत: ngx_headers_more प्रलेखन
केल्विन

1
Ubuntu उपयोगकर्ताओं के लिए: sudo apt-get install nginx-extras और फिर हेडर सेट करें
jchnxu

मेरे लिए यह असफल रहा unknown directive "more_set_headers"। स्पष्ट रूप से मॉड्यूल को सक्षम करने के माध्यम से इसे हल किया /etc/nginx/nginx.conf। बस load_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;

Nginx को MyWhateverServerNameIWant उदा से बदलें

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

फिर

nano src/core/nginx.h 

लाइन के लिए देखो

#define NGINX_VER          "nginx/" NGINX_VERSION

"nginx /" को "MyWhateverServerNameIWant /" में बदलें ताकि यह पढ़े

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

अंत में यदि आप चाहते हैं कि संस्करण संख्या भी बदलें

लाइन के लिए देखें #define NGINX_VERSION "1.0.4"

और जो भी संस्करण आप चाहते हैं के लिए "1.0.4" बदलें। उदाहरण के लिए यह पढ़ेगा

#define NGINX_VERSION      "5.5.5"

आशा है ये मदद करेगा। फिर भी। एक सर्वर को सुरक्षित रखने से यह पता चलता है कि क्या चल रहा है। PHP प्रकृति असुरक्षित है, और इसी तरह लिनक्स है। यदि एक अच्छी सुरक्षा प्राप्त करने के लिए सभी आवश्यक उपाय किए गए हैं, तो बेशक लिनक्स बहुत सुरक्षित हो सकता है। जहाँ तक PHP का सवाल है, मैं आपके कोड की सुरक्षा को सख्त करने में मदद करने के लिए Suoshin का उपयोग करने की सलाह दूंगा


4
+1, धन्यवाद। मैं @ एंडी के अधिकारी के रूप में जा रहा हूं, सिर्फ आसान दृष्टिकोण के कारण, लेकिन यह उत्कृष्ट जानकारी है।
ओरोकुसाकी

मुझे लगता है कि आपका मतलब सुहोसिन से है।
बीटल

7

बहुत समय से काम करने के बाद ubuntu पर nginx का एक कस्टम स्वाद कैसे करना है मुझे एहसास हुआ कि आप इसके लिए लुआ मॉड्यूल का उपयोग कर सकते हैं।

Ubuntu 14.04 पर यदि आप उस nginx-extrasपैकेज को स्थापित करते हैं जिसे आप उपयोग करके सर्वर हेडर को हटा सकते हैं:

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

इसे http ब्लॉक में फेंक दें और हर अनुरोध में Serverहेडर की कमी होगी ।

यदि यह nginx -Vसत्यापित करने के लिए काम नहीं करता है कि आपके पास nginx की कॉपी में संकलित लुआ मॉड्यूल है। यदि नहीं, तो एक वैकल्पिक पैकेज की संभावना है जिसे आप इसे प्राप्त करने के लिए उपयोग कर सकते हैं।


डेबियन जेसी 8.5 नगनेक्स वर्जन पर इस काम की पुष्टि की: nginx / 1.6.2
ब्रैंडन

1
डेबियन परीक्षण पर यह BUT स्थापित nginx-extraकिए गए more_set_headers "Server: whatever";कार्य को काम नहीं करता है , इसलिए +1: D
शुटिह

काम करने के लिए आपको केवल 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 के रूप में वर्णन करता है कि आप सर्वर हेडर को बदलने के लिए नगनेक्स कोड को कैसे समायोजित कर सकते हैं। समस्या यह है कि वे HTTP / 2 को भूल गए हैं। संक्षेप में, कुछ भी नहीं बदलेगा। सर्वर हैडर अभी भी दिखाई देगा।

कम ज्यादा बेहतर है। ठीक है मैं मानता हूं, मैं भी लंबे समय से एक अच्छे समाधान की तलाश कर रहा हूं। लेकिन अंत में मिला:

Nginx सर्वर हेडर रिमूवल पैच

मैं अंततः उस कष्टप्रद Nginx सर्वर हेडर से रिडीम किया जाता हूं।


0

इस बैश फ़ंक्शन को nginx स्रोत कोड फ़ोल्डर में चलाएं। 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
सर्वर दोष में आपका स्वागत है! जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
गेराल्ड श्नाइडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.