Чи можу я приховати всю інформацію про сервер / ОС?


78

Я не хочу, щоб хтось міг виявити, що я використовую NGINX або навіть Ubuntu з Інтернету. Там є інструменти (наприклад, BuiltWith), які сканують сервери, щоб виявити, які інструменти вони використовують. Також деякі інструменти для розлому можуть допомогти у виявленні. Що найкраще / найближче до того, що я можу отримати, щоб приховати всю цю інформацію ззовні?

Відповіді:


114

Ви можете зупинити його виведення версії Nginx та ОС, додавши

server_tokens off;

до http, serverабо locationконтексту.

Або якщо ви хочете повністю видалити заголовок сервера, вам потрібно скомпілювати Nginx з модулем Headers More, оскільки заголовок жорстко закодований у джерелі Nginx, і цей модуль дозволяє змінювати будь-які заголовки http.

 more_clear_headers Server;

Однак існує багато прихованих способів роботи серверів випадково через їх реалізацію, що може допомогти визначити систему. наприклад, як він відповідає на поганий SSL-запит. Я не бачу практичного способу запобігання цьому.

Деякі речі, які я можу запропонувати:

  • зміни шаблонів помилок
  • заблокувати всі порти, крім необхідних послуг

14
Домовились. Наприклад, подивіться на виявлення ОС nmap - це розглядає відповіді цільових хостів на запити IP / TCP і може визначати ОС таким чином. Справді не варто докладати зусиль для цього.
ЄЕАА

6
+1 за порадою ErikA. Краще захистити свій сервер якнайкраще, ніж можна, ніж покладатися на безпеку через неясність.
Енді Сміт

4
Серверні жетони вимикають лише номер версії. Nginx не дозволяє повністю видалити заголовок.
Мартін Фьордвальд

44
ігнорування важливих факторів безпеки, таких як "відсутні номери версій" і, мабуть, навіть "відсутність імені постачальника сервера", цілком є ​​просто помилкою початківців. Звичайно, безпека через невідомість нічого не робить для самої вашої безпеки, але вона впевнена, оскільки пекло захистить принаймні найпростіші, спрощені вектори атак - безпека через неясність - це необхідний крок, це може бути першим і ніколи не повинен бути останнім захистом вимірювання -різання його повністю є дуже поганою помилкою, навіть найбезпечніші веб-сервери можуть бути зламані, якщо відомий векторний тип атаки.
спеціаліз

1
Досі набридливе ім’я сервера "Nginx" повернулося в тілі відповіді на переадресацію 301 і не знайшов способу уникнути цього поки що правило використання користувальницького HTML-шаблону не працює для 301.
Гійом Перро

30

Якщо ви встановили nginx за допомогою apt-get в Debian або Ubuntu, можливо, вам доведеться встановити пакет nginx-extras для встановлення чи очищення заголовка "Сервер"

Після цього ви можете додати рядки нижче в nginx.conf (зазвичай /etc/nginx/nginx.conf):

Щоб повністю очистити заголовок "Сервер":

more_clear_headers Server; 

Встановити спеціальний рядок як "Сервер"

more_set_headers 'Server: some-string-here';

1
Підтверджено також more_clear_headers Server;працює на Debian Jessie 8.5 nginx версія: nginx / 1.6.2
Брендон

Ця відповідь потребує більше результатів. Хоча, можливо, слід зазначити, що директиву потрібно розмістити всередині блоку http файлу conf (я думаю)
Енді,

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;на початку конфігураційного файлу.
rapstacke

17

@Martin F. Так, це так. Вам доведеться зібрати його з джерела та змінити те, що потрібно, перш ніж компілювати джерело.

Я припускаю, що ви завантажили останню стабільну версію, ви розпакували її, і ви знаєте, де файли. Якщо це так, зробіть наступне:

nano src/http/ngx_http_header_filter_module.c

Тоді шукайте рядок 48, якщо я пам'ятаю правильно.

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

Замініть nginx на MyWeverServerNameIWant, наприклад

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

Тоді

nano src/core/nginx.h 

шукайте лінію

#define NGINX_VER          "nginx/" NGINX_VERSION

змініть "nginx /" на "MyWeverServerNameIWant /", щоб воно прочитало

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

Нарешті, якщо ви хочете, також змініть номер версії

шукайте рядок #define NGINX_VERSION "1.0.4"

і змінити "1.0.4" для будь-якої версії, яку ви хочете. Наприклад, він буде читати

#define NGINX_VERSION      "5.5.5"

Сподіваюся, це допомагає. Тим не менш. Захист сервера виходить далеко за межі того, що не показується, що працює. PHP від ​​природи небезпечний, як і Linux. Безумовно, Linux може бути досить безпечним, якщо будуть вжиті всі необхідні заходи для досягнення гідної безпеки. Що стосується PHP, я б рекомендував використовувати Suoshin для посилення безпеки вашого коду.


4
+1, спасибі Я залишаю @ Енді як офіційний, просто через простіший підхід, але це відмінна інформація.
orokusaki

Я думаю, ти маєш на увазі Сухосіна.
Жук

7

Після багато часу, розробленого, як зробити власний смак nginx на ubuntu, я зрозумів, що ви можете використовувати для цього модуль lua.

Якщо встановити nginx-extrasпакунок ubuntu 14.04, ви можете видалити заголовок сервера, використовуючи:

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

Киньте це в блоці http, і кожен запит не матиме Serverзаголовка.

Якщо це не працює, запустіть, nginx -Vщоб перевірити, чи є у вас копія модуля lua зібраний у вашу копію nginx. Якщо ні, то, ймовірно, альтернативний пакет, який ви можете використовувати, щоб отримати його.


Підтверджено це на Debian Jessie 8.5 nginx версія: nginx / 1.6.2
Брендон

1
На тестуванні debian це, здається, не працює, але встановлення nginx-extraзроблених more_set_headers "Server: whatever";робіт, тому +1: D
Shautieh

Вам потрібно лише включити LUA для цього. Tnx
glavić

6

Замість header_filter_by_lua рекомендується використовувати нову директиву header_filter_by_lua_block, яка вводить джерело Lua безпосередньо між фігурними дужками ( {}). З цим не потрібно уникати спеціальних символів.

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

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


1

Перше і головне: навіщо використовувати додатковий модуль як заголовки Більше Nginx? Тільки щоб приховати заголовок сервера. Якщо кілька рядків, простий патч може досягти того самого рішення.

Оскільки використання додаткового модуля може призвести до нестабільності (наскільки добре він був протестований у вашому оточенні? З іншими модулями тощо) або незахищеності (регулярно оновлюється цей модуль виправленнями з помилками та / або безпекою?)

По-друге. Цей потік описує як відповідь 279389, як можна налаштувати код Nginx для зміни заголовка сервера. Проблема в тому, що вони забули HTTP / 2. Словом, нічого не зміниться. Заголовок сервера все ще буде видно.

Що менше, то краще. Добре зізнаюся, я також довго шукав хорошого рішення. Але нарешті знайшли:

Патч видалення заголовка сервера Nginx

Нарешті я викупився з цього докучливого заголовка сервера Nginx.


0

Запустіть цю функцію bash у папці вихідного коду 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
}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.