HOME > 이용안내
이용안내
 
작성일 : 16-09-03 12:53
[리눅스서버] [Apache 서버활용]아파치서버 링크제한, 인증 및 활용
 글쓴이 : 제이네트워크
조회 : 5,805  

[Apache 서버활용]아파치서버 링크제한, 인증 및 활용


아파치 웹서버의 활용에 있어, 보다나은 보안 설정 방법 몇 가지를 소개한다.

특정 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






Cloud server Streaming service Domain Cloud Firewall

 
 

Total 113

번호 제   목   글쓴이 날짜 조회
113 [리눅스서버] CentOS7 SSH 접속포트 변경과 방화벽 오픈 제이네트워크 2018-12-10 22
112 [리눅스서버] NFS 연결오류시 mount.nfs: Input/output error 제이네트워크 2018-11-16 337
111 [리눅스서버] [CentOS 7] Python 3을 Cent7에서 yum으로 인스톨 하는 방법 제이네트워크 2018-11-02 449
110 [리눅스서버] [우분투서버 Ubuntu network device명 확인 및 변경] 제이네트워크 2018-06-21 1640
109 [리눅스서버] CentOS7 SSH 실행방법 정리 제이네트워크 2018-06-16 1771
108 [리눅스서버] VSFTP 에서 사용하는 port를 변경하기 제이네트워크 2018-04-26 2279
107 [리눅스서버] named 2차 네임서버로 zone transfer 권한 문제 제이네트워크 2018-04-13 2232
106 [리눅스서버] 리눅스 apache에서 동시 접속자 수 체크 제이네트워크 2018-03-30 2486
105 [리눅스서버] swap 메모리 추가하기 제이네트워크 2017-12-07 2506
104 [리눅스서버] [리눅스서버] [리눅스서버]CentOS-6.9 yum 오류날때 제이네트워크 2017-11-08 2648
103 [리눅스서버] vsFTPd 사용시 디렉토리 목록 조회가 안될때 제이네트워크 2017-10-30 2931
102 [리눅스서버] [zip모듈 추가설치]php 컴파일 없이 zip 모듈 추가 설치 제이네트워크 2017-08-30 2596
101 [리눅스서버] [openssl]php에 openssl 추가모듈 설치하기 제이네트워크 2017-08-30 2917
100 [리눅스서버] [NFS에러] NFS에서 에러 메세지 Stale NFS file handle 발생하는 경우 제이네트워크 2017-07-28 2769
99 [리눅스서버] CentOS 5.11.x 에서 php-5.1.4 소스설치시 mysqli 에러로 make 안될때 제이네트워크 2017-07-25 2731
98 [리눅스서버] [리눅스서버]CentOS- 5.11.yum 오류날때 제이네트워크 2017-07-24 2629
97 [리눅스서버] 리눅스에서 파일 인코딩 확인하기 및 변환하기(iconv 명령) utf-8 ↔ euc-kr 제이네트워크 2017-06-27 3351
96 [리눅스서버] [NFS 에러] mount.nfs: Stale NFS file handle 제이네트워크 2017-06-21 2941
95 [리눅스서버] [php soap 모듈 추가 설치] - php 확장 모듈 설치 제이네트워크 2017-05-25 4843
94 [리눅스서버] centos7 에서 서비스(Vsftp) 시작 명령어 관련 제이네트워크 2017-05-16 3468
93 [리눅스서버] CentOS 7에서 부팅시 /etc/rc.local 파일 실행 시키는 방법 제이네트워크 2017-05-16 4395
92 [리눅스서버] Centos5.x yum install 에러시 CentOS-Base.repo 변경 제이네트워크 2017-05-01 4398
91 [리눅스서버] CENTOS7 에서 PHP-7.x 소스 설치시 mysqli , mysql , pdo-mysql 에러시 제이네트워크 2017-04-28 5004
90 [리눅스서버] 리눅스에서 CPU 정보 및 CPU 코어개수, 물리 CPU 수를 확인하는 방법 제이네트워크 2017-04-27 4218
89 [리눅스서버] [Centos7.x 에서 vsftp접속문제] 500 OOPS:vsftpd:refusing to run with writable root inside chroo… 제이네트워크 2017-04-19 4105
88 [리눅스서버] [디스크 포맷에러] /dev/sdb1 is apparently in use by the system; will not make a filesystem he… 제이네트워크 2017-04-18 4403
87 [리눅스서버] 리눅스 서버에서 하드디스크(SSD) 스펙 확인 하는 방법 제이네트워크 2017-03-21 5594
86 [리눅스서버] 리눅스서버에서 한글파일명 깨질때 (파일질라나 ftp로 한글깨짐) 제이네트워크 2017-03-16 7534
85 [리눅스서버] cband 설치 제이네트워크 2016-11-30 4718
84 [리눅스서버] [BIND - 네임서버 존파일에서 SRV 레코드 추가] 제이네트워크 2016-11-18 4843
83 [리눅스서버] [ 우분투정리 ubuntu ] 제이네트워크 2016-10-25 5584
82 [리눅스서버] [아파치서버]mod_url.so 모듈 추가 설치 (웹서버에서 한글링크 허용) 제이네트워크 2016-09-29 8365
81 [리눅스서버] [Apache 서버활용]아파치서버 링크제한, 인증 및 활용 제이네트워크 2016-09-03 5806
80 [리눅스서버] [Apache 웹서버]apache2에서 geoip 적용하기 제이네트워크 2016-08-26 5539
79 [리눅스서버] [Apache 웹서버]서비스 제한측면의 아파치 활용 예제 제이네트워크 2016-08-26 6132
78 [리눅스서버] [Apache] worker 방식 접속자 튜닝방법 제이네트워크 2016-08-26 4937
77 [리눅스서버] pdo-mysql 추가 설치 방법 제이네트워크 2016-08-26 5342
76 [리눅스서버] INIT: no more processes left in this runlevel 메세지 발생후 부팅에러 제이네트워크 2016-08-01 5189
75 [리눅스서버] vsftp 에러코드 중 500 OOPS: priv_sock_get_int 오류 발생시 해결법 제이네트워크 2016-07-31 6011
74 [리눅스서버] 리눅스에서 공백이 포함된 디렉토리 처리 제이네트워크 2016-07-26 5346
 1  2  3