Tüm sunucu / os bilgilerini gizleyebilir miyim?


80

Kimsenin internetten NGINX veya hatta Ubuntu kullandığımı tespit etmesini istemiyorum. Hangi araçları kullandıklarını tespit etmek için sunucuları tarayan araçlar var (BuiltWith gibi). Ayrıca, bazı çatlama araçları algılamada yardımcı olabilir. Tüm bu bilgileri dışardan gizleyebileceğim en iyi / en yakın şey nedir?

Yanıtlar:


115

Ekleyerek Nginx ve OS sürümünü çıkarmayı durdurabilirsiniz

server_tokens off;

bir http, serverveya locationbağlamına.

Veya Sunucu başlığını tamamen kaldırmak isterseniz, başlık Nginx kaynağında kodlanmış olduğundan ve bu modül herhangi bir http başlığını değiştirebildiğinden, Nginx'i Başlık Başlığı modülüyle derlemeniz gerekir.

 more_clear_headers Server;

Bununla birlikte, sunucuların kendi uygulamalarıyla sistemin tanımlanmasına yardımcı olabilecek kaza yoluyla gerçekleştirdikleri birçok gizli yol vardır. örn. Kötü bir SSL isteğine nasıl cevap verir. Bunu önlemenin pratik bir yolunu görmüyorum.

Önerebileceğim bazı şeyler:

  • hata şablonlarını değiştir
  • ihtiyaç duyulan servisler dışındaki tüm portları engelle

15
Kabul. Örneğin nmap'ın işletim sistemi tespitine bakın - bu hedef ana bilgisayarın IP / TCP isteklerine verdiği tepkilere bakar ve işletim sistemini bu şekilde belirleyebilir. Buna çaba sarf etmeye değmez.
EEAA

6
ErikA'nın tavsiyesi üzerine +1. Sunucunuzu, gizlilik yoluyla güvenceye güvenmek yerine, elinizden geldiğince en iyi şekilde korumak için daha iyi.
Andy Smith,

4
Sunucu belirteçleri yalnızca sürüm numarasını kapatır. Nginx, başlığın tamamen kaldırılmasına izin vermiyor.
Martin Fjordvald

45
"sürüm numarası yok" ve muhtemelen "sunucu satıcısının adı yok" gibi önemli güvenlik faktörlerini göz ardı etmek sadece ... yeni başlayanlar için bir hata. Tabii ki gizlilik yoluyla güvenlik, güvenliğinizin kendisi için hiçbir şey yapmaz, ancak en azından en sıradan, basit saldırı vektörlerine karşı cehennem koruyacağından emin olun - gizlilik yoluyla güvenlik gerekli bir adımdır, ilk olabilir ve asla son güvenlik olmamalıdır ölçümü-tamamen atlamak çok kötü bir hatadır, versiyona özel bir saldırı vektörü biliniyorsa en güvenli web sunucuları bile kırılabilir.
specializt

1
Hareketsiz sinir bozucu bir sunucu adı "Nginx" 301 yönlendirmesi yanıt metninde döndü ve şimdiye kadar, kural 301 için çalışmaz özel html şablonu kullanmak önlemek için hiçbir yol buldu yoktur
Guillaume Perrot

31

Nginx'i Debian veya Ubuntu'da apt-get kullanarak yüklediyseniz, "Server" başlığını ayarlamak veya silmek için nginx-extras paketini kurmanız gerekebilir

Bu yapıldıktan sonra, aşağıdaki satırları nginx.conf (genellikle /etc/nginx/nginx.conf) içine ekleyebilirsiniz:

"Sunucu" başlığını tamamen temizlemek için:

more_clear_headers Server; 

Özel bir dizeyi "Sunucu" olarak ayarlamak için

more_set_headers 'Server: some-string-here';

1
Onaylanan more_clear_headers Server;Debian Jessie 8.5 ile de çalışıyor nginx sürümü: nginx / 1.6.2
Brandon

Bu cevabın daha fazla oyuna ihtiyacı var. Her ne kadar direktifin conf dosyasının http bloğunun içine yerleştirilmesi gerektiği unutulmamasına rağmen (sanırım)
Andy

2
Bu çalışır http, server, location, ve location ifbağlamlar. Kaynak: ngx_headers_more belgeleri
Kelvin

1
sudo apt-get install nginx-extras
Ubuntu

Benim için bu başarısız oldu unknown directive "more_set_headers". Modülün açıkça açılmasını sağlayarak çözüldü /etc/nginx/nginx.conf. Sadece load_module modules/ngx_http_headers_more_filter_module.so;config dosyasının başına ekleyin .
rapstacke

