Czy mogę ukryć wszystkie informacje o serwerze / systemie operacyjnym?

78

Nie chcę, aby ktokolwiek mógł wykryć, że używam NGINX, a nawet Ubuntu z Internetu. Istnieją narzędzia (takie jak BuiltWith), które skanują serwery w celu wykrycia, jakich narzędzi używają. Ponadto niektóre narzędzia do łamania mogą pomóc w usuwaniu. Co jest najlepsze / najbliższe temu, że mogę ukryć wszystkie te informacje z zewnątrz?

orokusaki
źródło

Odpowiedzi:

114

Możesz zatrzymać wysyłanie wersji Nginx i systemu operacyjnego poprzez dodanie

server_tokens off;

do http, serverlub locationkontekstu.

Lub jeśli chcesz całkowicie usunąć nagłówek serwera, musisz skompilować Nginx z modułem Headers More wewnątrz, ponieważ nagłówek jest zakodowany na stałe w źródle Nginx, a ten moduł umożliwia zmianę dowolnych nagłówków http.

 more_clear_headers Server;

Istnieje jednak wiele ukrytych sposobów działania serwerów przez przypadek poprzez ich implementację, które mogą pomóc w identyfikacji systemu. np. Jak reaguje na złe żądanie SSL. Nie widzę praktycznego sposobu, aby temu zapobiec.

Niektóre rzeczy, które mogę zasugerować:

  • zmienić szablony błędów
  • zablokuj wszystkie porty z wyjątkiem potrzebnych usług
Andy
źródło
14
Zgoda. Spójrz na przykład na wykrywanie systemu operacyjnego nmap - to sprawdza odpowiedzi hostów docelowych na żądania IP / TCP i może w ten sposób określić system operacyjny. Naprawdę nie warto w to wkładać wysiłku.
EEAA,
6
+1 za radą Eriki. Lepiej zabezpieczyć serwer najlepiej, jak to możliwe, niż polegać na bezpieczeństwie poprzez zaciemnienie.
Andy Smith
4
Tokeny serwera wyłączają tylko numer wersji. Nginx nie pozwala na całkowite usunięcie nagłówka.
Martin Fjordvald,
44
ignorowanie ważnych czynników bezpieczeństwa, takich jak „brak numerów wersji”, a prawdopodobnie nawet „brak nazwy dostawcy serwera” całkowicie, jest po prostu ... błędem dla początkujących. Oczywiście bezpieczeństwo poprzez zaciemnienie nie ma żadnego wpływu na twoje bezpieczeństwo, ale jest pewne, że piekło przynajmniej ochroni przed najbardziej przyziemnymi, uproszczonymi wektorami ataku - bezpieczeństwo poprzez zaciemnienie jest koniecznym krokiem, może być pierwszym i nigdy nie powinno być ostatnim zabezpieczeniem pomiar - całkowite pomijanie jest bardzo poważnym błędem, nawet najbardziej bezpieczne serwery WWW mogą zostać złamane, jeśli znany jest wektor ataku specyficzny dla wersji.
specializt
1
Wciąż pojawia się irytująca nazwa serwera „Nginx” zwrócona w treści odpowiedzi przekierowania 301 i jak dotąd nie udało się tego uniknąć, reguła korzystania z niestandardowego szablonu HTML nie działa dla 301.
Guillaume Perrot
30

Jeśli zainstalowałeś nginx za pomocą apt-get w Debianie lub Ubuntu, być może będziesz musiał zainstalować pakiet dodatków nginx, aby ustawić lub wyczyścić nagłówek „Serwer”

Po wykonaniu tej czynności możesz dodać poniższe wiersze w pliku nginx.conf (zwykle /etc/nginx/nginx.conf):

Aby całkowicie wyczyścić nagłówek „Serwer”:

more_clear_headers Server; 

Aby ustawić niestandardowy ciąg jako „Serwer”

more_set_headers 'Server: some-string-here';
Władca Packet
źródło
1
Potwierdzony more_clear_headers Server;działa również w wersji Debian Jessie 8.5 nginx: nginx / 1.6.2
Brandon
Ta odpowiedź wymaga więcej głosów pozytywnych. Chociaż być może należy zauważyć, że dyrektywa musi zostać umieszczona w bloku http pliku conf (tak myślę)
Andy,
2
To działa w http, server, location, i location ifkonteksty. Źródło: ngx_headers_more dokumentacja
Kelvin
1
Dla użytkowników ubuntu: sudo apt-get install nginx-extras a następnie ustaw nagłówki
jchnxu
Dla mnie to się nie udało unknown directive "more_set_headers". Rozwiązano to poprzez włączenie modułu bezpośrednio w /etc/nginx/nginx.conf. Po prostu dodaj load_module modules/ngx_http_headers_more_filter_module.so;na początku pliku konfiguracyjnego.
rapstacke
17

