Bisakah saya menyembunyikan semua info server / os?

80

Saya tidak ingin ada orang yang dapat mendeteksi bahwa saya menggunakan NGINX atau bahkan Ubuntu dari internet. Ada alat di luar sana (seperti BuiltWith) yang memindai server untuk mendeteksi alat apa yang mereka gunakan. Juga, beberapa alat cracking mungkin membantu dengan mendeteksi. Apa yang terbaik / paling dekat dengan yang saya bisa sembunyikan semua info ini dari luar?

orokusaki
sumber

Jawaban:

115

Anda dapat menghentikannya dengan mengeluarkan versi Nginx dan OS dengan menambahkan

server_tokens off;

ke http, serveratau locationkonteks.

Atau jika Anda ingin menghapus header Server sepenuhnya, Anda perlu mengkompilasi Nginx dengan modul Headers More, karena header dikodekan dalam sumber Nginx, dan modul ini memungkinkan mengubah header http apa pun.

 more_clear_headers Server;

Namun, ada banyak cara tersembunyi yang dilakukan server secara tidak sengaja melalui implementasinya yang dapat membantu mengidentifikasi sistem. mis. Bagaimana menanggapi permintaan SSL yang buruk. Saya tidak melihat cara praktis untuk mencegah hal ini.

Beberapa hal yang mungkin saya sarankan:

  • ubah template kesalahan
  • blokir semua port kecuali layanan yang dibutuhkan
Andy
sumber
15
Sepakat. Sebagai contoh, lihat deteksi OS nmap - ini melihat respons host target terhadap permintaan IP / TCP dan dapat menentukan OS dengan cara itu. Ini benar-benar tidak layak dilakukan dalam hal ini.
EEAA
6
+1 atas saran ErikA. Lebih baik mengamankan server Anda sebaik mungkin daripada mengandalkan keamanan melalui ketidakjelasan.
Andy Smith
4
Token server hanya mematikan nomor versi. Nginx tidak memungkinkan untuk menghapus header sepenuhnya.
Martin Fjordvald
45
mengabaikan faktor keamanan penting seperti "tidak ada nomor versi" dan mungkin bahkan "tidak ada nama vendor server" seluruhnya hanyalah ... kesalahan pemula. Tentu saja keamanan melalui ketidakjelasan tidak melakukan apa pun untuk keamanan Anda sendiri, tetapi tentu saja setidaknya akan melindungi terhadap vektor serangan yang paling biasa dan sederhana - keamanan melalui ketidakjelasan adalah langkah yang perlu , mungkin merupakan yang pertama dan seharusnya tidak pernah menjadi keamanan terakhir pengukuran-melewatkannya sepenuhnya adalah kesalahan yang sangat buruk, bahkan webservers yang paling aman dapat dipecahkan jika vektor serangan versi-spesifik diketahui.
spesialis
1
Masih ada nama server yang menjengkelkan "Nginx" yang dikembalikan dalam tubuh dari 301 redirect response dan tidak menemukan cara untuk menghindarinya sejauh ini, aturan untuk menggunakan templat html kustom tidak berfungsi untuk 301.
Guillaume Perrot
31

Jika Anda telah menginstal nginx menggunakan apt-get di Debian atau Ubuntu, Anda mungkin perlu menginstal paket nginx-ekstra untuk mengatur atau menghapus header "Server"

Setelah ini selesai, Anda dapat menambahkan baris di bawah ini di nginx.conf (biasanya /etc/nginx/nginx.conf):

Untuk menghapus tajuk "Server" sekaligus:

more_clear_headers Server; 

Untuk menetapkan string khusus sebagai "Server"

more_set_headers 'Server: some-string-here';
packetlord
sumber
1
Dikonfirmasi juga more_clear_headers Server;berfungsi pada Debian Jessie 8.5 nginx versi: nginx / 1.6.2
Brandon
Jawaban ini perlu lebih banyak upvotes. Meskipun mungkin perlu dicatat bahwa arahan perlu ditempatkan di dalam blok http dari file conf (saya pikir)
Andy
2
Ini bekerja di http, server, location, dan location ifkonteks. Sumber: dokumentasi ngx_headers_more
Kelvin
1
Untuk pengguna ubuntu: sudo apt-get install nginx-extras dan kemudian setel tajuk
jchnxu
Bagi saya ini gagal dengan unknown directive "more_set_headers". Memecahkannya dengan mengaktifkan modul secara eksplisit di /etc/nginx/nginx.conf. Cukup tambahkan load_module modules/ngx_http_headers_more_filter_module.so;di awal file konfigurasi.
rapstacke
18

