본문 바로가기
Server&OS/Linux

자동공격 봇 막기

by 백룡화검 2008. 6. 27.

mod_evasive 를 설치했습니다.
(여기서 젠투자랑 이것도 emerge 한방에 설치완료)
그리고, Rewrite 를 꺼버리고,
php.ini 의 auto_prepend_file 에
<?php
if(!($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1' && $_SERVER['HTTP_USER_AGENT'] == 'Shockwave Flash')) {
    if($_SERVER['SERVER_PROTOCOL'] != 'HTTP/1.1' || !isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
        if(count($_POST) != 0) {
            $fp = fopen('/home/mysite/postdata.txt', 'a');
            fwrite($fp, $_SERVER['REMOTE_ADDR']."\n");
            fwrite($fp, print_r($_POST, true));
            fwrite($fp, print_r($_GET, true));
            fwrite($fp, print_r($_SERVER, true));
            fwrite($fp, "---\n");
            fclose($fp);
            exit;
        }
        if(!preg_match('/BlackBerry|Daum|EMPAS\.ROBOT|Gigabot|Googlebot|NaverBot|Snapbot|Speedy\|SurveyBot|Twiceler|Yahoo|Yeti|MFeedBot|msnbot|webcollage|yoofind|xMind|BrightCrawler|NimbleCrawler|StackRambler|SurveyBot|ia_archiver/', $_SERVER['HTTP_USER_AGENT'])) {
            $fp = fopen('/home/mysite/agents.txt', 'a');
            fwrite($fp, $_SERVER['HTTP_USER_AGENT']."\n");
            fclose($fp);
            header('Content-Type: text/html; charset=utf-8');
            echo '인터넷 옵션 에서 프록시 설정을 제거하셔야 접속하실 수 있습니다.';
            exit;
        }
    }
}
요런걸 추가하여 Rewrite 로 했던것과 비슷한 효과를 내었습니다.
HTTP/1.0 으로 POST 를 하는건 백발백중 스팸봇이네요.
HTTP/1.1 에서 HTTP_ACCEPT_ENCODING 요게 설정되면 압축전송을 받을 수 있다는 뜻이고,
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=56751&sca=&sfl=wr_name%7C%7Csubject&stx=%BC%DB%C8%BF%C1%F8&sop=and&page=2
요게 되어 있으면, 압축전송을 하게 됩니다.
즉, 어설픈 봇은 HTTP_ACCEPT_ENCODING 를 보낼 수 없고,
흉내내려고 보냈다가는 받은 내용을 알아볼 수 없게 됩니다.
-------
플래시가 HTTP/1.1 을 쓰는데, 압축전송을 지원하지 않네요. 
-------

출처 : PHPSCHOOL