Вопрос: Можно ли скрыть всю информацию о сервере / os?


Я не хочу, чтобы кто-нибудь мог обнаружить, что я использую NGINX или даже Ubuntu из Интернета. Существуют инструменты (такие как BuiltWith), которые сканируют серверы, чтобы определить, какие инструменты они используют. Кроме того, некоторые инструменты для взлома могут помочь с отключением. Что самое лучшее / ближе всего к тому, что я могу скрывать всю эту информацию извне?


51
2017-12-19 21:00


Источник




Ответы:


Вы можете остановить его вывод версии Nginx и ОС, добавив

server_tokens off;

к http, server, или location контекст.

Если вы хотите полностью удалить заголовок сервера, вам нужно скомпилировать Nginx с модулем Headers More, поскольку заголовок жестко закодирован в источнике Nginx, и этот модуль позволяет изменять любые заголовки HTTP.

 more_clear_headers Server;

Тем не менее, существует множество скрытых способов, с помощью которых серверы могут случайно выполнить свою реализацию, что может помочь идентифицировать систему. например Как он реагирует на плохой запрос SSL. Я не вижу практического способа предотвратить это.

Некоторые из вещей, которые я мог бы предложить:

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

75
2017-12-19 21:18



Согласовано. Посмотрите, например, на обнаружение ОС nmap - это касается ответов целевых хостов на запросы IP / TCP и может определить ОС таким образом. Это действительно не стоит прилагать к этому усилий. - EEAA♦
+1 по совету Эрики. Лучше всего защитить свой сервер, насколько это возможно, вместо того, чтобы полагаться на безопасность через неясность. - Andy Smith
@ErikA, @Andy, @ Энди Смит - спасибо, ребята. - orokusaki
Идентификаторы сервера только выключают номер версии. Nginx не позволяет полностью удалить заголовок. - Martin Fjordvald
игнорируя важные факторы безопасности, такие как «без номеров версий» и, возможно, даже «без имени поставщика серверов» полностью - это ... ошибка начинающих. Конечно безопасность через безвестность ничего не делает для вашей безопасности но он уверен, что ад по крайней мере защитит от самых мирских, упрощенных атак - безопасность через неясность - это необходимо шаг, он может быть первым и должен никогда быть последним измерением безопасности, полностью исключить очень плохая ошибка, даже самые безопасные веб-серверы могут быть взломаны, если известен вектор атаки, зависящий от версии. - specializt


Если вы установили nginx, используя apt-get в Debian или Ubuntu, вам может потребоваться установить пакет nginx-extras для установки или очистки заголовка «Сервер»

Как только это будет сделано, вы можете добавить строки ниже в nginx.conf (обычно /etc/nginx/nginx.conf):

Чтобы полностью очистить заголовок «Сервер»:

more_clear_headers Server; 

Чтобы задать пользовательскую строку как «Сервер»,

more_set_headers 'Server: some-string-here';

18
2018-03-29 04:19



подтвердил more_clear_headers Server; работает также на версии Debian Jessie 8.5 nginx: nginx / 1.6.2 - Brandon
Этот ответ требует большего количества оборотов. Хотя, возможно, следует отметить, что директива должна быть помещена внутри блока http файла conf (я думаю) - Andy
Это работает в http, server, location, а также location if контексты. Источник: Документация ngx_headers_more - Kelvin


@ Мартин Ф. Да, да. Вам придется скомпилировать его из источника и изменить то, что необходимо перед компиляцией источника.

Я предполагаю, что вы загрузили последнюю стабильную версию, которую вы распаковали, и знаете, где находятся файлы. Если это так, сделайте следующее:

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 по своей природе небезопасен, и Linux тоже. Вне курса linux может быть довольно безопасным, если все необходимые меры принимаются для обеспечения достойной безопасности. Что касается PHP, я бы рекомендовал использовать Suoshin чтобы упростить безопасность вашего кода.


16
2018-06-11 04:36



+1, спасибо. Я уезжаю @ Энди как официальный, просто из-за более легкого подхода, но это отличная информация. - orokusaki
Я думаю, вы имеете в виду Сухозина. - Beetle


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

На ubuntu 14.04, если вы установите nginx-extras пакета вы можете удалить заголовок сервера, используя:

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

Бросьте это в блок http, и в каждом запросе будет отсутствовать Server заголовок.

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


5
2017-12-18 05:45



Подтвердил, что это работает в версии Debian Jessie 8.5 nginx: nginx / 1.6.2 - Brandon
При тестировании debian это не работает, но установка nginx-extra сделал more_set_headers "Server: whatever"; работа, поэтому +1: D - Shautieh


Вместо 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


4
2017-10-02 07:08





Запустите эту функцию 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
}

0
2017-10-27 20:07





Прежде всего: Зачем использовать дополнительный модуль как Headers More Nginx? Только для скрытия заголовка сервера. Если несколько строк, простой патч может достичь того же решения для вас.

Поскольку использование дополнительного модуля может привести к нестабильности (насколько хорошо он был протестирован с вашей средой? С другими вашими модулями и т. Д.) Или неуверенностью (этот модуль регулярно обновляется с ошибками и / или исправлениями, связанными с безопасностью?)

Во-вторых. Этот поток описывает как ответ 279389, как вы можете настроить код Nginx для изменения заголовка сервера. Проблема в том, что они забыли HTTP / 2. Короче говоря, ничего не изменится. Заголовок сервера все равно будет видимым.

Меньше - это лучше. Хорошо, я признаю, что давно искал хорошее решение. Но, наконец, нашли:

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

Я, наконец, выкуплен из этого раздражающего заголовка сервера Nginx.


0
2018-06-18 23:25





См. Это суть, Конечно, поможет вам.


-1
2018-06-02 09:30



Добро пожаловать в Server Fault! Хотя это теоретически может ответить на вопрос, было бы предпочтительнее чтобы включить здесь основные части ответа и предоставить ссылку для справки. - Gerald Schneider