18

@Martin F. Evet öyle. Bunu kaynaktan derlemeniz ve kaynağı derlemeden önce gerekenleri değiştirmeniz gerekecektir.

Açtığınız son kararlı sürümü indirdiğinizi ve dosyaların nerede olduğunu bildiğinizi varsayıyorum. Bu durumda, aşağıdakileri yapın:

nano src/http/ngx_http_header_filter_module.c

Doğru hatırlıyorsam 48 numaralı hattı ara.

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

Nginx'i MyWhateverServerNameIWant ile değiştirin, örn.

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

Sonra

nano src/core/nginx.h 

çizgiyi ara

#define NGINX_VER          "nginx/" NGINX_VERSION

"nginx /" i "MyWhateverServerNameIWant /" olarak değiştir, böylece okuyacak

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

Son olarak, sürüm numarasını da değiştirmek isterseniz

#define NGINX_VERSION "1.0.4" satırını arayın

ve istediğiniz sürüm için "1.0.4" değerini değiştirin. Örneğin okuyacak

#define NGINX_VERSION      "5.5.5"

Umarım yardımcı olur. Yine. Bir sunucuyu korumak, neyin çalıştığını göstermemenin ötesine geçer. PHP doğası gereği güvensiz ve linux da öyle. Ders dışı linux, uygun bir güvenlik sağlamak için gerekli tüm önlemler alınırsa oldukça güvenli olabilir. PHP ile ilgili olarak, kodunuzun güvenliğini sağlamlaştırmak için Suoshin'i kullanmanızı tavsiye ederim .


4
+1, teşekkürler. @ Andy'den resmi olarak ayrılıyorum, çünkü daha kolay bir yaklaşım yüzünden, ama bu mükemmel bir bilgi.
orokusaki

Bence Suhosin demek istiyorsun.
Böcek

7

Ubuntu'da nginx'in özel bir tadı yapmayı düşündüğüm çok fazla zaman sonra bunun için lua modülünü kullanabileceğinizi fark ettim.

Ubuntu 14.04'te nginx-extraspaketi kurarsanız aşağıdakileri kullanarak sunucu başlığını kaldırabilirsiniz:

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

Bunu http bloğuna atın ve her istekte bir Serverbaşlık bulunmayacaktır .

nginx -VLua modülünün nginx kopyanıza derlendiğini doğrulamak için çalışmazsa . Değilse, almak için kullanabileceğiniz alternatif bir paket olabilir.


Bunun Debian Jessie 8.5 nginx versiyonunda çalıştığını doğruladı: nginx / 1.6.2
Brandon

1
Debian test günü bu işe görünmüyor ANCAK kurduktan nginx-extrayapılan more_set_headers "Server: whatever";çalışmalar, bu nedenle 1: D
Shautieh

Bunun çalışması için sadece LUA'nın etkin olması gerekir. Tnx
glavić


1

Birincisi ve en önemlisi: Neden fazladan bir modül başlıkları More Nginx olarak kullanıyor? Yalnızca sunucu başlığını gizlemek için. Birkaç satır varsa, basit yama sizin için aynı çözüme ulaşabilir.

Fazladan bir modül kullanmak, kararsızlığa (ortamınızla ne kadar iyi bir şekilde test edildi? Diğer modüllerinizle vb. Test edildi) veya güvensizliğe (bu modül düzenli olarak hata ve / veya güvenlikle ilgili düzeltmelerle güncelleniyor mu?) Neden olabilir.

İkincisi. Bu iş parçacığı, 279389 numaralı yanıtı kullanarak, sunucu başlığını değiştirmek için Nginx kodunu nasıl ayarlayabileceğinizi açıklar. Sorun şu ki, HTTP / 2'yi unuttular. Kısacası, hiçbir şey değişmeyecek. Sunucu başlığı hala görünür durumda olacak.

Daha az, daha iyidir. Tamam, itiraf ediyorum, uzun zamandır iyi bir çözüm arıyordum. Ama sonunda buldum:

Nginx sunucu başlığı temizleme düzeltme eki

Sonunda sinir bozucu Nginx sunucu başlığından kurtarıldım.


0

Bu bash işlevini nginx kaynak kodu klasöründe çalıştırın. Nginx- $ sürümünde, src / 'de değil.

Tabanlı bu cevabına .

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
}

-1

Bu özete bakın . Elbette sana yardım edeceğim.


9
Sunucu Arızasına Hoşgeldiniz! Bu soruyu teorik olarak cevaplayabilse de , cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak tercih edilir.
Gerald Schneider
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.