私はインターネットからNGINXまたはUbuntuを使用していることを誰にも検出されないようにしたいと思います。サーバーをスキャンして、使用しているツールを検出するツール(BuiltWithなど)があります。また、いくつかのクラッキングツールは検出を助けるかもしれません。外部からこの情報をすべて隠すことができる最高の/最も近いものは何ですか?
追加することで、NginxとOSのバージョンの出力を停止できます。
server_tokens off;
http
、server
、またはlocation
コンテキストに。
または、サーバーヘッダーを完全に削除する場合は、ヘッダーがNginxソースでハードコーディングされており、このモジュールでHTTPヘッダーを変更できるため、Headers Moreモジュールを組み込んでNginxをコンパイルする必要があります。
more_clear_headers Server;
ただし、システムの識別に役立つ可能性のある実装を介してサーバーが誤って実行する多くの隠れた方法があります。例えば不正なSSLリクエストに応答する方法。これを防ぐ実用的な方法はわかりません。
私が提案するかもしれないもののいくつか:
DebianまたはUbuntuでapt-getを使用してnginxをインストールした場合、「Server」ヘッダーを設定またはクリアするには、パッケージnginx-extrasをインストールする必要がある場合があります。
これが完了したら、nginx.conf(通常は/etc/nginx/nginx.conf)に以下の行を追加できます。
「Server」ヘッダーを完全にクリアするには:
more_clear_headers Server;
カスタム文字列を「サーバー」として設定するには
more_set_headers 'Server: some-string-here';
@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 を使用してコードのセキュリティを強化することをお勧めします。
Ubuntuでカスタムフレーバーのnginxを実行する方法を長い間検討した後、luaモジュールをこれに使用できることに気付きました。
Ubuntu 14.04では、nginx-extras
パッケージをインストールすると、次のコマンドを使用してサーバーヘッダーを削除できます。
header_filter_by_lua 'ngx.header["server"] = nil';
これをhttpブロックにスローすると、すべてのリクエストでServer
ヘッダーが欠落します。
動作しない場合は、nginx -V
を実行して、luaモジュールがnginxのコピーにコンパイルされていることを確認してください。そうでない場合は、それを入手するために使用できる代替パッケージがある可能性があります。
header_filter_by_luaの代わりに、新しいディレクティブheader_filter_by_lua_blockを使用することをお勧めします中括弧({}
)。これにより、特殊文字をエスケープする必要はありません。
header_filter_by_lua_block { ngx.header["server"] = nil }
https://github.com/openresty/lua-nginx-module#header_filter_by_lua_block
何よりもまず、Headers More Nginxとして追加のモジュールを使用する理由は何ですか?サーバーヘッダーを非表示にするだけです。数行であれば、単純なパッチで同じ解決策を見つけることができます。
追加のモジュールを使用すると、不安定になる可能性があります(ご使用の環境でどの程度うまくテストされていますか?他のモジュールなどでテストされています)。
第二に。このスレッドは、返信279389として、Nginxコードを調整してサーバーヘッダーを変更する方法を説明しています。問題は、彼らがHTTP/2を忘れたことです。つまり、何も変わりません。サーバーヘッダーは引き続き表示されます。
少ないほど良いです。 Ok認めます、私も長い間良い解決策を探していました。しかし、ようやく見つかりました:
私はようやくその厄介なNginxサーバーヘッダーから引き換えられました。
このbash関数をnginxソースコードフォルダーで実行します。 nginx- $ versionでは、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
}