#이미지가 새창을 열경우 엑박(X)으로 보이는걸 방지하기 위한 레퍼럴이 존재하지 않는 요청 SerEnvIfNoCase Referer ^$ goout
# 파일 확장자 지정하기 <Files ~ "\.(gif|jpe?g|png|bmp|zip|tar|rar|alz|a00|ace|txt|mp3|mpe?g|wav|asf|wma|wmv|swf|exe)$"> Order deny,allow deny from all allow from env=goout
## 무단 링크시 띄워줄 에러 ErrorDocument 403 http:// 경고를 보여줄 Img 나 html </Files> </Directory>
제 목 : 아파치 설정 활용 예(서비스 제한측면) 작성자 : 좋은진호(truefeel, http://coffeenix.net/ ) 작성일 : 2003.2~ 정리일 : 2005.1.28(금)
아파치 웹서버의 활용에 있어, 보다나은 보안 설정 방법 몇 가지를 소개한다.
특정 Agent가 자꾸 사이트에 들어와서 긁어간다든지, 이미지 파일을 외부에서 링크하지 못하도록 한다든지, 특정 IP에서는 인증없이, 그 이외 IP에서는 아파치 인증을 통해서만 페이지를 보게하는 등의 응용적인 측면에서 방법들이다. 이 방법들은 제가 사용하고 있는 몇가지 방법을 정리하는 의미에서 적은 것이다.
<Directory /usr/local/apache/htdocs> <Limit GET POST> Order Allow,Deny Allow from all Deny from env=dont_want </Limit> </Directory> [/quote] --------------------------------------------------------------------
The 'SetEnvIfNoCase' simply sets an enviornment (SetEnv) variable called 'bad_bot' If (SetEnvIf) the 'User-Agent' string contains Wget, EmailSiphon, or EmailWolf, regardless of case (SetEnvIfNoCase). In english, anytime a browser with a name containing 'wget, emailsiphon, or emailwolf' accesses our website, we set a variable called 'bad_bot'. We'd also want to add a line for the User-Agent string of any other Spidert we want to deny.
Now we tell Apache which directories to block the Spiderts from with the <Directory> directive:
<Directory "/home/evolt/public_html/users/"> Order Allow,Deny Allow from all Deny from env=bad_bot </Directory>
2. 다른 곳에서 images를 link하지 못하도록
1) 디렉토리를 제한하는 방법
referer 체크를 통해 외부에서 /images 이하디렉토리의 파일을 link하지 못하도록 한다. 이를테면 truefeel.kr 이라는 사이트가 있을 때 truefeel.kr내에 있는 동영상을 이 도메인에서는 링크할 수 있지만 외부 사이트에서는 이 동영상을 링크해도 권한이 없도록 할 수 있다.
<Directory /usr/local/apache/htdocs/images> Order Deny,Allow Deny from all Allow from env=local_referal </Directory> --------------------------------------------------------------------
2) 이미지 파일 확장자로 제한하는 방법 (서비스 페이지가 ????.truefeel.kr 일 때)
<Files ~ "\.(gif|jpg|jpeg|png|bmp)$"> Order deny,allow Deny from all Allow from env=local_referal </Files> --------------------------------------------------------------------
3. 특정 IP에서만 접근 가능하게
너무나도 흔한 방법이긴 한데, 개인적으로 저에게 이런 부분을 물어보시는 분이 많았다. 아래의 예는 /usr/local/apache/htdocs 디렉토리를 211.111.222.0/24 대역에서만 접근가능한 설정이다.
-------------------------------------------------------------------- <Directory "/usr/local/apache/htdocs"> Options FollowSymLinks MultiViews AllowOverride AuthConfig Order deny,allow Deny from all Allow from 211.111.222.0/255.255.255.0 </Directory> --------------------------------------------------------------------
반대로 아래와 같이 하면 지정한 IP대역에서만 접근할 수 없다.
-------------------------------------------------------------------- ... 생략 ... Order allow,deny Allow from all Deny from 211.111.222.0/255.255.255.0 ... 생략 ... --------------------------------------------------------------------
4. 특정페이지를 인증된 사용자만 볼 수 있는 아파치 인증 설정
이번 글은 5번의 인증 설정을 알기 전에 아파치 인증에 대해 모르는 분을 위해 적은 것으로 아파치 인증이 무엇인지 안다면 5번으로 바로 넘어가기 바란다.
아파치에서는 특정 페이지를 접근할 때 ID와 비밀번호를 알아야만 접근하도록 설정할 수 있다. 다음 예를 보자.
위 처럼 AllowOverride AuthConfig 설정을 하면 ~truefeel/public_html 디렉토리에 인증 과정을 거치는 기본 설정은 된 것이다. 만약 ~truefeel/public_html/manager/ 아래의 디렉토리에 인증을 걸려고 한다면 그 디렉토리에 다음과 같은 형식의 .htaccess 파일을 생성한다.
[ ~truefee/public_html/manger/.htaccess 파일 내용 ] -------------------------------------------------------------------- AuthType Basic AuthName User <-- "User" 는 인증창에 표시될 메시지 중의 하나일 뿐 신경쓸 필요 없다. AuthUserFile /home/truefeel/manage/.htpasswd AuthGroupFile /dev/null <Limit GET POST> require valid-user </Limit> --------------------------------------------------------------------
require valid-user order deny,allow deny from all allow from 211.111.222.0/255.255.255.0 Satisfy any </Location> --------------------------------------------------------------------
위의 설정은 - 211.111.222.0/24 IP 대역에 있는 접속자는 인증없이 통과하고, - 그 이외의 IP 대역에서 접속하면 인증을 거쳐야하는 설정이다. 이 설정은 Satisfy any 지시자를 통해서 이뤄진다. IP가 맞거나 ID/PW가 맞으면 되는 것이다. (OR)
만약 Satisfy all 이라고 적었다면 - IP대역이 211.111.222.0/24 이면서 - 인증까지 모두 통과 해야 해당 페이지에 접근이 가능하다. (AND)
6. 업로드 디렉토리의 .php파일은 text처럼 인식하기
php나 cgi 등으로 파일 업로드 가능하도록 구현된 경우 .php나 .html 등의 파일을 업로드할 수 있는 실수를 범할 수 있다.
이런 실수를 하더라도 지정한 업로드 디렉토리에 있는 .php나 .html 파일을 php프로그램으로 인식하지 않고 일반 텍스트 파일로 판단하도록 설정하여 보다 안전한 웹페이지 구성이 가능하다. 다음은 /upload/ 와 /files/ 디렉토리 아래의 php파일은 일반 텍스트로 인식하라는 설정이다.
글쓴이 : 좋은진호(truefeel, http://coffeenix.net/) 글쓴날 : 2004.2 정리일 : 2004.8.10(정리) 제 목 : [튜닝] apache에서 이미지 캐싱 처리(mod_expires)
apache에서는 mod_expires 모듈을 통해 Expires HTTP header 를 설정할 수 있다. 이를 통하여 클라이언트(웹페이지 방문자)에 캐싱되는 문서나 이미지들이 많아서 트래픽을 감소시킬 수 있다. 이미지 전용 서버나 이미지 디렉토리에 설정을 해두면 효과적이다.
이미지 서버에 지정한 다음 예를 보자.
----------------------------------------------------------- <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 month"
# 제외할 디렉토리 <Directory "/usr/local/apache/htdocs/temp"> ExpiresActive Off </Directory> </IfModule> -----------------------------------------------------------
- ExpiresActive On 지시자로 Expires 설정을 enable 한다. - ExpiresDefault "access plus 1 month" 지시자는 액세스한지 얼마나 지나서 expire할 것인지를 지정한다. 즉, 지정한 기간만큼 클라이언트에 캐싱이 된다. 위에는 1달이다.
이외에 클라이언트에서 액세스한지 1달, 4주, 30일, 1년 등과 같은 expire 주기와 서버의 파일의 수정 시간으로 expire 주기를 설정할 수 있다.
----------------------------------------------------------- ExpiresDefault "access plus 1 month" ExpiresDefault "access plus 4 weeks" ExpiresDefault "access plus 30 days" ExpiresDefault "access plus 1 years" ExpiresDefault "modification plus 30 days" -----------------------------------------------------------
- 설정 마지막부분에 Directory 지시자와 ExpiresActive Off 설정을 통해 특정 디렉토리만 expire 설정에서 제외할 수 있다. 반대로 특정 디렉토리만 On으로도 설정할 수 있다. (일반 웹서버에 /images 와 같이 디렉토리가 있는 경우)
----------------------------------------------------------- ExpiresByType image/gif "acces plus 4 weeks" -----------------------------------------------------------
- 위처럼 파일의 유형으로도 가능하다.
아주 간단하지 않는가?
참고로 [다음(daum)] 의 이미지 서버는 28일(4주)로 [야후!코리아] 는 5년으로 설정되어 있다.