dinist

Apache 웹서버 (수동) 설치하기 (웹 헤더보안 위주) 본문

리눅스

Apache 웹서버 (수동) 설치하기 (웹 헤더보안 위주)

dinist 2020. 11. 11. 20:53

1. 패키지 관리자를 통해 설치하는게 쉽다

Apache 웹서버는 데비안계열의 apt, 레드헷계열의 dnf 등을 통해 쉽게 설치 할 수 있다.

또한 Apache 공식 웹사이트에서도 배포판을 다운받아 직접 수동 설치 할 수 있는데, 이번에는 직접 배포판을 다운 받아 설치해보기로 한다.

 

2. 패키지 관리자를 두고 왜 수동설치를?

사실 수동 설치하는 진짜 이유는 따로 있다.

아파치 웹 서버의 헤더 보안을 위해서이다.

 

2-5. 설치에 앞서 먼저 설치가 되어있어야 할 것들

gcc 컴파일러 등의 c컴파일러가 설치 되어 있어야 한다. 설치되지 않았다면 설치해준다.

apt install gcc

 

또한 libexpat1-dev , libpcre3-dev 가 설치 되어있는지도 확인한다.

설치가 안되어있으면 진행이 되지 않는다.

 

또한 APR, APR-util 설치가 되어있어야 Apache configure 작업시 문제가 없다.

 

이러한 앞선 작업이 모두 완료되면 apache 설치를 본격적으로 진행 한다.

 

나는 아무것도 건드리지 않고 수동설치를 하고싶다면 바로 5번으로 건너뛴다.

 

3. httpd.conf의 ServerTokens 옵션에 대한 짧은 설명

 

아파치 설정파일인 httpd.conf 파일에 ServerTokens 옵션에는

Prod | Major | Minor | Min | OS | Full 의 옵션이 있다.

 

Prod : Apache

Major : Apache/2

Minor : Apache/2.4

Min : Apache/2.4.4

OS : Apache/2.4.4 (Unix)

Full : Apache/2.4.4 (Unix) PHP/x.x.x Etc/x.x

 

옵션의 설정에 따라 웹페이지 헤더에 표시되는 Server 값의 차이가 있다.

가장 최소한의 정보만 드러나게 하는것이 Prod 옵션인데 이것도 Apache라고 값이 나오기 때문에 아파치 웹서버를 사용중임을 알 수 있다.

 

아예 정보가 드러나게 하고 싶지 않다면 Apache 소스파일을 수정해야한다.

 

방법은 두가지가 있다.

 

4. 소스파일 수정

4-1 과 4-2 중 하나만 선택해서 진행한다.

4-1. AP_SERVER_BASEPRODUCT 값 수정 (추천)

- 설치 폴더 내부에 include/ap_release.h 헤더파일을 수정해야한다.

- 아래와 같이 AP_SERVER_BASEPRODUCT 값을 빈값으로 설정한다.

#define AP_SERVER_BASEPRODUCT ""

저장하면 끝

 

4-2. ServerToken 옵션에 None을 추가한다. 

server/core.c 파일을 수정해야한다.

core.c파일에서 server_token_type 이라는 열거형 변수를 찾는다.

열거형 변수안에 SrvTk_None을 추가한다. (꼭 저 값이름으로 하지 않아도 됨)

 

이제 set_banner라는 void 타입의 함수를 찾는다.

if문의 중간에 else if를 추가하고 ap_server_tokens == SrvTk_None을 조건으로 잡는다.

아래 코드 또는 사진 참조

else if(ap_server_tokens == SrvTk_None){
	ap_add_version_component(pconf,"");	
}

// ""으로 설정하면 웹페이지 헤더에서 Sever 항목이 아예 표시 되지 않거나 
// Server 라는 헤더항목만 표시되고 값은 표시되지않는다.

 

 

그 다음 *set_serv_tokens 라는 const char 타입의 함수를 찾는다.

이미지를 참조해서 설정하는게 더 쉬울 듯 하다.

이번에도 if문 중간에 else if 를 추가하고 조건에 !strcasecmp(arg, "None") || strcasecmp(arg, "none") || strcasecmp(arg, "NONE")을 추가한다.

(어떠한 형태의 none으로 입력하던지 인식하기 위함이다. 그냥 대소문자 변환처리하면 되지만 패스)

그리고 ap_server_tokens = SrvTk_None으로 설정한다.

 

마지막 else는 옵션으로 제공된 이외의 옵션을 입력시 return되는 오류메시지를 지정한다. 저기 사이에 슬며시 "None"도 껴준다.

 

모두 완료되면 저장한다.

 

5. configure 설정하기

configure 스크립트를 실행하며 몇가지 매개변수를 줄게 있다.

 

--enable-module=shared : 모듈파일인 so파일의 설치 방식을 동적으로 설치한다. 모듈추가만해주면 모듈 적용을 할 수 있으므로 편하다.

--enable-rewrite=shared : mod_rewrite 모듈을 설치 (선택)
--enable-speling=shared : mod_speling 모듈을 설치 (선택)

 

스크립트 내의 기본설치 경로는 /usr/local/apache2 이다. 만약 설치경로를 변경하고 싶다면 설치경로를 지정해줘야한다.

설치경로 지정은 --prefix="경로" 옵션을 지정해주면된다.

 

이러한 옵션을 주면 다음과같이 명령줄이 완성된다.

CC="gcc" CFLAGS="-O2" \
./configure --enable-module=shared \
--enable-rewrite=shared \
--enable-speling=shared

이 명령을 아파치 설치루트폴더에서 실행한다.

그러면 주르륵 스크립트가 실행되고

 

오류 없이 완료가 되면 바로

make; make install 과정을 진행한다.

 

모두 완료되면 Apache설치경로/conf/httpd.conf 파일 내에 다음 두줄을 추가한다.

ServerName IP주소

ServerTokens Prod (4-1 방식으로 진행했을경우) None(4-2 방식으로 진행했을경우)

 

그리고 Apache설치경로/bin/apachectl stop 후

Apache설치경로/bin/apachectl start 해준다.

 

 

 

오류잡기

2-5를 수행했다면 이부분을 볼 일이 없을것이다.

 

APR not found 오류 

이렇게 APR을 못찾겠다하면 APR을 설치해줘야한다.

링크 : apr.apache.org/download.cgi

 

위 링크에서 APR과 APR-util을 받는다.

APR -> APR-util 순서로 진행해야한다.

먼저 APR을 configure ->  make -> make install 과정으로 설치한다.

설치경로를 지정하고 싶다면 --prefix=설치경로 형식으로 지정해준다.

 

APR 설치가 완료되면 APR-util을 configure -> make -> make install 과정으로 설치한다.

단, configure 과정에서 --prefix=APR설치위치 를 지정해줘야한다.

APR 설치과정중에 경로를 지정하지 않았다면 APR의 경로는 /usr/local/apr 일 것이다.

 

expat.h 오류

APR-util 설치중 발생할 수 있다.

apt install libexpat1-dev 과정을 진행하고 다시 시도한다.

 

 

결과

 

Server 헤더가 있긴있는데 (일반브라우저모드)

 

여긴 없다 (시크릿모드)

Server 값이 있을때도 있고 없을때도 있다. 근데 Apache가 안뜬다. 좋다.

'리눅스' 카테고리의 다른 글

/etc/passwd에 대하여 알아보기  (0) 2021.01.30
DNS 서버 구축 [CentOS8, Debian10]  (0) 2020.11.01
리눅스 페도라 DHCP서버 설치하기  (0) 2020.10.23