필드, 함수 및 표현식 사용

액션과 더불어 필드 및 표현식은 WAF 사용자 정의 규칙의 기본 구성 요소입니다. 이러한 요소는 함께 작동하여 사용자 지정 규칙을 일치시키기 위한 기준을 정의합니다.

필드

CIS 이 HTTP 요청을 받으면 요청을 분석하여 일치하는 필드 테이블을 만듭니다. 이 필드 테이블은 요청이 처리되는 동안에만 존재하며 표현식 일치에 사용되는 요청 속성을 포함합니다.

각 필드 값은 다음과 같이 다른 위치에서 제공될 수 있습니다.

  • 트래픽에서 직접 얻은 원시 특성이며 예를 들어, http.request.uri.path가 있습니다.
  • 변환, 작성 또는 기본 조작의 결과인 파생 값(예: http.request.uri.path의 값을 모두 소문자로 만들고 다른 필드의 필드로 사용 가능).
  • 검색, 계산 또는 기타 지능의 결과인 컴퓨터 값이며 예를 들어, 관련 원시 값 및 파생 값을 조사하는 기계 학습 프로세스에서 동적으로 계산된 cf.threat_score가 있습니다.

사용 가능 필드

사용 가능 필드
필드 이름 유형 예제 값 참고
http.cookie 문자열 session=A12345;-background=light 전체 쿠키를 문자열로 사용
http.host 문자열 www.example.com 전체 요청 URI에서 사용된 호스트 이름
http.referer 문자열 HTTP Referer 헤더 Referer requestHTTP 헤더는 현재 요청된 페이지로 연결된 웹 페이지의 주소를 포함합니다.
http.request.body.raw 문자열 변경되지 않은 HTTP 요청 본문.
http.request.full_uri 문자열 https://www.example.com/articles/index?section=539061&expand=comments 웹 서버가 수신한 전체 URI(웹 서버로 전송되지 않는 _#fragment_는 포함하지 않음)
http.request.method 문자열 POST HTTP 방법, 대문자
http.request.uri 문자열 /articles/index?section=539061&expand=comments 요청의 절대 URI
http.request.uri.path 문자열 /articles/index 요청의 경로
http.request.uri.query 문자열 section=539061&expand=comments 구분 접두부 "?"를 제외한 전체 조회 문자열
http.user_agent 문자열 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 전체 HTTP 사용자 에이전트
http.x_forwarded_for 문자열 전체 X-Forwarded-HTTP 헤더
ip.src IP 주소 93.155.208.22 클라이언트 IP 주소 TCP. 필요에 따라 이 주소는 원래 클라이언트의 실제 IP 주소를 반영하도록 조정할 수 있습니다(예: X-Forwarded-For 또는 X-Real-IP와 같은 HTTP 헤더를 사용하는 방법)
ip.src.region 문자열 텍사스 수신 요청의 IP 주소와 연관된 지리적 위치 지역.
ip.geoip.asnum 숫자 222 Autonomous System(AS) 수
ip.geoip.country 문자열 GB 2자리 국가 코드
ssl 부울 클라이언트에 대한 HTTP 연결이 암호화되는지 여부
ip.src.subdivision_1_iso_code 문자열 GB-ENG IP 주소와 연결된 첫 번째 레벨 지역의 ISO 3166-2 iP 주소와 연결된 첫 번째 레벨 지역의 코드입니다. 실제 값을 사용할 수 없는 경우 이 필드에는 빈 문자열이 포함됩니다. 이 필드를 사용하려면 CIS Enterprise 요금제가 필요합니다.
ip.src.subdivision_2_iso_code 문자열 GB-SWK IP 주소와 연결된 두 번째 레벨 지역의 ISO 3166-2 iP 주소와 연결된 두 번째 레벨 지역의 코드입니다. 실제 값을 사용할 수 없는 경우 이 필드에는 빈 문자열이 포함됩니다. 이 필드를 사용하려면 CIS Enterprise 요금제가 필요합니다.
ip.src.is_in_european_union 부울 자세한 내용은 ip.src.is_in_european_union.

이러한 표준 필드는 Wireshark 표시 필드 참조의 이름 지정 규칙을 따릅니다. 단, 위에 제공된 예제 값에서 약간의 미묘한 변형이 있을 수 있습니다.

표준 필드 외에 다음과 같은 Cloudflare 정의 필드도 사용할 수 있습니다.

