버전을 숨겨서 nginx 만 표시하도록 옵션이 있지만 아무것도 숨기거나 헤더를 변경하지 않도록 숨길 수있는 방법이 있습니까?
버전을 숨겨서 nginx 만 표시하도록 옵션이 있지만 아무것도 숨기거나 헤더를 변경하지 않도록 숨길 수있는 방법이 있습니까?
답변:
Apache와 마찬가지로 소스를 빠르게 편집하고 다시 컴파일합니다. 에서 Calomel.org :
Server : 문자열은 실행중인 http 서버 유형 및 가능한 버전을 알려주기 위해 클라이언트로 다시 전송되는 헤더입니다. 이 문자열은 Alexia 및 Netcraft와 같은 장소에서 인터넷에 존재하는 웹 서버 수와 유형에 대한 통계를 수집하는 데 사용됩니다. Nginx의 저자 및 통계를 지원하려면이 문자열을 그대로 유지하는 것이 좋습니다. 그러나 보안을 위해 사람들이 실행중인 것을 알지 못하게하고 소스 코드에서이를 변경할 수 있습니다. 소스 파일
src/http/ngx_http_header_filter_module.c
을 편집하여 48 행과 49 행을보십시오. 문자열을 원하는 것으로 변경할 수 있습니다.
## vi src/http/ngx_http_header_filter_module.c (lines 48 and 49)
static char ngx_http_server_string[] = "Server: MyDomain.com" CRLF;
static char ngx_http_server_full_string[] = "Server: MyDomain.com" CRLF;
2011 년 3 월 편집 : Nginx의 표준 HttpHeadersModule 을 갈래의 HttpHeadersMoreModule로 대체하여 새로운 옵션을 지적하기 위해 아래의 Flavius를 제안 합니다. 표준 모듈을 다시 컴파일하는 것은 여전히 빠른 해결 방법이며 표준 모듈을 사용하고 서버 문자열을 자주 변경하지 않는 경우에 적합합니다. 그러나 그 이상을 원한다면 HttpHeadersMoreModule은 강력한 프로젝트이며 HTTP 헤더로 모든 종류의 런타임 블랙 매직을 수행 할 수 있습니다.
r->headers_out.server
됩니다.
nginx를 사용하여 백엔드 애플리케이션을 프록시하고 백엔드가 Server:
nginx를 겹쳐 쓰지 않고 자체 헤더를 알리려면 server {…}
스탠자 내부로 이동하여 다음을 설정할 수 있습니다 .
proxy_pass_header Server;
그러면 nginx가 해당 헤더 만 남겨두고 백엔드가 설정 한 값을 다시 쓰지 않도록합니다.
마지막 업데이트는 얼마 전에 이루어 졌으므로 우분투에서 나를 위해 일한 것은 다음과 같습니다.
sudo apt-get update
sudo apt-get install nginx-extras
그런 다음 /etc/nginx/nginx.conf에 있는 http
섹션에 다음 두 줄을 추가하십시오 nginx.conf
.
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
또한로 nginx를 다시 시작하는 것을 잊지 마십시오 sudo service nginx restart
.
more_set_headers 'Server: ';
간단하게 /etc/nginx/nginx.conf를 편집하고 주석을 제거하십시오.
#server_tokens off;
http 섹션을 검색 하십시오.
매우 간단합니다. 서버 섹션에 다음 줄을 추가하십시오.
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
하면 해당 모듈을 얻을 수 있습니다 .
특별한 모듈이 있습니다 : http://wiki.nginx.org/NginxHttpHeadersMoreModule
이 모듈을 사용하면 지정한 출력 또는 입력 헤더를 추가, 설정 또는 지울 수 있습니다.
이 표준의 향상된 버전이다 헤더 가 같은 "헤더 내장"리셋 또는 소거와 같은 유틸리티를 더 제공하기 때문에 모듈
Content-Type
,Content-Length
및Server
.또한 more_set_headers 및 more_clear_headers 지시문으로 출력 헤더를 수정하는 동안 옵션을
-s
사용하여 선택적 HTTP 상태 코드 기준을 지정하고 옵션을 사용하여 선택적 컨텐츠 유형 기준 을 지정할 수 있습니다 ...-t
--add-module=/path-to-headers-more-nginx-module
Nginx Extras 설치
sudo apt-get update
sudo apt-get install nginx-extras
nginx.conf (http 섹션 아래)에 다음 두 줄을 추가하여 서버 세부 정보를 응답에서 제거 할 수 있습니다.
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
작동하지 않습니다-Debia / Ubuntu 등에서 작동한다고 가정 apt-get
합니다)
헤더를 5 자 이하의 다른 문자열로 변경해도 괜찮다면 바이너리를 패치하면됩니다.
sed -i 's/nginx\r/thing\r/' `which nginx`
솔루션으로서 몇 가지 주목할만한 장점이 있습니다. 즉, 배포판에 nginx-extras를 사용할 수 없어도 패키지 관리자가 nginx 버전 관리를 처리 할 수 있으므로 소스에서 컴파일하지 않아도되며 추가 사항에 대해 걱정할 필요가 없습니다. nginx-extras와 같은 코드가 취약합니다.
물론 옵션을 설정 server_tokens off
하거나 버전 번호를 숨기거나 해당 형식 문자열도 패치하려고합니다.
물론 "5 글자 이하"라고 말하면 언제든지 바꿀 수 있습니다.
nginx \ r \ 0
와
밥 \ r \ 0 \ r \ 0
마지막 두 바이트는 변경하지 않고 그대로 둡니다.
실제로 5 자 이상을 원한다면 server_tokens를 그대로두고 (약간 더 긴) 형식 문자열을 바꾸고 싶지만 형식 문자열의 길이에 의해 부과되는 길이의 상한은 1이지만 캐리지 리턴).
... 위의 내용 중 어느 것도 당신에게 의미가 없거나 이전에 바이너리를 패치 한 적이 없다면이 접근법을 멀리하고 싶을 수도 있습니다.
sed
위의 명령을 실행 하면 `which nginx`
부품이 이진 경로를 반환하고 sed
명령은 바이트 교체를 수행합니다.
nginx
변경 사항을 적용하기 위해 다시 시작해야하더라도 놀라지 않을 것 입니다. 그게 다야? 다른 답변 중 하나를 사용하지 말 것을 촉구합니다. 내가 말하는 모든 것이 이미 익숙하지 않고 /etc
디렉토리가 무엇인지 모르는 경우 이와 같은 해킹은 위험합니다.
유일한 방법은 src / http / ngx_http_header_filter_module.c 파일을 수정하는 것입니다. 48 번째 줄의 nginx를 다른 문자열로 변경했습니다.
nginx 설정 파일에서 할 수있는 일은 server_tokens 를 off 로 설정 하는 것입니다. 이것은 nginx가 버전 번호를 인쇄하지 못하게합니다.
내용을 확인하려면 curl -I http://vurbu.com/ | grep 서버
돌아와야한다
Server: Hai
Parthian Shot의 답변을 읽은 후 /usr/sbin/nginx
바이너리 파일을 파헤칩니다 . 그런 다음 파일 에이 세 줄이 포함되어 있음을 알았습니다.
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
기본적으로 처음 두 개는 server_tokens on;
지시문 (서버 버전 포함)을위한 것입니다. 그런 다음 이진 파일 내의 해당 줄과 일치하도록 검색 기준을 변경합니다.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
더 멀리 파고 난 후 nginx에 의해 생성 된 오류 메시지 가이 파일에 포함되어 있음을 알았습니다.
<hr><center>nginx</center>
버전이없는 3 개가 있고 그 중 2 개에는 버전이 포함되어 있습니다. 따라서 오류 메시지 내에서 nginx 문자열을 바꾸려면 다음 명령을 실행하십시오.
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
폴더는이 산출 :sed: can't read is: No such file or directory
게시물이 다소 오래되었다는 것을 알고 있지만 소스에서 nginx를 컴파일하지 않고 데비안 기반 배포판에서 작동하는 쉬운 솔루션을 찾았습니다.
먼저 nginx-extras 패키지 설치
sudo apt 설치 nginx-extras
그런 다음 nginx.conf를 편집하고 서버 블록 안에 다음 줄을 추가하여 nginx http 헤더 더 많은 모듈을로드하십시오.
load_module 모듈 /ngx_http_headers_more_filter_module.so;
완료되면 more_set_headers 및 more_clear_headers 지시문에 모두 액세스 할 수 있습니다.
응답에서 서버 헤더 값에 대해 묻고 있습니까? add_header 지시문으로 변경해 볼 수 있지만 작동하는지 확실하지 않습니다. http://wiki.codemongers.com/NginxHttpHeadersModule