블로그 프로필 이미지

2015. 3. 7. 22:22
SMALL




서버를 운영하다보니, 가장 중요한걸 깨닫게 된다. 바로 보안부분이다. 처음 웹서버를 운영하고, 검색 싸이트에 등록하여, 사용자들의 유입이 들어올때쯤, 로그를 확인하게 된다. 그런데 로그에 GET 이나 POST 또는 HEAD 가 아닌 CONNECT 라는 메소드가 뜨는걸 볼 수 있다.  이메소드드에 대한 로그는 아래와 같다.


 "CONNECT mx2.mail2000.com.tw:25 HTTP/1.0" 403


서버에 대한 전문적인 지식이 없던 나는 CONNECT 메소드는 알았지만, 위의 로그가  무엇을 하는 행위인지조차 처음에는 알지 못했다. 역시나 구글링을 통해 답을 얻게됬는데, 위의 로그는 내 서버를 이용하여 스팸메일을 보낼려고 시도했다는 내용이였다. 위의 로그에선 상태코드가 403 으로 접근이 금지된걸로 나오지만, 처음에는 200이였다.  나쁜놈들...


암튼 나는 해결방법을 찾기위해 웹서버의 메소드를 제한하는 방법을 검색 하였다. 그리고 검색을 통해 몇가지 알게된 사실이 있다. 보통 큰 웹서버같은경우 사용자들에게 허용하는 메소드는 GET POST 로 제한을 해놓는다는 거였다. 난 비록 작아서 보이지도 않는 웹서버지만, 위의 CONNECT 메소드처럼 위험한 메소드는 차단해 버리는게 좋다고 생각했다. 


GETPOST 메소드 외에 전부 차단하는 방법은 아래와 같다. 일단 아파치 설정 파일인 httpd.conf 파일을 열어 자신의 ROOT 디렉토리 설정 부분을 찾아서 그안에 아래에서 하얀박스 안에 있는 구문을 추가해 주면된다. 


 LimitExecept 지시어 추가


<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride FileInfo AuthConfig Limit
AllowOverride All
Require all granted
<LimitExcept GET POST> 
        Order deny,allow 
        Deny from all 
    </LimitExcept> 
</Directory>


위에서 LimitExcept  지시어는  GET POST 그외의 메소드가 들어올시 어떠한 행동을 취할 지 설정하는 부분이다. 참고로 이거와 비슷한 Limit 가 있는데 첨엔 정말 헷갈렸다. 


Limit 지시어는 메소드에 대한 접근을 인증을 통해 허용되게 할때 필요한 지시어다. 보통 구글링에서 보면 두가지를 전부다 같이 쓰는 경우가 있다. 그 구문은 아래와같다.


 Limit 지시어


<Limit GET POST> 
        Order deny,allow 
        Allow from all
    </LimitExcept> 


 LimitExcept 지시어


<LimitExcept GET POST> 
        Order deny,allow 
        Deny from all 
    </LimitExcept>


하지만 두가지를 전부 다 쓸필요는 없다. 위쪽의 Limit 지시어에선 GET 과 POST 에 대한 설정을 의미하고, 아래의 LimitExcept 지시어는 GET POST 를 제외한 그외메소드에 대한 설정이다.  이거 정말 헷갈릴 수 있으니  확실히 개념을 잡아두는게 좋다. 위와 같이 설정하게 되면, 그냥 중복만 될뿐이다. 여기선 GET POST 를 제외한 나머지 메소드를 제한 해야하기 때에 LimitExcept 지시어 하나만 사용하는편이 좋다.


다시한번 말하지만 Limit 지시어와 LimitExcept 를 같이 사용하는 이유는 제한 과 허용을 인증을 통해 설정되도록 하기 위해서 사용하는것이다 즉 Limit 지시어 에서는 설정된 메소드만 허용하게 만들고 LimitExcept 지시어 에서는 설정된 메소드 그외의 메소드에 대한 처리를 위해 사용되는것이다.

LIST