htaccess 간단 보안 팁

htaccess을 이용한 간단 보안

기본적으로 해주어야 할 보안조치


htaccess란?

.htaccess (hypertext access)는 Apache 웹 서버의 디렉토리 레벨을 설정하는 기본 파일로 .htaccess는 한 특정 디렉토리에 위치하며, 모든 하위 디렉토리를 포함한 해당 디렉토리에 영향을 미친다.  쉽게 말하면 이 파일이 있는 위치를 포함해 그 하위 디렉토리에 있는 모든 접근에 대한 규칙을 설정한다는 뜻이다. 따라서 일반적인 호스팅 업체들의 디렉토리 구성은 public_html 디렉토리에서 웹 페이지 파일들이 저장되므로, 보통 .htaccess 파일은 public_html 디렉토리에 위치시키는 것이 보통이다.  물론 특정 하위 디렉토리 접근에 대한 별도의 규칙이 필요하다면 그 디렉토리안에 .htaccess를 별도로 만들어 주면 되지만, public_html 디렉토리의 .htaccess를 한 번 통과해서 들어오는 접근이므로 하위 디렉토리의 .htaccess는 상위 .htaccess의 내용을 중복할 필요는 없다. (쓰다보니 되게 헷갈리게 보인다.)



htaccess의 퍼포먼스

당연히 .htaccess는 사용자의 접근 전체에 대해 서버가 체크하는 과정이므로, 당연히 서버 부하에는 좋을 리는 없다. 하지만 htaccess를 이용해 변경될 일이 별로 없는 이미지 파일이나 js파일의 캐쉬설정을 해놓는 등 왠만하면 해놓는 게 좋은 것들이 있다. 그 중 하나가 바로 기본적인 보안 대책이다. 이후에 나오는 htaccess구문들은 월 6천원짜리 트래픽무제한 Hostgator Shared 호스팅 상품을 쓰면서, PHP만 무지하게 돌려댄 일일접속자수 1만명의 어느 사이트에서 1년 넘게 적용해오면서 검증한 것이므로, 서버 부하는 걱정하지 않아도 될 듯하다.


#1 기초적인 프록시 차단

프록시 서버를 100% 막아낼 수 있는 방법은 없다. 프록시 서버를 구현하는 방법이 너무 많고, 새로운 기법이 하루가 다르게 생겨나고 있기 때문이다. 예를 일본 츠쿠바 대학 모 연구팀에서는 "프록시가 아니면서 프록시 기능을 하는 새로운 개념"을 얼마전에 만들어서 테스트하고 있다. 나도 이 프록시에 대해 테스트를 해보았지만 이를 프록시로 탐지하는 것은 아직 불가능한 것 같다. 이 정도로 프록시 기술을 빠르게 변화하고 있는데 htaccess로 프록시를 완전 차단한다는 것은 말이 되지 않는다. 하지만, 아주 전형적이고 좀 철지난 프록시 방식을 통해 들어오는 접근이라도 htaccess를 통해 차단해 줄 필요는 있다. 다음의 코드가 프록시를 통한 접근을 막는데 약간의 도움은 줄 것이다.

RewriteEngine on RewriteCond %{HTTP:VIA} !^$ [OR] 
RewriteCond %{HTTP:FORWARDED} !^$ [OR]
RewriteCond %{HTTP:USERAGENT_VIA} !^$ [OR]
RewriteCond %{HTTP:X_FORWARDED_FOR} !^$ [OR]
RewriteCond %{HTTP:PROXY_CONNECTION} !^$ [OR]
RewriteCond %{HTTP:XPROXY_CONNECTION} !^$ [OR]
RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]
RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$ RewriteRule ^(.*)$ - [F] 

구글 크롬 브라우저의 확장 프로그램 중 하나인 Zenmate라는 프록시 우회 툴이 있다. 이를 통한 접근을 막고 싶다면 아래의 한 줄을 위 코드들 중간쯤에 추가해 주면 된다. (OR문이 있어서 중간에 넣는 것이 좋음.)

RewriteCond %{REMOTE_HOST} ^.*zenmate.* [OR]


#2 접속하는 브라우저 정보에 따른 차단

사이트의 로그파일을 분석해보고, 특정 user-agent(브라우저 정보)에서 의심스러운 정황이 보인다면 아예 그 브라우저 정보를 가진 접근을 막아야 할 필요가 있다. 아래코드는 그 샘플이다. user-agent에 특정 스트링이 포함되면 차단하고 싶을 경우에는 RewriteCond %{HTTP_USER_AGENT} ^.*특정스트링.* [NC,OR] 을 사용하면 된다. 

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^.*Transmission.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Ezooms.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^ HuaweiSymantecSpider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Localbot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*MJ12bot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Sosospider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Talk Talk.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Trend Micro [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Vagabondo.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*YandexBot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*YandexMedia.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*torrent.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*uTorrent.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*iLOVECZ.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*BTwebclient.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Bittorrent.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*BitComet.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} ^HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule .* - [F,L]


일부 간악한 자들이, 보안에 취약한 사이트를 찾아서 토렌트 트래커 서버로 악용하려는 피도 눈물도 없는 공격이 있을 수 있다. 집에서 토렌트로 뭐 하나 받아도 컴퓨터가 엄청 느려지는데 내 사이트가 들어있는 서버를 트래커서버로 돌려버린다면... 상상만 해도 아찔하다. 그래서 토렌트 프로그램의 user-agent 스트링을 포함하면 차단하게 하였다. 위의 코드 윗쪽에 torrent, utorrent, bitcomet 등이 들어있는 줄을 참고.

RewriteEngine on 이것은 계속 중복할 필요가 없다. 그리고 조건문의 마지막줄에는 [OR]을 빼야하는 것이 중요. 위의 코드예의 경우 마지막 조건문을 RewriteCond %{HTTP_USER_AGENT} ^Zeus [OR]로 해버린다면, 모든 접근이 다 차단되어버리니 조심해야 한다.



#3 효과적인 5G Blacklist

perishablepress.com에서 제공하는 htaccess 보안 코드도 활용해 볼 만하다. 주소창에 안전하지 않은 문자들을 들어있어 서버에 부하를 줄 목적으로 DB쿼리를 유발시킨다던가, perishablepress.com 자체적으로 판단한 차단시켜야 할 user-agent들 차단시킨다. 해마다 새로운 버전의 코드를 제공하니 http://perishablepress.com/category/htaccess/ 해당 사이트를 방문해서 최신버전을 확인하는 것이 좋다. 코드는 아래 링크 참고.

http://perishablepress.com/5g-blacklist-2013/


#4 IP Blacklist

perishablepress.com에서는 상습적으로 악의적인 공격을 한다고 보고된 IP들을 정리해서 htaccess에서 차단할 수 있도록 게시하는데, 물론 이 IP들만 차단한다고 안전해지리라 볼 수는 없지만 적용해서 안 좋을 것은 없다. 코드는 아래 링크 참고.

http://perishablepress.com/2013-ip-blacklist/


※ 드래그 하시려고 했던 분들께서는 아래 txt 파일을 다운하셔용.

htaccess-secure.txt

사람의 생각을 대신해 주는 서비스는 언제 나올까?

    이미지 맵

    배우자! IT/Web, App 다른 글

    이전 글

    다음 글