사이트 내 전체검색
[linux] 리눅스에서 아파치 세팅시 간단한 보안 조치
로빈아빠
https://cmd.kr/server/292 URL이 복사되었습니다.

본문

리눅스에서 아파치 세팅시 간단한 보안 조치

인터넷제국 기술본부 김대옥 (dokim@inempire.com)
Tue Jan  2 14:06:00 KST 2001

리눅스서버에서 Apache 설정시 간단한 몇가지 간단한 보안조치에 대해 아래와 같이 안내를 드리오니 참고하시어 적용하여 주시면 서버 보안에 도움이 될 것으로 판단합니다.

리눅스에서  아파치 기본 세팅하면 /usr/local/apache/conf/httpd.conf 파일에서
# # This may also be "None", "All", or any combination of "Indexes", # "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews". # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # Options Indexes FollowSymLinks MultiViews 이 부분이 있습니다. 여기서 Indexes 부분을 지워주시기 바랍니다. 이 폴더에 indexes 옵션이 있다면 웹브라우저에서 사이트를 찾아갔을 때 만약 지정 폴더에 index.html이란 파일이 없다면  그 디렉토리구조와 소스파일의 리스트가 나옵니다.

또한
AddType application/x-httpd-php .php .php3 .inc .html .phtml AddType application/x-httpd-php-source .phps

또 이 부분도 있을 겁니다. 꼭 .inc 라는 옵션을 넣어주시기 바랍니다. C 언어에서 헤더파일처럼 php도 include파일이라는 것이 있습니다. Include파일의 확장자는 .inc 인데 이 부문에 이 옵션을 적어주지 않으면  웹브라우저에서 이 확장자가 .inc 로 된 파일이름을 불러 오면 소스가 다 보입니다.

그리고 /usr/local/apache/cgi-bin/ 이라는 디렉토리에
printenv 
test-cgi

라는 파일들이 있습니다. 이것들을 삭제해 주시기바랍니다. 예전 아파치에는 이 취약점 때문에 브라우저를 이용하여 허가되지 않은 파일을 열람할 수 있었습니다. 이 스크립트는 웹서버의 환경설정에 대한 정보를 보여주는 것인데 웹서버의 파일들을 보안의 위험성을 내포하고 있습니다. 공격가능한 웹서버 버전은

Apache 1.1
Apache 1.0.5
Apache 1.0.3
Apache 1.0.2
Apache 1.0
Apache 0.8.14
Apache 0.8.11
Netscape Commerce server 1.12
Netscape Communication server 1.12
Netscape Communication server 1.1
Netscape Enterprise 2.0a

이것들에 해당하지 않는 상위 버전은 이 취약점에 해당없지만 그래도 지워줄 것을 권장합니다. /usr/local/apache/htdocs 라는 폴더에 manual 이라는 폴더도 삭제해 주시기 바랍니다.

많은 사이트들이 Apache를 웹서버로 사용하고 있으며, UNIX/Linux 계에서 가장 널리 사용되는 웹서버 스크립트로 PHP라고 할수 있습니다.. 또한, 여기에 무료이면서 성능(특히 속도)이 뛰어난 DBMS인 MySQL을 사용하는 경우가 많습니다. 그러나, 아파치는 사용자가 많은 만큼, 버그가 빨리 발견되기 때문에 버그를 이용한 공격을 당하기 쉬운 단점도 있습니다. 아파치 및 php버전을 실제 버전과 다르게 표시한다면  해커들은 잘못된 버전의 exploit을 가지고 접근을 시도할 곳입니다.

[root@server conf]# telnet 211.174.61.27 80
Trying 211.174.61.27...
Connected to 211.174.61.27.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Tue, 26 Dec 2000 10:23:34 GMT
Server: Apache/1.3.14 (Unix) PHP/4.0.3pl1

위와 같이 기존에 정상적으로 접근을 하면 아피치 버전과 php버전도 나오게 됩니다. 이걸 보고 버전에 따른 버그를 가지고 해커들은 불법접속을 시도할 것입니다. 따라서 실제 버전 정보를 숨길 경우 조금이나마 서버 보안에 도움을 줄 수 있는데, 이 부분을 실제 세팅된 버전과 다르게 표시하는 방법에 대해서 알아보겠습니다. 또 다른 방법으로 간단하게 저 굵은 글씨로 표시된 부분이 간단하게 apache 만 나오는 방법이 있습니다. /usr//local/apache/conf/httpd.conf 파일을 열고 이 문구를 추가해주면 됩니다.
ServerTokens ProductOnly

