Tip & Tech

활용팁

홈 > 회원포럼 > 활용팁
활용팁

htaccess 보안 팁

8 큐브 12 2021 3 0

28cc576710b25c1fe840deaa15329fad_1421799640_8547.jpg 

 

 

 

당연히 .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] 

 

 

 

#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]로 해버린다면, 모든 접근이 다 차단되어버리니 조심해야 한다.

 

 

사이트 수정하다 생기는 00000.php.bak

액세스를 차단​​

 

<FilesMatch "\.bak">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

<FilesMatch "\.config">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

<FilesMatch "\.sql">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch> 

 

12 Comments
18 된장남 2015.01.21 12:09  
큐브님 이런 정보 많이 좀 부탁 드립니다.. ^^
8 큐브 2015.01.21 12:15  
네............ 자료는 많은데 조금씩올리게요
8 우성군 2015.01.21 12:16  
정보 고맙습니다.

nginx도 이런 자료 있을까요 ㅎㅎ
8 큐브 2015.01.21 12:18  
있어요 올려드리겠요 ...........지금은 일이많아서요 나중에 정리해서 올려드리겠습니다
8 우성군 2015.01.21 12:18  
항상 고마워요!!!
8 큐브 2015.01.21 12:20  
일본 아파치 강의 내용이라 자료준비하면서 이런쪽으로는 많아요.......................
8 우성군 2015.01.21 12:41  
넵 ㅎㅎ
15 블루엔젤 2015.01.21 19:36  
차단할 폴더내에 .htacess 파일을 만들어서 업로드.
파일내용은 아래와 같이 작성하면 됩니다.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?naver\.com [NC]
RewriteRule .*\.(jpe?g|gif|png|swf|flv|mp3|mp4|wma|wmv|asf|mov|avi)$ - [NC,F]

3번째 줄은 허용 도메인.
4번째 줄은 차단할 파일 확장자.

차단시 대체이미지 표시하려면

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?naver\.com [NC]
RewriteRule \.(jpe?g|gif|png|swf|flv|mp3|mp4|wma|wmv|asf|mov|avi)$ http://불펌시 대체 이미지.jpg [NC,R,L]
5 돋보기 2015.05.20 17:03  
보안
15 신비 2015.06.19 01:05  
아래 내용도 도메인/.htaccess 파일에 적어 넣나요?


<FilesMatch "\.bak">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

<FilesMatch "\.config">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

<FilesMatch "\.sql">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>
8 galaxym 2015.06.19 06:40  
네.............
11 너무느린신 2017.04.28 07:29  
감사합니다.
제목
최근 글
최근 댓글
Facebook Twitter GooglePlus KakaoStory NaverBand