Skip to content

조회 수 30318 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
아파치 웹서버의 활용에 있어, 보다나은 보안 설정 방법 몇 가지를 소개한다.

특정 Agent가 자꾸 사이트에 들어와서 긁어간다든지,
이미지 파일을 외부에서 링크하지 못하도록 한다든지,
특정 IP에서는 인증없이, 그 이외 IP에서는 아파치 인증을 통해서만 페이지를 보게하는
등의 응용적인 측면에서 방법들이다.
이 방법들은 제가 사용하고 있는 몇가지 방법을 정리하는 의미에서 적은 것이다.

1. 특정 브라우저의 접속을 차단

 
SetEnvIfNoCase User-Agent "^Microsoft URL Control" dont_want

<Directory /usr/local/apache/htdocs>
   <Limit GET POST>
Order Allow,Deny
Allow from all
Deny  from env=dont_want
   </Limit>
</Directory>
 


----------------------------------------------
SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot
SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot

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하지 못하도록 (hotlink 방지)
                                                                                                       
다른 곳에서 파일을 링크하지 못하도록 하는 것을 hotlink 방지라고 한다.
hotlink 방지설정을 통하여
- 외부 사이트에서 링크를 통한 컨텐츠 유출 방지와
- 트래픽 감소 효과를 볼 수 있다.
                                                                                                       
1) 디렉토리를 제한하는 방법
                                                                                                       
referer 체크를 통해 외부에서 /images 이하디렉토리의 파일을 link하지 못하도록 한다.
이를테면 truefeel.kr 이라는 사이트가 있을 때
truefeel.kr내에 있는 동영상을 이 도메인에서는 링크할 수 있지만
외부 사이트에서는 이 동영상을 링크해도 권한이 없도록 할 수 있다.
                                                                                                       
 
SetEnvIf Referer "^http://localhost/"  local_referal
SetEnvIf Referer "^http://127.0.0.1/"  local_referal
SetEnvIf Referer "^http://홈페이지명/" local_referal
SetEnvIf Referer "^$"                  local_referal
                                                                                                       
<Directory /usr/local/apache/htdocs/images>
   Order Deny,Allow
   Deny  from all
   Allow from env=local_referal
</Directory>
 

                                                                                                       
2) 이미지 파일 확장자로 제한하는 방법 (Referer 사용)
   서비스 페이지가 ????.truefeel.kr 일 때
                                                                                                       
 
SetEnvIfNoCase Referer "^http://localhost/"        local_referal
SetEnvIf       Referer "^http://127.0.0.1/"        local_referal
SetEnvIfNoCase Referer "^http://(.*).truefeel.kr/" local_referal
SetEnvIfNoCase Referer "^http://truefeel.kr/"      local_referal
SetEnvIfNoCase Referer "^$"                        local_referal
                                                                                                       
<Files ~ "\.(gif|jpg|jpeg|png|bmp)$">
   Order deny,allow
   Deny  from all
   Allow from env=local_referal
</Files>
 

                                                                                                       
3) 이미지 파일 확장자로 제한하는 방법 2 (Rewriting Rule 사용)
                                                                                                       
 
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://truefeel.aaa/.*$          [NC]
RewriteCond %{HTTP_REFERER} !^http://www.truefeel.aaa/.*$      [NC]
RewriteRule \.(jpg|jpeg|gif|png|bmp)$ /images/deny.jpg [NC,L]
 


위처럼 설정하면 위 2개의 URL과 브라우저의 주소창에 이미지를 직접입력한 경우를 제외하고는
/images/deny.jpg를 보여주게 된다.
NC(no case)는 대소문자 구분하지 않음. L은 마지막 룰임을 표시한다.
                                                                                                       
4) 이미지 파일 확장자로 제한시 특정 디렉토리는 제외하는 방법
                                                                                                       
위의 '2)' 설정에 다음 내용을 추가하면 /upload/ 디렉토리에 있는 .jpg 파일이라도
외부 링크를 허용하게 된다.
                                                                                                       
 
SetEnvIfNoCase Request_URI "^/upload/"            local_referal
 


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와 비밀번호를 알아야만 접근하도록 설정할 수 있다.
다음 예를 보자.

 
<Directory "/home/truefeel/public_html">
            Options FollowSymLinks MultiViews
            AllowOverride AuthConfig
