목차

레퍼런스 : http://blog.paran.com/psycho/7981318

자주쓰는 아파치 설정사항 정리

브라우징 제거

아파치의 디폴트세팅은 브라우징이 enable되어 있다. 브라우징이란 웹브라우저에서 URL입력시 index.html과 같은 정확한 파일명을 생략하고 디렉토리만 적었을 경우, 디렉토리내 파일목록이 출력되는 현상을 말한다.

http.conf의 디렉토리 디렉티브내 다음줄 추가

Options -Indexes

아파치 인증창 사용

http.conf에서 인증을 걸 디렉토리 디렉티브내 다음줄 추가

AllowOverride AuthConfig

해당 디렉토리에 다음과 같이 .htaccess파일(텍스트파일) 생성

[root@ns mrtg]# cat .htaccess 
AuthName "MRTG를 위한 인증"
AuthType Basic
AuthUserFile /webhosting/mrtg/.auth
require valid-user

AuthName: 인증창 타이틀 AuthType: 인증형태 AuthUserFile: 인증자들의 리스트를 가진 파일(htpasswd명령어로 생성)

-c(create)는 처음 파일을 생성할때 필요하다.

[root@ns mrtg]# htpasswd -c .auth kang 
New password: 
Re-type new password: 
Adding password for user kang
[root@ns mrtg]# ls -l .auth
-rw-r--r--    1 root     root           19 May  3 16:54 .auth

각 유저별 www 폴더에 브라우징 권한 부여

chmod 711 /home/UserDir
chmod 755 /home/UserDir/public_html

외부 IP접근제어

http.conf의 디렉토리 디렉티브내 다음줄 추가

AllowOverride AuthConfig
Order Allow,Deny
Deny from 211.43.134.128/24 xxx.xxx.xxx.xxx/24
Allow from all

Deny from 에 접근차단할 ip대를 입력.

슬래쉬(/)뒤의 숫자들은 net mask지정(생략하면 single ip에 대한 차단)

위의 내용을 종합한 예는 다음과 같다.

Options -Indexes FollowSymLinks MultiViews
 
AllowOverride AuthConfig
 
Order allow,deny
Allow from all
Deny from 211.43.134.128/24 xxx.xxx.xxx.xxx/24

가상호스트/Redirect

아래의 예는 dbakorea.pe.kr로 오면, www.dbakorea.pe.kr로 redirect시킨다.

본인은 아파치말고, packet filtering으로 처리하려했으나 실력부족과 게으름으로 인해 그만두었다.

ServerName          dbakorea.pe.kr
Redirect    /       http://www.dbakorea.pe.kr

가상호스트의 전형적인예

ServerAdmin         kang at dbakorea.pe.kr
DocumentRoot        /webhosting/dbakorea-mobile
ServerName          mobile.dbakorea.pe.kr
ErrorLog            /usr/local/apache/logs/mobile.dbakorea.pe.kr-error_log
CustomLog           /usr/local/apache/logs/mobile.dbakorea.pe.kr-access_log common
ScriptAlias /cgi-bin/ /webhosting/dbakorea-mobile/cgi-bin/
DirectoryIndex      login.html

아파치 정보출력제어

80포트로 telnet후 get / http/1.0하면 나오는 정보제어

ServerTokens Prod[uctOnly] 
: Apache 만 보여줌 
ServerTokens Min[imal] 
: Apache 버젼만 보여줌 
ServerTokens OS 
: 아파치 버젼과 운영체제를 보여줌 
ServerTokens Full (또는 지시하지 않았을때) 
: 모두 보여줌

