Tôi có thể ẩn tất cả thông tin máy chủ / os không?


80

Tôi không muốn bất cứ ai có thể phát hiện ra rằng tôi đang sử dụng NGINX hoặc thậm chí Ubuntu từ internet. Có những công cụ hiện có (chẳng hạn như BuildWith) quét các máy chủ để phát hiện những công cụ nào chúng đang sử dụng. Ngoài ra, một số công cụ bẻ khóa có thể giúp gỡ bỏ. Điều gì tốt nhất / gần nhất mà tôi có thể có được để ẩn tất cả thông tin này từ bên ngoài?

Câu trả lời:


115

Bạn có thể ngăn chặn nó xuất ra phiên bản Nginx và OS bằng cách thêm

server_tokens off;

để một http, serverhoặc locationbối cảnh.

Hoặc nếu bạn muốn loại bỏ hoàn toàn tiêu đề Máy chủ, bạn cần biên dịch Nginx với mô-đun Headers More, vì tiêu đề được mã hóa cứng trong nguồn Nginx và mô-đun này cho phép thay đổi bất kỳ tiêu đề http nào.

 more_clear_headers Server;

Tuy nhiên, có nhiều cách mà các máy chủ thực hiện một cách tình cờ thông qua việc triển khai chúng có thể giúp xác định hệ thống. ví dụ: Làm thế nào nó đáp ứng với một yêu cầu SSL xấu. Tôi không thấy một cách thực tế để ngăn chặn điều này.

Một số điều tôi có thể đề xuất:

  • thay đổi mẫu lỗi
  • chặn tất cả các cổng ngoại trừ các dịch vụ cần thiết

15
Đã đồng ý. Ví dụ, xem xét phát hiện HĐH của nmap - xem xét các phản hồi của máy chủ đích đối với các yêu cầu IP / TCP và có thể xác định HĐH theo cách đó. Nó thực sự không đáng để nỗ lực vào việc này.
EEAA

6
+1 về lời khuyên của ErikA. Tốt hơn là bảo mật máy chủ của bạn tốt nhất có thể thay vì dựa vào bảo mật thông qua che khuất.
Andy Smith

4
Mã thông báo máy chủ chỉ tắt số phiên bản. Nginx không cho phép loại bỏ hoàn toàn tiêu đề.
Martin Fjordvald

45
coi thường các yếu tố bảo mật quan trọng như "không có số phiên bản" và thậm chí có thể "hoàn toàn không có tên nhà cung cấp máy chủ" chỉ là ... một lỗi mới bắt đầu. Tất nhiên bảo mật thông qua che khuất không làm gì cho chính bảo mật của bạn nhưng chắc chắn rằng địa ngục ít nhất sẽ bảo vệ chống lại các vectơ tấn công đơn giản, trần tục nhất - bảo mật thông qua che khuất là một bước cần thiết , nó có thể là bước đầu tiên và không bao giờ nên là bảo mật cuối cùng đo lường - bỏ qua nó hoàn toàn là một sai lầm rất tệ, ngay cả các máy chủ web an toàn nhất cũng có thể bị bẻ khóa nếu biết một vectơ tấn công dành riêng cho phiên bản.
đặc biệt

1
Vẫn còn một tên máy chủ gây phiền nhiễu "Nginx" được trả về trong phần phản hồi chuyển hướng 301 và không có cách nào để tránh điều đó cho đến nay, quy tắc sử dụng mẫu html tùy chỉnh không hoạt động cho 301.
Guillaume Perrot

31

Nếu bạn đã cài đặt nginx bằng apt-get trong Debian hoặc Ubuntu, bạn có thể cần cài đặt gói nginx-bổ sung để đặt hoặc xóa tiêu đề "Máy chủ"

Khi điều này được thực hiện, bạn có thể thêm các dòng bên dưới trong nginx.conf (thường là /etc/nginx/nginx.conf):

Để xóa tiêu đề "Máy chủ" hoàn toàn:

more_clear_headers Server; 

Để đặt một chuỗi tùy chỉnh là "Máy chủ"

more_set_headers 'Server: some-string-here';

1
Xác nhận cũng more_clear_headers Server;hoạt động trên phiên bản Debian Jessie 8.5 nginx: nginx / 1.6.2
Brandon

Câu trả lời này cần nhiều upvote hơn. Mặc dù có lẽ cần lưu ý rằng chỉ thị cần được đặt bên trong khối http của tệp conf (tôi nghĩ)
Andy

2
Này hoạt động trong http, server, location, và location ifbối cảnh. Nguồn: tài liệu ngx_headftimemore
Kelvin

1
Đối với người dùng Ubuntu: sudo apt-get install nginx-extras và sau đó đặt tiêu đề
jchnxu

Đối với tôi điều này thất bại với unknown directive "more_set_headers". Giải quyết nó thông qua việc cho phép các mô-đun rõ ràng trong /etc/nginx/nginx.conf. Chỉ cần thêm load_module modules/ngx_http_headers_more_filter_module.so;vào đầu tập tin cấu hình.
rapstacke