@ Martin F. Ya, benar. Anda harus mengkompilasinya dari sumber dan mengubah apa yang diperlukan sebelum mengkompilasi sumber.

Saya berasumsi Anda mengunduh versi stabil terakhir yang Anda dekompresi dan Anda tahu di mana file-file itu. Jika itu masalahnya, lakukan hal berikut:

nano src/http/ngx_http_header_filter_module.c

Kemudian cari baris 48 jika saya ingat dengan benar.

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

Ganti nginx dengan misalnya MyWhthingServerNameIWant mis

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

Kemudian

nano src/core/nginx.h 

mencari garis

#define NGINX_VER          "nginx/" NGINX_VERSION

ubah "nginx /" menjadi "MyWh whateverServerNameIWant /" jadi ia akan membaca

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

Akhirnya jika Anda ingin juga mengubah nomor versi

cari baris #define NGINX_VERSION "1.0.4"

dan ubah "1.0.4" untuk versi apa pun yang Anda inginkan. Misalnya akan membaca

#define NGINX_VERSION      "5.5.5"

Semoga ini bisa membantu. Namun. Mengamankan server jauh melampaui tidak menunjukkan apa yang sedang berjalan. PHP pada dasarnya tidak aman, demikian juga linux. Tentu saja linux bisa sangat aman jika semua langkah yang diperlukan diambil untuk mencapai keamanan yang layak. Sejauh menyangkut PHP, saya akan merekomendasikan menggunakan Suoshin untuk membantu memperkeras keamanan kode Anda.

Martin M
sumber
4
+1, terima kasih. Saya meninggalkan @ Andy sebagai resminya, hanya karena pendekatan yang lebih mudah, tetapi ini adalah informasi yang sangat baik.
orokusaki
Saya pikir maksud Anda Suhosin.
Beetle
7

Setelah banyak waktu mencari cara untuk membuat rasa nginx khusus di ubuntu saya menyadari Anda dapat menggunakan modul lua untuk ini.

Di ubuntu 14.04 jika Anda menginstal nginx-extraspaket, Anda dapat menghapus header server dengan menggunakan:

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

Lemparkan ini di blok http dan setiap permintaan tidak memiliki Serverheader.

Jika tidak berhasil jalankan nginx -Vuntuk memverifikasi bahwa Anda memiliki modul lua dikompilasi ke dalam salinan nginx Anda. Jika tidak, kemungkinan ada paket alternatif yang bisa Anda gunakan untuk mendapatkannya.

matschaffer
sumber
Dikonfirmasi ini berfungsi di Debian Jessie 8.5 nginx versi: nginx / 1.6.2
Brandon
1
Pada pengujian debian ini sepertinya tidak berhasil TETAPI menginstal pekerjaan nginx-extrabuatan more_set_headers "Server: whatever";, jadi +1: D
Shautieh
Anda hanya perlu LUA diaktifkan agar ini berfungsi. Tnx
glavić
1

Pertama dan terpenting: Mengapa menggunakan modul tambahan sebagai Header More Nginx? Hanya untuk menyembunyikan header server. Jika beberapa baris, tambalan sederhana dapat mencapai solusi yang sama untuk Anda.

Seperti menggunakan modul tambahan dapat mengakibatkan ketidakstabilan (seberapa baik telah diuji dengan lingkungan Anda? Dengan modul Anda yang lain, dll) atau rasa tidak aman (apakah modul ini diperbarui secara berkala dengan bug dan / atau perbaikan terkait keamanan?)

Kedua. Utas ini menjelaskan sebagai balasan 279389 bagaimana Anda dapat menyesuaikan kode Nginx untuk mengubah header server. Masalahnya adalah mereka lupa HTTP / 2. Singkatnya, tidak ada yang akan berubah. Header server akan tetap terlihat.

Lebih sedikit lebih banyak lebih baik. Ok saya akui, saya juga sudah mencari solusi yang bagus untuk waktu yang lama. Tetapi akhirnya ditemukan:

Patch penghapusan header server Nginx

Saya akhirnya ditebus dari header server Nginx yang mengganggu itu.

Bertus Du Jang
sumber
0

Jalankan fungsi bash ini di folder kode sumber nginx. Dalam versi nginx- $, bukan di src /.

Berdasarkan jawaban ini .

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
}
orang asing777
sumber
-1

Lihat intisari ini . Tentunya akan membantu Anda.

Aamish Baloch
sumber
9
Selamat Datang di Kesalahan Server! Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Gerald Schneider