すべてのサーバー/ OS情報を非表示にできますか?


80

私は、NGINXを使用していることや、インターネットからUbuntuを使用していることを誰にも検出できないようにしています。サーバーをスキャンして使用しているツールを検出するツール(BuiltWithなど)があります。また、一部のクラッキングツールが検出に役立つ場合があります。この情報をすべて外部から隠すことができるのに最も良い/最も近いものは何ですか?

回答:


115

以下を追加することで、NginxとOSのバージョンの出力を停止できます。

server_tokens off;

またはコンテキスト。httpserverlocation

または、サーバーヘッダーを完全に削除する場合は、ヘッダーがNginxソースにハードコーディングされているため、Headers Moreモジュールを使用してNginxをコンパイルする必要があります。このモジュールでは、httpヘッダーを変更できます。

 more_clear_headers Server;

ただし、システムを識別するのに役立つ可能性のある実装を介してサーバーが偶然に実行する多くの隠れた方法があります。例:不正なSSL要求への応答方法。これを防ぐ実用的な方法は見当たりません。

私が提案するかもしれないことのいくつか:

  • エラーテンプレートの変更
  • 必要なサービスを除くすべてのポートをブロックする

15
同意した。たとえば、nmapのOS検出を見てください。これは、IP / TCP要求に対するターゲットホストの応答を見て、そのようにOSを決定できます。これに努力する価値は本当にありません。
EEAA

6
ErikAのアドバイスに+1。あいまいさによるセキュリティに依存するのではなく、できる限り最善の方法でサーバーをセキュリティ保護する方が良いでしょう。
アンディスミス

4
サーバートークンはバージョン番号のみをオフにします。Nginxでは、ヘッダーを完全に削除することはできません。
マーティンフィヨルドヴァルド

45
「バージョン番号なし」や「サーバーベンダー名なし」などの重要なセキュリティ要素を完全に無視するのは、初心者の間違いです。もちろん、あいまいさのセキュリティは、セキュリティ自身のために何もしませんが、それは、少なくとも最も世俗的な、単純な攻撃ベクトルから保護します地獄のよう確認してください-あいまいを通じてセキュリティがあり、必要なステップ、それは最初のものであってもよいし、必要があります決して最後のセキュリティになることはありませ測定-それを完全にスキップすることは非常に悪い間違いです。バージョン固有の攻撃ベクトルが知られている場合、最も安全なWebサーバーでさえクラックされる可能性があります。
専門家

1
まだ迷惑なサーバ名「nginxのは、」301リダイレクト応答のボディに戻り、これまでのところ、ルールは301のために動作しないカスタムHTMLテンプレートを使用することを避けるために、何の方法を見つけていないがある
ギヨームペロー

31

DebianまたはUbuntuでapt-getを使用してnginxをインストールした場合、「サーバー」ヘッダーを設定またはクリアするためにパッケージ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
Brandon

この答えにはさらに投票が必要です。おそらくディレクティブは、confファイル(と思う)のHTTPブロックの内側に配置する必要があることに注意すべきであるが
アンディ・

2
これはで動作しますhttpserverlocation、および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;ファイルの先頭に追加するだけ です。
ラップスタック

18

@Martin F.はい。ソースからコンパイルし、ソースをコンパイルする前に必要なものを変更する必要があります。

解凍した最後の安定バージョンをダウンロードし、ファイルの場所がわかっていると思います。その場合は、次の手順を実行します。

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を使用してコードのセキュリティを強化することをお勧めします。


4
+1、ありがとう。@ Andy'sを公式に任せます。これはアプローチが簡単だからですが、これはすばらしい情報です。
-orokusaki

スホシンを意味すると思います。
カブトムシ

7

ubuntuでnginxのカスタムフレーバーを実行する方法を十分に検討した後、luaモジュールを使用できることに気付きました。

Ubuntu 14.04では、nginx-extrasパッケージをインストールする場合、次を使用してサーバーヘッダーを削除できます。

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

これをhttpブロックにスローすると、すべてのリクエストにServerヘッダーがなくなります。

動作しないnginx -V場合は、luaモジュールがnginxのコピーにコンパイルされていることを確認するために実行してください。そうでない場合は、入手に使用できる代替パッケージがある可能性があります。


これがDebian Jessie 8.5 nginxバージョンで動作することを確認:nginx / 1.6.2
Brandon

1
Debianのテストでは、これは動作しないように見えますが、インストールnginx-extramore_set_headers "Server: whatever";動作しているので、+ 1:D
Shautieh

これを機能させるには、LUAを有効にするだけです。Tnx
グラビッチ


1

何よりもまず、追加のモジュールをHeaders More Nginxとして使用するのはなぜですか?サーバーヘッダーを非表示にするだけです。数行あれば、簡単なパッチで同じソリューションに到達できます。

追加のモジュールを使用すると、不安定になる(環境でどの程度テストされているか、他のモジュールなどでテストされる)、またはセキュリティが不安定になる(このモジュールはバグやセキュリティ関連の修正で定期的に更新されますか?)

第二に。このスレッドでは、Nginxコードを調整してサーバーヘッダーを変更する方法について、返信279389として説明しています。問題は、HTTP / 2を忘れたことです。つまり、何も変わりません。サーバーヘッダーは引き続き表示されます。

少ないほど多いほど良い。はい、私は長い間、良い解決策を探していました。しかし、最終的に見つかりました:

Nginxサーバーヘッダー削除パッチ

私はついにその迷惑なNginxサーバーヘッダーから引き換えられました。


0

nginxソースコードフォルダーでこのbash関数を実行します。src /ではなく、nginx- $ versionで。

この答えに基づい

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
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.