티스토리 뷰

반응형

웹서버를 하나 운영중인데 봇 접속이 너무 많아서 필터링을 하려고 했다. robots.txt , .htaccess , php 코드로 3가지 종류를 설명하겠다.  apache 서버이고 php 언어인 그누보드5 인 웹사이트이다.

여기서 주의할 것은 좋은 봇과 나쁜 봇으로 구분해야한다. 좋은 봇이란 거는 쉽게 말해서 사이트 노출에 
도움이 되는 봇인거고 (구글, 네이버, 빙 등등), 반대로 나쁜 봇은 그냥 데이타만 수집해 가는 것들이다. 데이타만 수집하는데 엄청나게 접속해와서 사이트 트래픽만 엄청나게 올라가고 접속 부하도 심하게 된다. 이래서 나쁜 봇 (=불필요한 봇)을 차단하기 위해서 작업을 해보았다. 

1. robots.txt

처음에는 robot.txt로 점잖게 허용할거랑 안할거랑 작성했는데 robots.txt에서 차단을 무시하는 봇이 있어서

User-agent: *
Disallow: /


User-agent: bingbot 
Allow:/


User-agent: Googlebot
Allow:/


User-agent: Amazonbot 
Disallow: /


User-Agent: MJ12bot 
Disallow: /

User-agent: dotbot
Disallow: /

User-agent: AhrefsBot
Disallow: /

 

2. .htacess 수정 

RewriteRule의 조건은 주어진 사용자 에이전트 중 하나가 포함된 경우, 모든 요청을 404 Not Found로 리디렉션하는 것입니다. 여기에 조건이 추가된 부분이 있으면, RewriteRule이 정확히 동작할 것입니다.

RewriteEngine On

# Apache access log의 User-Agent에 기록되는 Bot, Crawler 기준으로 거부
RewriteCond %{HTTP_USER_AGENT} ClaudeBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Bytespider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} GrapeshotCrawler [NC,OR]
RewriteCond %{HTTP_USER_AGENT} SeekportBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ia_archiver [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Amazonbot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} proximic [NC,OR]
RewriteCond %{HTTP_USER_AGENT} SemrushBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} DataForSeoBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} AhrefsBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ias_crawler [NC,OR]
RewriteCond %{HTTP_USER_AGENT} peer39_crawler [NC,OR]
RewriteCond %{HTTP_USER_AGENT} TTD-Content [NC,OR]
RewriteCond %{HTTP_USER_AGENT} admantax.com [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ias-or [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ias-va [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ias-ie [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ias-sg [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ias-au [NC,OR]
RewriteCond %{HTTP_USER_AGENT} CriteoBot [NC]
RewriteCond %{HTTP_USER_AGENT} Barkrowler [NC]
RewriteCond %{HTTP_USER_AGENT} DotBot [NC]
RewriteRule .* - [R=404,L]

라고 하는데 이것도 무시하고 다시 들어온다. 

캐시 문제:
웹 브라우저나 CDN 등에서 이전에 접근한 적이 있는 캐시된 페이지를 사용하여 접근하는 경우가 있습니다. 이 경우 최신 .htaccess 설정이 적용되지 않을 수 있습니다.

RewriteRule 적용 순서:
.htaccess 파일에 정의된 RewriteRule이 다른 규칙과 충돌하여 원하지 않는 동작을 할 수 있습니다. RewriteRule을 먼저 적용하고 싶은 순서대로 배치해야 합니다.

Apache 서버 설정:
Apache 서버의 다른 설정이 .htaccess의 RewriteRule을 무시하거나 우선시할 수 있습니다. 이 경우에는 Apache 서버 설정을 확인하고 .htaccess 파일의 권한이 올바르게 설정되었는지 확인해야 합니다.

Amazonbot 및 Barkrowler 동작 확인:
Amazonbot과 Barkrowler가 실제로 .htaccess 파일에서 정의한 조건에 맞는지 확인해야 합니다. 사용자 에이전트 문자열에 대소문자나 다른 부분이 있는지 확인하고, 다른 봇이 아닌지 확인하는 등의 작업이 필요합니다.

Apache 로그 확인: Apache 서버 로그를 확인하여 실제로 RewriteRule이 적용되고 있는지 확인할 수 있습니다. 이를 통해 어떤 사용자 에이전트가 어떤 조건에 일치하여 차단되는지 확인할 수 있습니다.

저위에 amazonbot barkrowler dotbot Bytespider 등은 실제로 로그를 보니 들어와서 403으로 가지 않고 200을 받아가고 있었으며 그누보드 접속내역에도 기록 되고 있었다. 캐쉬된건지 아무튼 안들어올때까지 적용되는 시간이 길수도있다길래 바로 해버리고 자고 싶었던 관계로 php코드로 넣어버렸다.

3.php 

코드로 잡고 싶지 않았지만 결국은 아래처럼 php 코드로 common.php에 추가했다.
$agent = strtolower($_SERVER['HTTP_USER_AGENT']);

$blocked_agents = array(
    'claudebot',
    'bytespider',
    'grapeshotcrawler',
    'seekportbot',
    'ia_archiver',
    'amazonbot',
    'proximic',
    'semrushbot',
    'dataforseobot',
    'ahrefsbot',
    'ias_crawler',
    'peer39_crawler',
    'ttd-content',
    'admantax.com',
    'ias-or',
    'ias-va',
    'ias-ie',
    'ias-sg',
    'ias-au',
    'criteobot',
    'barkrowler',
    'dotbot'
);

foreach ($blocked_agents as $blocked_agent) {
    if (strpos($agent, $blocked_agent) !== false) {
        http_response_code(403);
        exit;
    }
}

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함