18

@Martin F. Có nó. Bạn sẽ phải biên dịch nó từ nguồn và thay đổi những gì cần thiết trước khi biên dịch nguồn.

Tôi giả sử bạn đã tải xuống phiên bản ổn định cuối cùng mà bạn giải nén nó và bạn biết các tệp đang ở đâu. Nếu đó là trường hợp, làm như sau:

nano src/http/ngx_http_header_filter_module.c

Sau đó tìm dòng 48 nếu tôi nhớ chính xác.

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

Thay nginx bằng MyWhthingServerNameIWant, vd

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

Sau đó

nano src/core/nginx.h 

tìm dòng

#define NGINX_VER          "nginx/" NGINX_VERSION

thay đổi "nginx /" thành "MyWhthingServerNameIWant /" để nó sẽ đọc

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

Cuối cùng nếu bạn cũng muốn thay đổi số phiên bản

tìm dòng #define NGINX_VERSION "1.0.4"

và thay đổi "1.0.4" cho bất kỳ phiên bản nào bạn muốn. Ví dụ nó sẽ đọc

#define NGINX_VERSION      "5.5.5"

Hy vọng nó giúp. Tuy nhiên. Bảo mật một máy chủ vượt xa không hiển thị những gì đang chạy. PHP về bản chất là không an toàn, và linux cũng vậy. Khóa học linux có thể khá an toàn nếu tất cả các biện pháp cần thiết được thực hiện để đạt được một bảo mật tốt. Theo như PHP có liên quan, tôi khuyên bạn nên sử dụng Suoshin để giúp tăng cường bảo mật mã của bạn.


4
+1, cảm ơn. Tôi sẽ rời khỏi @ Andy là chính thức, chỉ vì cách tiếp cận dễ dàng hơn, nhưng đây là thông tin tuyệt vời.
orokusaki

Tôi nghĩ bạn có nghĩa là Suhosin.
Bọ cánh cứng

7

Sau rất nhiều thời gian tìm ra cách làm một hương vị tùy chỉnh của nginx trên ubfox tôi nhận ra bạn có thể sử dụng mô-đun lua cho việc này.

Trên Ubuntu 14.04 nếu bạn cài đặt nginx-extrasgói, bạn có thể xóa tiêu đề máy chủ bằng cách sử dụng:

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

Ném cái này vào khối http và mọi yêu cầu sẽ thiếu Servertiêu đề.

Nếu nó không hoạt động nginx -Vđể xác minh rằng bạn có mô-đun lua được biên dịch thành bản sao nginx của bạn. Nếu không, có khả năng một gói thay thế bạn có thể sử dụng để có được nó.


Xác nhận điều này hoạt động trên phiên bản Debian Jessie 8.5 nginx: nginx / 1.6.2
Brandon

1
Trong thử nghiệm debian, điều này dường như không hoạt động NHƯNG cài đặt công việc nginx-extrađã thực hiện more_set_headers "Server: whatever";, vì vậy +1: D
Shautieh

Bạn chỉ cần LUA kích hoạt để làm việc này. Tnx
glavić


1

Đầu tiên và quan trọng nhất: Tại sao sử dụng một mô-đun bổ sung làm Tiêu đề Nginx khác? Chỉ để ẩn tiêu đề máy chủ. Nếu một vài dòng, bản vá đơn giản có thể đạt được cùng một giải pháp cho bạn.

Vì việc sử dụng một mô-đun bổ sung có thể dẫn đến mất ổn định (nó đã được kiểm tra tốt như thế nào với môi trường của bạn? Với các mô-đun khác của bạn, v.v.) hoặc không an toàn (mô-đun này có được cập nhật thường xuyên với các sửa lỗi liên quan đến lỗi và / hoặc bảo mật không?)

Thứ hai. Chuỗi này mô tả như trả lời 279389 cách bạn có thể điều chỉnh mã Nginx để thay đổi tiêu đề máy chủ. Vấn đề là họ đã quên HTTP / 2. Tóm lại, sẽ không có gì thay đổi. Tiêu đề máy chủ sẽ vẫn hiển thị.

Càng ít càng tốt. Ok tôi thừa nhận, tôi cũng đã tìm kiếm một giải pháp tốt trong một thời gian dài. Nhưng cuối cùng đã tìm thấy:

Bản vá loại bỏ tiêu đề máy chủ Nginx

Cuối cùng tôi cũng được chuộc từ tiêu đề máy chủ Nginx phiền phức đó.


0

Chạy hàm bash này trong thư mục mã nguồn nginx. Trong phiên bản nginx- $, không phải trong src /.

Dựa trên câu trả lời này .

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

Tham khảo ý chính này . Chắc chắn sẽ giúp bạn.


9
Chào mừng bạn đến với Lỗi Máy chủ! Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Gerald Schneider
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.