사용 가능한 Cloudflare 필드
필드 이름 유형 예제 값 참고
cf.client.bot 부울 해당 요청이 알려진 봇이나 크롤러로부터 온 것인지 여부와 상관없이, 의도가 선한지 악한지는 고려하지 않습니다.
cf.threat_score 숫자 0 이 필드는 Cloudflare 위협 점수를 나타냅니다. 이전에는 위협 점수가 0~100점으로 표시되었으며, 0은 낮은 위험도를 의미했습니다. 이제 위협 점수는 항상 0(0)입니다.
cf.waf.score 숫자 1-99 요청이 악의적일 가능성을 추정하는 머신 러닝 기반 점수입니다. 점수 범위는 1(악성일 가능성이 가장 높음)에서 99(안전할 가능성이 가장 높음)까지입니다. 점수가 낮을수록 위험도가 높다는 뜻입니다. 임계값 기반 방화벽 규칙을 만드는 데 유용합니다.
cf.ray_id 문자열 Cloudflare를 통과하는 모든 요청에 부여되는 식별자입니다.
cf.edge.server_ip IP 주소 이 필드는 HTTP 요청이 해결된 글로벌 네트워크의 IP 주소를 나타냅니다. 이 필드는 BYOIP 고객에게만 의미가 있습니다.
cf.edge.server_port IP 주소 1-65535 이 필드는 Cloudflare 글로벌 네트워크가 요청을 수신한 포트 번호를 나타냅니다. 이 필드를 사용하여 특정 포트의 트래픽을 필터링할 수 있습니다.
cf.tls_cipher 문자열 AES128-SHA256 Cloudflare에 연결하기 위한 암호입니다.
cf.tls_version 문자열 TLSv1.2 TLS 버전으로 Cloudflare에 연결합니다.

ip.src.is_in_european_union

요청은 유럽연합(EU) 국가로부터 시작되며 CIS 기업용 요금제가 필요합니다.

다음 표에는 지리적 위치 데이터에 따른 EU 국가 목록이 나와 있습니다:

국가 코드 및 이름
국가 코드 국가 이름
AT 오스트리아
AX 올란드 제도
BE 벨기에
BG 불가리아
CY 키프로스
CZ 체코
GE 독일
DK 덴마크
EE 에스토니아
ES 스페인
FI 핀란드
FR 프랑스
GF 프랑스령 기아나
GP 과들루프
GR 그리스
HR 크로아티아
HU 헝가리
IE 아일랜드
IT 이탈리아
LT 리투아니아
LU 룩셈부르크
LV 라트비아
MF 세인트마틴 섬
MQ 마르티니크
MT 몰타
NL 네덜란드
PL 폴란드
PT 포르투갈
RE 레위니옹
RO 루마니아
SE 스웨덴
SI 슬로베니아
SK 슬로바키아
YT 마요트

봇 관리 필드

기업용 봇 관리는 도메인에 정교한 봇 보호 기능을 제공하는 유료 애드온입니다. 고객은 콘솔 내에서 자동화된 트래픽을 식별하고 적절한 조치를 취하며 자세한 분석을 볼 수 있습니다.

다음 표는 사용 가능한 봇 필드에 대한 정보를 제공합니다:

사용 가능한 클라우데라 봇 관리 필드
필드 이름 유형 참고
cf.client.bot 부울 이 필드는 선의 또는 악의의 의도에 관계없이 요청이 알려진 봇 또는 크롤러로부터 수신되는지 여부를 표시합니다.
cf.bot_management.verified_bot 부울 요청이 알려진 정상 봇 또는 크롤러에서 발생했는지 여부를 나타내며 cf.client.bot 와 동일한 정보를 제공합니다. 이 필드는 봇 관리가 활성화된 CIS 엔터프라이즈 요금제에서 사용할 수 있습니다.
cf.bot_management.corporate_proxy 부울 이 필드는 수신 요청이 식별된 기업 전용 클라우드 기반 기업 프록시 또는 보안 웹 게이트웨이에서 오는지 여부를 나타냅니다. 이 필드는 봇 관리가 활성화된 CIS 엔터프라이즈 요금제에서 사용할 수 있습니다.
cf.bot_management.detection_ids 숫자 이 필드에는 요청에 대한 봇 관리 휴리스틱 탐지에 대한 ID가 나열됩니다. 이 필드를 사용하여 규칙에서 특정 휴리스틱을 일치시키거나 제외할 수 있습니다. 하나의 요청에 여러 개의 탐지가 있을 수 있습니다.
cf.bot_management.ja3_hash 문자열 이 필드에는 잠재적인 봇 요청을 식별하는 데 도움이 되는 SSL / TLS 핑거프린트가 제공됩니다. 자세한 내용은 JA3/JA4 지문을 참조하세요. 이 필드를 사용하려면 봇 관리가 활성화된 CIS Enterprise 요금제가 필요합니다.
cf.bot_management.ja4 문자열 이 필드에는 잠재적인 봇 요청을 식별하는 데 도움이 되는 SSL / TLS 핑거프린트가 제공됩니다. 자세한 내용은 JA3/JA4 지문을 참조하세요. 이 필드를 사용하려면 봇 관리가 활성화된 CIS Enterprise 요금제가 필요합니다.
cf.bot_management.js_detection.passed 부울 방문자가 이전에 JS 감지를 통과했는지 여부를 나타냅니다. 자세한 내용은 JavaScript 탐지를 참조하세요. 이 필드를 사용하려면 봇 관리가 활성화된 CIS Enterprise 요금제가 필요합니다.
cf.bot_management.score 숫자 이 필드는 1~99점 사이의 점수를 사용하여 요청이 봇으로부터 시작되었을 가능성을 나타냅니다. 점수가 낮으면 봇 또는 자동화된 상담원으로부터 요청이 들어온 것임을 나타냅니다. 점수가 높으면 사람이 요청을 발행했음을 나타냅니다. 이 필드를 사용하려면 봇 관리가 활성화된 CIS Enterprise 요금제가 필요합니다.
cf.bot_management.static_resource 숫자 cf.bot_management.score 을 사용하여 규칙을 만들 때 정적 리소스를 포함할지 여부를 나타냅니다. 이 필드를 사용하려면 봇 관리가 활성화된 CIS Enterprise 요금제가 필요합니다.
cf.verified_bot_category 문자열 이 필드에는 인증된 봇의 유형과 목적을 입력합니다. 자세한 내용은 인증된 봇 카테고리를 참조하세요.

함수

사용자 정의 규칙 언어에는 필드를 변환하는 여러 가지 함수가 있습니다.

현재 표현식 작성기에서는 이 기능들이 지원되지 않습니다.

맞춤 규칙 기능
함수 이름 인수 유형 리턴 유형 사용 예 참고
lower 문자열 문자열 lower(http.host) == "www.example.com" 문자열 필드를 소문자로 변환합니다. 대문자 ASCII 바이트만 변환되고, 다른 모든 바이트는 그대로 유지됩니다.
상단 문자열 문자열 upper(http.host) == "www.example.com" 문자열 필드를 대문자로 변환합니다. 소문자 ASCII 바이트만 변환되고, 다른 모든 바이트는 그대로 유지됩니다.

표현식

표현식은 입력되는 트래픽에 대한 일치를 기반으로 참 또는 거짓을 리턴합니다. 예를 들어, 다음과 같습니다.

http.host eq "www.example.com" and ip.src in 92.182.212.0/24

이 예제에서는 두 개의 단일 표현식이 복합 표현식을 구성합니다. 각 단일 표현식을 조건으로 생각하십시오. 각 조건은 복합 표현식의 최종 결과를 판별하기 위해 적용하기 전에 개별적으로 평가됩니다.

첫 번째 단일 표현식을 보면 다음과 같은 내용이 포함되어 있음을 알 수 있습니다.

  • 필드 - http.host
  • 비교 연산자 - eq
  • 값 - "www.example.com"

모든 조건의 구조가 동일한 것은 아닙니다. 다른 구조를 사용하는 추가 예제는 다음 절에서 설명합니다.

비교 연산자

표현식에서 사용할 수 있는 비교 연산자는 다음과 같습니다.

표현식 비교 연산자
영어 C와 유사 설명
eq == 동일
ne != 같지 않음
lt < 미만
le <= 이하
gt
초과
ge

=

Greater than or equal to
이(가) 다음 포함 정확히 포함
일치 ~ Re2의 영향을 받는 정규식
in 값 세트로 표시되는 값입니다. ".." 표기법을 사용하는 범위를 지원합니다.
not ! 부울 비교 참조
bitwise_and & 비트 필드 값 비교

현재 표현식 빌더는 영어 연산자만 지원합니다.

표현식에는 영어 및 C와 유사한 연산자가 포함될 수 있습니다. 예를 들어, ip.src eq 93.184.216.34ip.src == 93.184.216.34와 동일합니다.

특정 비교 연산자는 유형에 따라 특정 필드에 적용됩니다. 다음 매트릭스는 다양한 필드 유형에 사용 가능한 연산자의 예제를 제공합니다.