</Directory>
 


위 처럼 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>
 


.htpasswd 파일에 ID/PW를 생성해두면 해당페이지 인증을 할 수 있게 된다.

5. 특정 IP는 인증없이, 그 이외는 아파치 인증 거치도록

아래의 설정은 위의 4번 글을 읽었다면 뭔가 종합적인 설정을 한 것 처럼 보일 것이다.

 
<Location />
    AuthType Basic
    AuthName User
    AuthUserFile /home/truefeel/manage/.htpasswd
    AuthGroupFile /dev/null

    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파일은 일반 텍스트로 인식하라는 설정이다.

 
<Directory ~ "/usr/local/apache/htdocs/(upload|files)">
        RemoveType .html .php
</Directory>
 


위에서 ~ 기호는 디렉토리 경로에 정규 표현식을 사용하겠다는 의미로 (upload|files) 부분을
정규 표현식으로 인식한다. 따라서 htdocs/ 이하의 upload 디렉토리와 files 디렉토리를 의미한다.

단순히 /home/truefeel/public_html/data 디렉토리라면
<Directory "/home/truefeel/public_html/data"> 와 같이 설정하면 된다.


출저 : http://apache-kr.org/www/apacheTechnical.php?cmd=technicalView&rg_d=20070712&rg_seq_n=1

  1. [Apache] 2.4 버전에서 403 에러시 [authz_core:error AH0...

    Date2015.01.09 ByADMINPLAY Views7275
    Read More
  2. CentOS 5.X 에 MRTG설치 할때 한글 문제

    Date2014.06.06 ByADMINPLAY Views6872
    Read More
  3. WAS 란? WAS 뭐에요?

    Date2014.01.19 ByADMINPLAY Views10961
    Read More
  4. SetEnvIf 지시어 설명 (mod_setenvif)

    Date2014.01.18 ByADMINPLAY Views7383
    Read More
  5. tomcat 에서 OutOfMemory에러가 발생할때

    Date2013.09.09 ByADMINPLAY Views8765
    Read More
  6. Apache expires 설정으로 브라우저 캐시

    Date2013.03.18 Byl2zeo Views11891
    Read More
  7. apache 설치시 에러 발생 collect2: ld returned 1 exit s...

    Date2013.03.12 ByADMINPLAY Views9809
    Read More
  8. APM설치 후 80포트가 연결이 안되요....ㅜㅜ

    Date2013.02.14 Bykimbongsoo Views9801
    Read More
  9. 웹페이지 가속 기술인 모드 페이지스피드(mod_pagespeed)...

    Date2013.01.27 Byl2zeo Views12143
    Read More
  10. apache가 worker 모드인지 prefork 모드로 동작하는지 확인

    Date2013.01.21 Byl2zeo Views17465
    Read More
  11. 우분투9.10 - Tomcat6 와 Apache2연동

    Date2012.10.31 ByADMINPLAY Views11400
    Read More
  12. 아파치에서 멀티도메인 설정 방법

    Date2012.10.09 Byl2zeo Views20972
    Read More
  13. h264 스트리밍 서버 구축(리눅스,아파치) (실시간 아님, ...

    Date2012.08.13 ByADMINPLAY Views17171
    Read More
  14. Apache 에서 최대 접속자 수 늘리기

    Date2012.07.30 ByADMINPLAY Views14403
    Read More
  15. [정보] [Apache+PHP] Segmentation Fault가 발생할 경우

    Date2012.07.27 ByADMINPLAY Views47811
    Read More
  16. 서비스 제한측면의 아파치 활용 예제

    Date2012.06.26 ByADMINPLAY Views30318
    Read More
  17. (간단한 팁) 우분투에 Apache2 설치하기 ( apt-get )

    Date2012.04.01 By로키 Views17600
    Read More
  18. Apache mod_deflate

    Date2012.01.16 ByADMINPLAY Views23376
    Read More
  19. apache cronolog를 이용한 Apache Log File 날짜 별로 생...

    Date2012.01.16 ByADMINPLAY Views23504
    Read More
  20. Apache 로그레벨의 종류

    Date2012.01.16 ByADMINPLAY Views20842
    Read More
Board Pagination Prev 1 2 3 4 5 Next
/ 5

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234