필드, 함수 및 표현식 사용

방화벽 규칙은 더 이상 사용되지 않습니다. CIS 기존 방화벽 규칙을 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 헤더
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 클라이언트 TCP 의 IP 주소. 필요에 따라 원본 클라이언트의 실제 IP 주소를 반영하도록 조정할 수 있습니다(예: X-Forwarded-For 또는 X-Real-IP와 같은 HTTP 헤더를 사용하는 방식)
ip.geoip.asnum 숫자 222 Autonomous System(AS) 수
ip.geoip.country 문자열 GB 2문자국가 코드
ssl 부울 클라이언트에 대한 HTTP 연결이 암호화되는지 여부

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

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

사용 가능한 Cloudflare 필드
필드 이름 유형 예제 값 참고
cf.client.bot 부울 이 필드는 선의 또는 악의의 의도에 관계없이 요청이 알려진 봇 또는 크롤러로부터 수신되는지 여부를 표시합니다.
cf.threat_score 숫자 0-100 값 이 필드는 위험성 점수를 나타내며, 0은 Cloudflare에 의해 판별된 낮은 위험성을 표시합니다. 10보다 큰 값은 스팸 발송자나 봇을 나타낼 수 있으며, 40보다 큰 값은 인터넷상의 악의적인 사용자를 의미합니다. 60보다 높은 값이 나타나는 경우는 드물기 때문에, 방화벽 규칙을 조정하여 10보다 큰 값에 대해서는 확인 요청을 보내고, 50보다 큰 값은 차단하도록 설정하십시오.
cf.waf.score 숫자 1-99 요청이 악의적일 가능성을 추정하는 머신 러닝 기반 점수입니다. 점수 범위는 1(악성일 가능성이 가장 높음)에서 99(안전할 가능성이 가장 높음)까지입니다. 점수가 낮을수록 위험도가 높다는 뜻입니다. 임계값 기반 방화벽 규칙을 만드는 데 유용합니다.

함수

방화벽 규칙 언어에는 필드를 변환하는 여러 가지 기능이 있습니다.

이러한 함수는 현재 표현식 빌더에서 지원되지 않습니다.

방화벽 규칙 기능
함수 이름 인수 유형 리턴 유형 사용 예 참고
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 ( http.host ≠ "www.example.com" 및 ip.src ≠ 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 으로의 연결이 암호화되었는지 여부를 판단하는 데 사용되는 단일 부울(Boolean) 필드입니다.
  • slice 연산자가 지원되지 않습니다.
  • 모든 함수가 지원되는 것은 아닙니다. 현재 len()count()는 지원되지 않습니다.