botprotection draft

웹 크롤러 등의 로봇을 통한 HTTP 요청을 제어한다.

/usr/local/m2/setting.json 다음 영역에 대해 기술한다.

{
  "functions": {
    "contents": {
      "botprotection": {
        "meta": {
          "enable": true,
          "OverridingCmd": false
        },

        "detect": {
          "robotsTxt": {
            "enable": true
          },
          "ip": {
            "enable": true
          },
          "userAgent": {
            "enable": true
          },
        },

        "flows": {
          "matchingList": [
            "name": "basic",
            "path": "/",
            "action": {
              "lv2": {"code": 403},
              "lv5": {"location": "/captcha?redirect=$URL"},
              "lv7": {"location": "/home"}
            }
          ]
        }
      }
    }
  }
}

How to use

Important

  • 이 함수는 바이패스 함수이므로, 캐싱엔진을 경유하지 않는다.

명령어 리스트

명령어

파라미터

동작

detect

(하위설정)

detect 실행

flows

(하위설정)

flows 실행

Important

  • 이 함수는 프로덕션 환경에서 명령어 사용을 금지한다.

  • 클라이언트에서 명령어 사용시, 보안 우회로가 만들어질 수 있으므로 아래 설정토록 한다.

  • meta.OverridingCmd: false

메트릭

metric

type

label

description

m2_botprotection_wait_queue

gauge

vhost

대기 큐 길이

m2_botprotection_requests_total

counter

vhost

요청수

m2_botprotection_complete_total

counter

vhost

성공수

m2_botprotection_fail_total

counter

vhost

reason

실패수

  • not200

Note

실패가 존재할 경우에만 메트릭 제공.

m2_botprotection_robotstxt_disallow_total

counter

vhost

차단수

m2_botprotection_ip_disallow_total

counter

vhost

차단수

m2_botprotection_useragent_disallow_total

counter

vhost

차단수

m2_botprotection_flows_level_total

counter

vhost

level

레벨

  • lv2

  • lv5

  • lv7

에러 메시지

에러코드

priority

응답코드

x-sc-chain-error 필드

설명

추가정보

31600001

Error

원본응답

not200

원본에서 200 OK 를 응답받지 못했다.

vhost, url, x-ctx-id, response-code, content-length

31600002

Error

원본응답

faildb

데이터베이스 획득 실패

vhost, url, x-ctx-id, response-code, content-length

31600003

Error

원본응답

failrobotstxt

robots.txt 획득 실패

vhost, url, x-ctx-id, response-code, content-length

meta

"meta" : {
  "enable" : false,
  "OverridingCmd" : false
}
enable (기본: false)

Bot Protection 활성화

OverridingCmd (기본: false)
  • 명령어에 의한 설정 오버라이딩 활성화

  • 프로덕션 환경에서는 사용하지 않는다.

detect

"detect": {
  "robotsTxt": {
    "enable": true
  },
  "ip": {
    "enable": true,
    "disallows": [],
    "allows": []
  },
  "userAgent": {
    "enable": true,
    "disallows": [],
    "allows": []
  },
}

robotsTxt

enable (기본: false)
  • robots.txt 에 허가되지 않은 (Disallow 명시된) 요청을 차단한다. 처리 방법은 flows 에 따른다.

  • 갱신 주기는 원본의 Cache-Control 에 따른다. (기본값: max-age=86400 )

ip

허가되지 않은 IP의 요청을 차단한다.

enable (기본: false)

IP 탐지 기능 활성화

disallows (기본: null)

IP 차단 목록

allows (기본: null)

IP 허용 목록

userAgent

허가되지 않은 클라이언트 요청을 차단한다.

enable (기본: false)

User-Agent 를 활용한 bot 탐지 기능 활성화

disallows (기본: null)

User-Agent 차단 키워드 목록

allows (기본: null)

User-Agent 허용 키워드 목록

Note

  • 설정에 명기한 disallows 또는 allows 항목을 DB 보다 우선순위가 높다.

  • disallows 설정은 allows 보다 우선순위가 높다.

flows

"flows": {
  "matchingList": [
    "name": "basic",
    "path": "/",
    "action": {
      "lv2": {"code": 403},
      "lv5": {"location": "/captcha?redirect=$URL"},
      "lv7": {"location": "/home"}
    }
  ]
}

matchingList

matchingList (기본: null)

name 패턴의 이름

path 매칭할 요청 경로

action
lv0 ~ lv10

code 응답 상태코드

location 리디렉션 경로. code 가 명기되지 않았다면 302 상태코드를 응답한다.