본문 바로가기

컴퓨터/리눅스

IP 또는 사용자로 웹페이지 접속 제한하기


   apache 를 사용할 때, 지정된 경로에 접근할 수 있는 사용자를 지정할 때 보통 htpasswd 로 만들어진 파일을 사용하거나 아니면 특정 IP 로 들어 온 것만 허용할 수 있다. 이 글은 지정된 IP는 제약조건 없이 접근이 가능하되 그렇지 않을 경우 사용자를 묻도록 하는 방법을 살펴 본다. 이런 방법은, 회사나 학교 내부에서 접근할 때는 그냥 되고, 외부에서 접근해야 할 때는 사용자 ID 와 암호를 넣고 접근하도록 할 때 사용할 것이다.

   방법은 간단한데, htpasswd 로 만들어진 파일을 사용하거나 IP 를 열어 놓고 둘 중 어느 조건을 만족해도 된다고 설정하는 것이다. httpd.conf 파일에서 DocumentRoot 로 지정된 directory 의 접근지시자 설정 부분을 다음과 같이 바꾼다.


각각을 살펴 보자.

order deny, allow : deny 로 지정된 조건을 수행한 후, 그 후 allow 로 지정된 조건을 수행하도록 지시하고 있다. 원래 일반적인 웹서버의 경우 모든 사용자에게 접근을 하도록 허용하고, 특정 IP 나 IP 대역만을 막기 때문에 이 순서가 반대이다. 즉, allow from all 로 모든 사용자에게 기본적으로 접근이 가능하도록 하되 deny from [누구누구] 로 지정된 사람만 접근을 막는 식으로.

deny from all : 모든 사용자로부터의 접근을 막고 있다. 이 조건은 뒤쪽의 allow from 에 의해 override 될 것이다.

AuthUserFile /var/www/html/.htpasswd : 지정된 사용자와 그에 대한 암호가 저장되어 있는 파일. 아래쪽에서 지정된 IP가 아닌 경우 사용자 ID 와 password 를 물어 보는데, 그 때 이 파일에 있는 사용자와 그에 따른 암호이어야 접근이 허용된다. 이 파일은 htpasswd 실행 파일로 만들게 된다. 보다 자세한 것은 man page 나 htpasswd 실행 파일의 도움말을 참고 한다. (물론 .htpasswd 파일이 아니어도 상관이 없다. default가 이 파일이다)

require user [some_id] : .htpasswd 파일에 있는 모든 사용자에게 접근을 허용하는 것이 아니라, 이 옵션에 설정한 [some_id]에 해당하는 사용자만을 받아 들일 것이다.

allow from some.ip.num.1 sum.ip.num.2 : 이 곳에 지정된 IP 는 ID 를 물어 보지 않을 것이다.

satisfy any : 오늘의 key point. 위에서 설정한, .htpasswd 파일에 있는 사용자 이면서 require user 로 지정되어 있고 지정된 암호가 맞는 사용자 이거나 allow from 에 걸린 IP 이거나, 이 두 조건 중 어느 조건을 만족하면 접근을 허용한다는 의미이다. 따라서 아파치는 똘똘하게도 일단 IP를 검사할테고, allow from 에 걸린 IP 가 아닐 경우 ID 와 password 를 물어 오게 된다.


   좀 다른 이야기인데, 위에서 설명했듯이 일반 서버의 경우 order allow, deny 로 되어 있을 것이다. 가끔 일본이나 어느 싸이트 공격한다고 F5 계속 눌러서 그쪽 서버가 다운되었다느니 하곤 하는데, ㅋㅋ, 우낀 얘기다. 그럴 경우,

order allow, deny
allow from all
deny from [한국IP대역]

으로 설정해 버리면 한국에서는 아예 접속이 안되고 나머지 국가에서는 별 문제 없이 접속이 잘 될 것이다. 즉, 우리 나라에서 접속하는 것이 막힌 것이지 그쪽 서버가 뻗은 게 아니다. 물론 정말로 뻗은 경우도 있겠지만 그건 나처럼 대충 운영할 때의 얘기일 뿐이다.



'컴퓨터 > 리눅스' 카테고리의 다른 글

ar : object file 을 하나로 묶기  (0) 2011.06.24
/'`'`  (0) 2011.01.04
403 Forbidden  (1) 2011.01.03
리눅스를 잘하기 위해서는  (0) 2010.12.28
vnc로 접속했을 때 system 메뉴에서 멈추는 경우  (1) 2010.12.17