@Martin F. Tak. Będziesz musiał skompilować go ze źródła i zmienić to, co jest potrzebne przed skompilowaniem źródła.

Zakładam, że pobrałeś ostatnią stabilną wersję, którą zdekompresowałeś i wiesz, gdzie są pliki. W takim przypadku wykonaj następujące czynności:

nano src/http/ngx_http_header_filter_module.c

Następnie spójrz na linię 48, jeśli dobrze pamiętam.

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

Zamień nginx na MyWhthingServerNameIWant np

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

Następnie

nano src/core/nginx.h 

poszukaj linii

#define NGINX_VER          "nginx/" NGINX_VERSION

zmień „nginx /” na „MyWhthingServerNameIWant /”, aby odczytać

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

Wreszcie, jeśli chcesz, zmień także numer wersji

poszukaj linii # zdefiniuj NGINX_VERSION „1.0.4”

i zmień „1.0.4” na dowolną wersję. Na przykład będzie czytać

#define NGINX_VERSION      "5.5.5"

Mam nadzieję, że to pomoże. Niemniej jednak. Zabezpieczenie serwera wykracza poza to, że nie pokazuje, co działa. PHP jest z natury niepewny, podobnie jak Linux. Oczywiście Linux może być całkiem bezpieczny, jeśli zostaną podjęte wszystkie niezbędne środki w celu osiągnięcia przyzwoitego bezpieczeństwa. Jeśli chodzi o PHP, polecam użycie Suoshin, aby wzmocnić bezpieczeństwo twojego kodu.

Martin M.
źródło
4
+1, dzięki. Opuszczam @ Andy's jako oficjalny, tylko ze względu na łatwiejsze podejście, ale jest to doskonała informacja.
orokusaki,
Myślę, że masz na myśli Suhosin.
Beetle
7

Po długim czasie opracowywania niestandardowego smaku nginx na Ubuntu zdałem sobie sprawę, że możesz do tego użyć modułu lua.

W Ubuntu 14.04, jeśli zainstalujesz nginx-extraspakiet, możesz usunąć nagłówek serwera, używając:

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

Rzuć to w bloku http, a do każdego żądania nie będzie Servernagłówka.

Jeśli to nie zadziała, uruchom, nginx -Vaby sprawdzić, czy masz moduł Lua wkompilowany w twoją kopię nginx. Jeśli nie, prawdopodobnie istnieje alternatywny pakiet, którego można użyć, aby go zdobyć.

matschaffer
źródło
Potwierdzono, że działa to w wersji Debian Jessie 8.5 nginx: nginx / 1.6.2
Brandon
1
Na testach debian to nie wydaje się działać, ale zainstalowaniem nginx-extrawykonana more_set_headers "Server: whatever";praca, więc +1: D
Shautieh
Aby to działało, potrzebujesz tylko włączonej LUA. Tnx
glavić
1

Przede wszystkim: po co używać dodatkowego modułu jako nagłówków Więcej Nginx? Tylko aby ukryć nagłówek serwera. Jeśli kilka wierszy, prosta łatka może osiągnąć to samo rozwiązanie dla Ciebie.

Korzystanie z dodatkowego modułu może spowodować niestabilność (jak dobrze przetestowano go w środowisku? Z innymi modułami itp.) Lub niepewność (czy ten moduł jest regularnie aktualizowany o poprawki błędów i / lub zabezpieczeń?)

Po drugie. Wątek ten opisuje jako odpowiedź 279389, w jaki sposób można dostosować kod Nginx, aby zmienić nagłówek serwera. Problem polega na tym, że zapomnieli o HTTP / 2. Krótko mówiąc, nic się nie zmieni. Nagłówek serwera będzie nadal widoczny.

Mniej znaczy więcej, tym lepiej. Ok, przyznaję, od dawna też szukałem dobrego rozwiązania. Ale w końcu znalazłem:

Poprawka do usuwania nagłówka serwera Nginx

Wreszcie jestem wykupiony od tego irytującego nagłówka serwera Nginx.

Bertus Du Jang
źródło
0

Uruchom tę funkcję bash w folderze kodu źródłowego nginx. W wersji nginx- $, nie w src /.

Na podstawie tej odpowiedzi .

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
}
obcy777
źródło
-1

Odnoszą się do tego GIST . Na pewno ci pomogę.

Aamish Baloch
źródło
9
Witaj w Server Fault! Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Gerald Schneider