웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
아파치 설정 활용 예(서비스 제한측면)
2005.01.31 21:53
http://coffeenix.net/board_print.php?bd_code=711여기에 비슷한 글들이 올라와 있는데, 5~6번에 대한 글은 없는 것 같아 올립니다.
혹 글 퍼가시면 아래 제목 줄부터 그대로 옮기시면 됩니다.
--------------------------------------------------------------------
제 목 : 아파치 설정 활용 예(서비스 제한측면)
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2003.2~
정리일 : 2005.1.28(금)
아파치 웹서버의 활용에 있어, 보다나은 보안 설정 방법 몇 가지를 소개한다.
특정 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>
[/quote]
--------------------------------------------------------------------
----------------------------------------------
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하지 못하도록
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) 이미지 파일 확장자로 제한하는 방법 (서비스 페이지가 ????.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. 특정 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">와 같이 설정하면 된다.
7. 참고 자료
* Apache Directives
http://httpd.apache.org/docs/mod/directives.html
* Apache Authentication and Access Control
http://www.apache.kr.net/documents/authplus-story.html
혹 글 퍼가시면 아래 제목 줄부터 그대로 옮기시면 됩니다.
--------------------------------------------------------------------
제 목 : 아파치 설정 활용 예(서비스 제한측면)
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2003.2~
정리일 : 2005.1.28(금)
아파치 웹서버의 활용에 있어, 보다나은 보안 설정 방법 몇 가지를 소개한다.
특정 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>
[/quote]
--------------------------------------------------------------------
----------------------------------------------
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하지 못하도록
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) 이미지 파일 확장자로 제한하는 방법 (서비스 페이지가 ????.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. 특정 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">와 같이 설정하면 된다.
7. 참고 자료
* Apache Directives
http://httpd.apache.org/docs/mod/directives.html
* Apache Authentication and Access Control
http://www.apache.kr.net/documents/authplus-story.html
댓글 4
-
로크
2005.02.02 12:23
-
좋은진호
2005.02.03 12:12
그렇죠.
AddType 에 .php3, .phtml, .inc, .htm 등을 했다면 로크님 말씀처럼 하면 php로 인식안하게 되는거죠. -
가을이
2005.04.01 12:30
참고로, 동영상은 프로그레시브 전송시(embed 태그나 object 태그 이용시) referer가 남지 않습니다. 즉, 사용자 컴퓨터에서 단독으로 접근한 것처럼 되므로 위 2번 방식처럼 하게 되면 동영상이 재생되지 않습니다.
동영상 부분은 별도로 생각하셔야 합니다. -
가을이
2005.04.01 12:31
동영상 뿐만 아니라 embed 또는 object로 접근되는 개체들은 모두 referer이 남지 않습니다.참고하세요~
제목 | 글쓴이 | 날짜 |
---|---|---|
zeroboard 아이디 , 비번 분실시 변경법. | 이성헌 | 2005.12.15 |
nWmail 서버 구축 방법- 자세한 문서는 w3ip.com 에 있음 | 이성헌 | 2005.12.15 |
apache 의 httpd.conf 에서 alias 사용례... | 이성헌 | 2005.12.15 |
mysql 사용법 요약 정리 | 이성헌 | 2005.12.15 |
iis+php+mysql+zeroboard 설치 [3] | 이성헌 | 2005.12.15 |
apache+php+mysql+phpmyadmin+zeroboard 설치 | 이성헌 | 2005.12.15 |
우편번호테이블 시도(sido) 필드에 특별시,광역시 등이 빠져있는 경우 | 후훗 | 2005.11.07 |
Windows Server 2003 Standard Edition 설치 후 꼭 해야 할것 [4] | WebJh | 2005.09.20 |
윈도우에서 아파치 설치하기 [4] | 미오유 | 2005.08.18 |
메일주소 변조는 no, SPF(Sender Policy Framework)기술에 대해 | 좋은진호 | 2005.08.04 |
IDC 방문 이야기 ^^; 3 - 서버 업그레이드 이야기 [2] | 박용구 | 2005.08.03 |
아파치에서 phpBB웜 차단 및 별도 로그 저장 [3] | 좋은진호 | 2005.03.07 |
[해킹당한경험이 있는분 참고하세요]이제는 제로보드 서버도 안전하게 해킹당하지 않고 운영합시다. [20] | 양승의 | 2005.02.22 |
[MS05-004~015] 윈도우 취약점 패치 권고 | ATpple.com | 2005.02.16 |
MySQL 비밀번호 분실 대처요령 [2] | 임경우 | 2005.02.02 |
아파치 설정 활용 예(서비스 제한측면) [4] | 좋은진호 | 2005.01.31 |
원격접속데스크톱 XP이전버젼에서도 된다~! [5] | 류진곤 | 2005.01.23 |
홈페이지 대량 변조 발생에 따른 ‘주의’ 경보발령 [4] | ATpple.com | 2005.01.07 |
운영 환경에서 안전한 PHP 설정 [1] | 김병철 | 2005.01.06 |
rsync의 write only 기능(쓰기만 가능한 설정) | 좋은진호 | 2004.12.09 |
RemoveType .html .php .php3 .phtml .inc .htm
</Directory>
라고 쓰면 더 완벽하네요. ㅎㅎ