웹마스터 팁

Apache 보안

2004.04.05 14:10

u2em

httpd.conf를 수정함으로써 백도어 한개를 줄일 수 있습니다.

1. 유닉스 아파치를 root로 실행해서는 안 됩니다. 아파치를 빼앗길경우 root까지 넘어가게 되겠죠...
user nobody
group nobody 를 추천합니다.

2. htdocs 디렉터리에는 방문자에게 필요하지 않은 파일이 있습니다.

DocumentRoot "D:/htdocs"

htdocs의 내용들을 옮기거나 제거하거나 아니면 DocumentRoot를 옮겨야 좋습니다.

3. 필요없는 모듈을 과감히 주석처리
보통 필요한 모듈은 mod_dir mod_userdir mod_php mod_alias mod_access mod_auth 쯤입니다.
아파치 문서( http://httpd.apache.org/docs-2.0/ )를 참고하여 담당하는 서버에 필요없는 모듈은 다음과 같이 주석처리합니다.
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
서버를 재시작하면 적재되는 모듈이 줄어들어 속도도 향상되고, 버그가 있는 모듈일경우 한개의 백도어가 닫히는 셈입니다.

4. 디렉터리 설정
<directory></directory>로 디렉토리를 설정할경우 Option 지시자에 붙여지는 지시어들 중
Indexes와 FollowSymLink는 가급적 사용하지 않는것이 좋습니다.

Indexes를 사용하게 되면, DirectoryIndex에 해당하는 파일이 디렉토리에 없을 경우 파일 리스트를 보여줍니다.
만약 제로보드 디렉토리에 index.html이 없다면? config.php를 다운로드할수 있으므로 매우 위험합니다. 그래서 사용하지 않는 것이 좋습니다.

FollowSymLink를 사용시 /etc/passwd 등 매우 민감한 파일도 접근이 가능하다고 합니다. 심볼릭 링크때문이라고 하는군요... 윈도즈 운영체제의 바로가기와 비슷한 개념입니다..

또 원하지 않는 방문객이 접근하는것도 막을 수 있습니다.
Order deny,allow
Deny from all
Allow from 61.79.206

를 추가하면 61.79.206.*에서만 해당디렉토리의 접근이 가능합니다.

5. 정보 주지 않기
아는것이 힘입니다. 이 말은 보안쪽에서도 해당됩니다. 크래커는 크래킹 하려는 시스템의 정보를 많이 알수록 크래킹하기 쉽고, 각종 보안홀을 알고 대처를 할경우 보다 안전해집니다.

아파치는 웹브라우저에게 각종 정보를 넘기게 되는데, ServerToken 지시자가 이를 수행합니다.
아래는 httpd.conf의 servertoken 지시자 부근을 번역한 것입니다....

# 이 지시자는 서버가 되돌려주는 HTTP 응답을 설정합니다.
# 기본값은 'Full'인데 OS 정보와 모듈 정보를 넘겨줍니다.
# 하나를 선택하세요:  Full | OS | Minor | Minimal | Major | Prod
# Full은 가장 많은 정보를, Prod는 최소의 정보만을 보여줄 것입니다.
ServerTokens Prod

이 서버의 없는 페이지를 접속할 경우(ErrorDocument 사용안할시)

Not Found
--------------
The requested URL /sdsds was not found on this server.

Apache Server at xxx.xxx.xxx Port 80

과 같은 정보를 넘겨줍니다. 그러나 Full로 설정할 경우

Not Found
------------------------
The requested URL /sdsds was not found on this server.
Apache/2.0.49 (Win32) Server at xxx.xxx.xxx Port 80

비슷하게 나올것입니다. 만약 이 페이지를 찾아온 어떤 크래커가 win32버전 2.0.49의 취약점을 알고 있을경우, 크래커는 순간 이 시스템을 크래킹하고 싶어질 것입니다.

6. 불필요한 설정 제거 혹은 주석처리
아파치는 설치시 불필요한 수많은 기능들이 On 되어 있습니다. 주로 Alias 설정이 그런데, icons 디렉토리와 manual 디렉토리가 그렇습니다.
icons는  index파일이 없는 디렉토리 목록을 보여줄때 사용되는 아이콘들이 있는 디렉토리입니다. 무슨 윈도즈 탐색기도 아니니 파일명 앞에 아이콘이 붙는건 전혀 필요가 없습니다.

manual 디렉토리는 아파치 매뉴얼들이 있는 디렉토리인데, 접속자는 이런것이 필요가 없습니다.(뭐 필요한 사람이 없는건 아니겠지만...)

뭐 이정도면 httpd.conf로 기본적인 보안 설정하기는 다 된것 같습니다. 하지만 절대 방심해서는 안됩니다. 우리의 시스템에 설치된 아파치(알려진 버그가 픽스되었다는 최신버전의)에 알려지지 않은 허점이 존재할 수 있으며, 전혀 예상하지 못한(가령 SSH를 이용하는 내부 사용자의 배신(?), 스니핑 등등 아파치와 전혀 상관없는) 공격을 당할 수도 있습니다.
어쨌든 열심히 서버 운영하시길 바라며 지금까지 읽어주셔서 감사합니다...