그리고 웹데몬을 다시 시작하고 테스트를 하면

[root@server conf]# telnet 211.174.61.27 80
Trying 211.174.61.27...
Connected to 211.174.61.27.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Tue, 26 Dec 2000 10:30:45 GMT
Server: Apache

이런식으로 Apache라고 표시만 됩니다.

다른 방법으로 소스를 수정해서 다른 버전이 나오도록 해보겠습니다. 일단 mysql은 컴파일 된 걸 전제로 하겠습니다. 간단히 소스를 수정과 컴파일하는 과정을 보여드리겠습니다.

일단 4개의 소스를 다운받습니다.
[root@server /tmp]#tar ?xvzf ZendOptimizer-0[1].99-php4.0.3-Linux-glibc2.1.tar.gz
[root@server /tmp]#cd ZendOptimizer-0.99-php4.0.3-Linux-glibc2.1/
[root@server ZendOptimizer-0.99-php4.0.3-Linux-glibc2.1]#
[root@server ZendOptimizer-0.99-php4.0.3-Linux-glibc2.1]#mkdir /usr/local/Zend
[root@server ZendOptimizer-0.99-php4.0.3-Linux-glibc2.1]#mkdir /usr/local/Zend/lib
[root@server ZendOptimizer-0.99-php4.0.3-Linux-glibc2.1]#cp ZendOptimizer.so*
/usr/local/Zend/lib/
[root@server /tmp]#tar ?xvzf apache_1.3.14.tar.gzZendOptimizer.so*
[root@server /tmp]#tar ?xvzf php-4.0.3pl1.tar.gz
[root@server /tmp]#cd  apache_1.3.14
[root@server apache_1.3.14]#./configure ?prefix=/usr/local/apache
[root@server apache_1.3.14]#cd ../php-4.0.3pl1
[root@server php-4.0.3pl1]#cd main
[root@server main]#vi php_version.h

이 파일을 열면
/* automatically generated by configure */ /* edit configure.in to change version number */ #define PHP_VERSION "4.0.3pl1"

이런 내용이 있습니다.
이 부분을 아래와 같이 고쳐보겠습니다.
#define PHP_VERSION "1.0.1"

그리고 저장하고 나오십시오.

[root@server main]#cd ../
[root@server php-4.0.3pl1]#./configure  ?-with-apache=/tmp/apache_1.3.14  -?with-mysql=/usr/local/mysql  ?-disable-debug  ?-enable-track-vars

참고로 --enable-track-vars  옵션은 HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS 배열에 들어 있는 GET, POST, cookie 변수들이 어디서 왔는지 기억하도록 합니다. 꼭 설정해 두세요.

[root@server php-4.0.3pl1]#make ; make install
[root@server php-4.0.3pl1]#cp php.ini-dist /usr/local/lib/php.ini
[root@server php-4.0.3pl1]#cd ../apache_1.3.14
[root@server apache_1.3..14]# ./configure ?prefix=/usr/local/apache  --activate-module=src/module=src/modules/php4/libphp4.a
[root@server apache_1.3..14]#cd src/include

여기서 httpd.h라는 파일을 열고 이 부분에 가서 수정하면 됩니다.
#define SERVER_BASEPRODUCT "Apache" #define SERVER_BASEREVISION "1.3.14" 이 라인 부분을 다음과 같이 수정하겠습니다. #define SERVER_BASEREVISION "1.0.0"

[root@server apache_1.3..14]#make ; make install
[root@server apache_1.3..14]#cd /usr/local/lib/
[root@server lib]#vi .php.ini 를 열고 다음 두 줄을 추가하고 저장하면 됩니다.
zend_optimizer.optimization_level=1 zend_extension="/usr/local/Zend/lib/ZendOptimizer.so"

이제 아파치를 실행하고 테스트 해보겠습니다.

[root@server lib]# telnet 211.174.61.27 80
Trying 211.174.61.27...
Connected to 211.174.61.27.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Wed, 27 Dec 2000 08:34:50 GMT
Server: Apache/1.0.0 (Unix) PHP/1.0.1
Content-Location: index.html.en
Vary: negotiate,accept-language,accept-charset
TCN: choice
Last-Modified: Sat, 20 Nov 1999 21:29:40 GMT

굵게 표시한 부분처럼 소스를 수정한 것과 같이 실제 세팅한 버전과 다른 버전이 나오게 됩니다.

http://grapery.net/server4u/Apache/

댓글목록

등록된 댓글이 없습니다.

1,139 (13/23P)

Search

Copyright © Cmd 명령어 18.118.30.137