Offline Browser서비스 거부(출처: http://www.apache.kr.net)

WebZip만 테스트해봤지만 %{User-agent} 라는 변수에 'MSIE 6.0b'와 같이 찍힌다.

한마디로 안된다. 다른 용도로 사용될 지 몰라도,..

Options  FollowSymLinks
AllowOverride	None
Order	allow,deny
Allow	from	all
Deny	from	env=go_out
 
#CustomLog	/usr/local/apache/logs/access_log	common
#CustomLog	/usr/local/apache/logs/referer_log	referer
#CustomLog	/usr/local/apache/logs/agent_log	agent
CustomLog	/usr/local/apache/logs/access_log	combined
 
BrowserMatch	"Mozilla/2"	nokeepalive
BrowserMatch	"MSIE	4\.0b2;"	nokeepalive	downgrade-1.0	force-response-1.0
BrowserMatch	"RealPlayer	4\.0"	force-response-1.0
BrowserMatch	"Java/1\.0"	force-response-1.0
BrowserMatch	"JDK/1\.0"	force-response-1.0
BrowserMatch	"WebZIP"	go_out
BrowserMatch	"Teleport"	go_out
BrowserMatch	"GetRight"	go_out
BrowserMatch	"WebCopier"	go_out
 
ServerAdmin	kang@dbakorea.pe.kr
DocumentRoot	/webhosting/dbakorea
ServerName	www.dbakorea.pe.kr
ServerAlias	dbakorea.pe.kr
ErrorLog	/usr/local/apache/logs/www.dbakorea.pe.kr-error_log
CustomLog	/usr/local/apache/logs/www.dbakorea.pe.kr-access_log	combined

아파치 로그 rotate

디폴트로 아파치로그는 wtmp, lastlog등과 같이 일정 시간, 크기..등등에 따라 로그의 순환이 이루어지지 않는다.

logrotate로 3개의 로그를 1달단위로 순환하려면 /etc/logrotate.conf파일의 마지막에 다음과 같이 추가한다.

# system-specific logs may be configured here
/usr/local/apache/log/www.dbakorea.pe.kr-access_log {
        monthly
        rotate 2
}

바이러스등에 대한 아파치로그 제거

# CodeRed Worm등의 로그제거
SetEnvIf Request_URI default\.ida CodeRed
SetEnvIf Referer \.ida CodeRed
SetEnvIf Request_URI cmd\.exe CodeRed
SetEnvIf Referer cmd\.exe CodeRed 
SetEnvIf Request_URI root\.exe CodeRed
SetEnvIf Referer root\.exe CodeRed
 
 
ServerAdmin         kang at dbakorea.pe.kr
DocumentRoot        /webhosting/dbakorea
ServerName          www.dbakorea.pe.kr
ServerAlias        dbakorea.pe.kr
ErrorLog            /usr/local/apache/logs/www.dbakorea.pe.kr-error_log
CustomLog           /usr/local/apache/logs/www.dbakorea.pe.kr-access_log combined env=!CodeRed

설치된 모듈 확인

[root@ns /root]# httpd -l
Compiled-in modules:
  http_core.c
  mod_env.c
  mod_log_config.c
  mod_mime.c
  mod_negotiation.c
  mod_status.c
  mod_include.c
  mod_autoindex.c
  mod_dir.c
  mod_cgi.c
  mod_asis.c
  mod_imap.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_access.c
  mod_auth.c
  mod_so.c
  mod_setenvif.c
  mod_php4.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec

설정파일 확인(Virtual Host Only by httpd -S)

컴파일 설정보기

[root@ns /root]# httpd -V
Server version: Apache/1.3.26 (Unix)
Server built:   Sep 17 2002 00:36:53
Server's Module Magic Number: 19990320:13
Server compiled with....
-D HAVE_MMAP
-D HAVE_SHMGET
-D USE_SHMGET_SCOREBOARD
-D USE_MMAP_FILES
-D HAVE_FCNTL_SERIALIZED_ACCEPT
-D HAVE_SYSVSEM_SERIALIZED_ACCEPT
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D HTTPD_ROOT="/usr/local/apache"
-D SUEXEC_BIN="/usr/local/apache/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/httpd.scoreboard"
-D DEFAULT_LOCKFILE="logs/httpd.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
-D ACCESS_CONFIG_FILE="conf/access.conf"
-D RESOURCE_CONFIG_FILE="conf/srm.conf"
[root@ns /root]# 

SSI를 사용

CGI와 거의 비슷하게 세팅한다.

아파치(Apache)의 설정파일은 이젠 httpd.conf하나로 통일되었으므로 이 파일에 모든 설정을 한다.

AddType text/html .shtml
AddHandler server-parsed .shtml

위의 2개를 꼭 있어야 한다. 그리고 CGI와 마찬가지로 ssi가 실행될 디렉토리에 Includes옵션을 설정한다.

아래의 예는 /www/htdocs/count라는 티렉토리에 CGI, SSI가 실행될 수 있게 한다.

# 내가 추가(Options에 ExecCGE는 CGI를 사용하기위해, Includes는 SSI를 사용하기 위해)
 
Options ExecCGI Includes
AllowOverride None

favicon.ico 에러 감추기

vi {..}/httpd.conf

Redirect 404 /favicon.ico
<Location /favicon.ico>
	ErrorDocument 404 "no favicon"
</Location>