필드 비교 연산자
영어 C와 유사 문자열 IP 주소 숫자
eq == http.request.uri.path eq "/articles/2008/" ip.src eq 93.184.216.0 cf.threat_score eq 10
ne != http.request.uri.path ne "/articles/2010/" ip.src ne 93.184.216.0 cf.threat_score ne 60
lt < http.request.uri.path lt "/articles/2009/" cf.threat_score lt 10
le <= http.request.uri.path le "/articles/2008/" cf.threat_score le 20
gt
http.request.uri.path gt "/articles/2006/" cf.threat_score gt 25
ge

=

Greater than or equal to cf.threat_score ge 60
이(가) 다음 포함 http.request.uri.path contains "/articles/"
일치 ~ http.request.uri.path ~ " [^/articles/2007-8/$] "
in http.request.method in { "HEAD" "GET" } ip.src in { 93.184.216.0 93.184.216.1 } cf.threat_score in {0 2 10}

문자열 값을 사용하는 표현식 평가는 대소문자를 구분합니다. 따라서 사용자 정의 규칙의 경우 하나 이상의 테스트 조건을 정의해야 할 수도 있습니다. 엔터프라이즈 고객은 정규식을 일치 연산자와 함께 사용하여 단일 표현식으로 여러 변형을 캡처할 수 있습니다.

부울 비교

부울 유형의 필드(예: ssl)의 경우, true 조건에 대해 평가할 때 필드가 표현식에 자체적으로 표시됩니다. false 조건의 경우, not 연산자가 적용됩니다.

부울 비교
거짓
ssl not ssl

복합 표현식

논리 연산자를 사용하여 둘 이상의 단일 표현식을 그룹화하여 복합 표현식을 작성할 수 있습니다.

복합 표현식
영어 C와 유사 설명 우선순위
not ! 논리 NOT not ( http.host eq "www.example.com" and ip.src in 93.184.216.0/24 ) 1
&& 논리 AND http.host eq "www.example.com" and ip.src in 93.184.216.0/24 2
xor ^^ 논리적 XOR http.host eq "www.example.com" xor ip.src in 93.184.216.0/24 3
or || 논리 OR http.host eq "www.example.com" or ip.src in 93.184.216.0/24 4

우선순위 순서를 변경하려면 괄호를 사용하여 표현식을 그룹화할 수 있습니다. 괄호를 사용하지 않으면 표현식이 표준 우선순위에 따라 내재적으로 그룹화됩니다.

ssl and http.request.uri.path eq /login or http.request.uri.path eq /oauth

명시적 그룹화 적용:

(ssl and http.request.uri.path eq /login) or http.request.uri.path eq /oauth

우선순위 부여 또는 소괄호 사용:

ssl and (http.request.uri.path eq /login or http.request.uri.path eq /oauth)

그룹화에 not이 사용되는 경우, 단일 비교를 부정하는 데 사용될 수 있습니다. 예를 들어, not ip.src eq 93.184.216.0not (ip.src eq 93.184.216.0)과 대등합니다.

마지막으로 그룹화된 표현식을 부정할 수도 있습니다.

not (http.request.method eq "POST" and http.request.uri.path eq "/login")

Wireshark 표시 필터의 변형

사용자 정의 규칙 표현식은 Wireshark의 표시 필터에서 착안한 것입니다. 단, 구현은 다음과 같은 방식으로 변형됩니다.

  • CIDR IP 동일성 테스트의 경우, Wireshark가 ip.src == 1.2.3.0/24 형식의 범위를 허용하는 반면 CIS는 단일 IP 주소를 사용하는 동일성 테스트만 지원합니다. CIDR을 비교하려면 in 연산자를 사용하십시오. 예를 들어, ip.src in {1.2.3.0/24}입니다.
  • Wireshark에서 ssl은 여러 가지 방법의 비교에 사용할 수 있는 수백 개의 다양한 유형의 기타 필드를 포함하는 프로토콜 필드입니다. 그러나 사용자 정의 규칙에서 ‘ ssl ’는 클라이언트에서 CIS 로 연결되는 통신이 암호화되었는지 여부를 판단하는 데 사용되는 단일 부울 필드입니다.
  • slice 연산자가 지원되지 않습니다.
  • 모든 함수가 지원되는 것은 아닙니다. 현재 len()count()는 지원되지 않습니다.

표현의 제한

규칙 표현식에는 다음과 같은 제한 사항이 적용됩니다:

  • 규칙 표현식은 최대 4,096자까지 포함할 수 있습니다.

    UI에서 표현식 생성기를 사용하는 경우, 생성된 표현식 미리보기에도 동일한 제한이 적용됩니다.

  • 규칙 표현식에는 최대 64개의 정규 표현식(regex)을 포함할 수 있습니다.