다음을 통해 공유


WFP 작업

WFP(Windows 필터링 플랫폼)는 계층, 필터, Shim설명선의 기본 엔터티를 통합하여 해당 작업을 수행합니다.

계층

계층은 필터 엔진에서 관리하는 컨테이너로, 필터를 집합으로 구성하는 함수입니다. 계층은 네트워크 스택의 모듈이 아닙니다. 각 계층에는 추가할 수 있는 필터 유형을 정의하는 스키마가 있습니다. 자세한 내용은 각 필터링 계층에서 사용할 수 있는 필터링 조건을 참조하세요.

계층에는 "1024 이상의 TCP 포트 차단" 및 "포트 1080 열기"와 같은 충돌하는 필터 요구 사항을 관리하는 하위 계층이 포함될 수 있습니다. 필터링 충돌을 관리하는 규칙은 필터 중재에 의해 결정됩니다.

WFP에는 기본 제공 하위 계층 집합이 포함되어 있습니다. 모든 계층은 모든 기본 제공 하위 계층을 상속합니다. 사용자는 자체 하위 계층을 추가할 수도 있습니다.

필터 엔진 계층 목록은 참조 섹션 항목인 계층 식별자 필터링에 제공됩니다.

필터

필터는 들어오는 패킷 또는 나가는 패킷과 일치하는 규칙입니다. 규칙은 심층 패킷 또는 스트림 검사를 위해 설명선 모듈을 호출하는 것을 포함하여 패킷으로 수행할 작업을 필터링 엔진에 알려줍니다. 예를 들어 필터는 "TCP 포트가 1024보다 큰 트래픽 차단" 또는 "보안되지 않은 모든 트래픽에 대해 IDS 호출"을 지정할 수 있습니다.

부팅 시간 필터는 TCP/IP 스택 드라이버(tcpip.sys)가 시작되는 즉시 부팅 시간에 적용되는 필터입니다. BFE가 시작될 때 부팅 시간 필터를 사용할 수 없습니다. FwpmFilterAdd0이 호출될 때 FWPM_FILTER_FLAG_BOOTTIME 플래그를 설정하여 필터가 부팅 시간으로 표시됩니다.

런타임 필터는 BFE가 시작된 후에 적용되는 필터입니다. 런타임 필터는 생성된 방식에 따라 정적, 동적 또는 영구적일 수 있습니다. 다양한 유형의 런타임 필터 및 수명에 대한 자세한 내용은 개체 관리를 참조하세요.

Shim

shim은 필터 엔진 계층에 대해 분류하여 필터링 결정을 내리는 커널 모드 구성 요소입니다. 각 shim은 하나 이상의 레이어에 대해 분류됩니다. 예를 들어 전송 계층 모듈 shim은 흐름의 첫 번째 패킷에 대해 인바운드 전송 계층, 아웃바운드 전송 계층 및 ALE Connect 및 Receive-Accept 계층을 분류합니다.

패킷, 스트림 및 이벤트가 네트워크 스택을 트래버스할 때 shim은 구문 분석하여 분류 가능한 조건 및 값을 추출한 다음 필터 엔진을 호출하여 지정된 계층의 필터에 대해 평가합니다. 필터 엔진은 분류의 일부로 하나 이상의 설명선 을 호출할 수 있습니다. shim은 필터 엔진에서 수행한 분류 결과에 따라 패킷, 스트림 및 이벤트의 실제 삭제를 수행합니다.

설명선

설명선은 드라이버에서 노출하고 특수 필터링에 사용되는 함수 집합입니다. 바이러스 검사, 부적절한 콘텐츠에 대한 자녀 보호 검사, 모니터링 도구를 위한 패킷 데이터 구문 분석과 같은 패킷의 분석 및 조작을 수행하는 데 사용됩니다. NAT(네트워크 주소 변환) 드라이버와 같은 일부 설명선은 운영 체제에 기본 제공됩니다. HTTP 자녀 보호 설명선 또는 IDS(침입 감지 시스템) 설명선과 같은 다른 설명선은 ISV(독립 소프트웨어 공급업체)에서 제공할 수 있습니다. 설명선 함수는 지정된 계층에서 해당 설명선 필터가 일치할 때 필터 엔진에서 호출됩니다.

설명선은 커널 모드 WFP 계층에서 등록할 수 있습니다. 설명선은 작업("차단", "허용") 및 스트림 검사를 수행할 때 "지연", "더 많은 데이터 필요", "연결 삭제")를 반환할 수 있으며 인바운드 및 아웃바운드 네트워크 트래픽을 수정하고 보호할 수 있습니다.

콜아웃이 필터 엔진에 등록되면 처리할 네트워크 트래픽을 수신할 수 있습니다. 트래픽은 계층에 따라 패킷, 스트림 또는 이벤트일 수 있습니다. 애플리케이션 또는 방화벽 에이전트는 작업이 "Callout"이고 해당 콜아웃 ID가 해당 콜아웃의 식별자인 필터를 추가하여 트래픽을 콜아웃에 전달합니다. 설명선은 필터 엔진에 shim에 "차단" 또는 "허용"을 반환하도록 지시할 수 있습니다. 설명선은 다른 필터가 패킷을 처리할 수 있도록 "계속"을 반환할 수도 있습니다.

하나의 설명선 드라이버에서 여러 설명선이 노출될 수 있습니다.

콜아웃을 사용하려면 (FwpmCalloutAdd0 사용) 및 등록( FwpsCalloutRegister 사용)을 추가해야 합니다. 설명선에서 참조하는 필터를 만들기 전에 FwpmCalloutAdd0 을 호출해야 합니다. 설명선 필터가 일치할 때 WFP가 설명선 호출을 호출하려면 FwpsCalloutRegister를 호출해야 합니다. 기본적으로 추가되었지만 아직 필터 엔진에 등록되지 않은 설명선이 참조되는 필터는 "차단" 필터로 처리됩니다. FwpmCalloutAdd0 및 FwpsCalloutRegister를 호출하는 순서는 중요하지 않습니다. 영구 설명선은 한 번만 추가해야 하며, 콜아웃을 구현하는 드라이버가 시작될 때마다(예: 다시 부팅 후) 등록해야 합니다.

분류

분류는 해당 트래픽에 대한 "허용" 또는 "차단"의 결과를 결정하기 위해 네트워크 트래픽(패킷, 스트림 또는 이벤트)에 필터를 적용하는 프로세스입니다. 하나의 패킷, 스트림 또는 이벤트의 경우 계층당 하나의 분류 호출이 있습니다.

분류하는 동안 패킷, 스트림 또는 이벤트의 속성(예: 원본 주소)은 분류가 호출되는 계층의 필터에 설정된 필터 조건과 비교됩니다. 일치 항목이 발견되면 필터 중재 알고리즘을 사용하여 분류 프로세스의 결과를 결정합니다.

분류 요청은 shim에 의해 트리거됩니다.

분류 작업은 다음 중 하나일 수 있습니다.

  • 허용
  • 차단
  • callout
    • 허용
    • 차단
    • 계속
    • 지연
    • 더 많은 데이터 필요
    • 연결 삭제

WFP 작업

부팅 시 TCP/IP 스택 드라이버(tcpip.sys)가 시작되는 즉시 커널 모드 필터 엔진은 부팅 시간 필터를 통해 시스템의 보안 정책을 적용합니다.

BFE(기본 필터링 엔진)가 사용자 모드에서 시작되면 영구 필터가 플랫폼에 추가되고, 부팅 시간 필터가 비활성화되고, FwpmBfeStateSubscribeChanges0을 사용하여 구독한 설명선 드라이버에 알림이 전송됩니다. 알림은 BFE 초기화가 완료된 직후에 발송됩니다. 이제 플랫폼은 설명선이 등록되고 런타임 개체를 추가할 준비가 되었습니다.

부팅 시간에서 영구 필터로의 전환은 몇 초 또는 느린 컴퓨터에서 더 길어질 수 있습니다. 원자성이므로 공급자에 부팅 시간과 영구 필터가 모두 있는 경우 둘 다 적용되지 않을 때는 창이 없습니다.

BFE가 시작되면 방화벽 에이전트 또는 사용자 지정 방화벽 솔루션에서 런타임 필터를 추가할 수 있습니다. BFE는 이러한 필터를 처리하고 적용을 위해 적절한 필터 엔진 계층으로 보냅니다. 또한 BFE는 인증 설정을 수락하고 IPsec 키 모듈(IKE/AuthIP)에 이러한 설정을 보냅니다. 자세한 내용은 IPsec 구성 을 참조하세요.

언제든지 BFE에서 노출하는 RPC 인터페이스를 통해 시스템에서 필터 및 인증 설정을 추가, 제거 또는 변경할 수 있습니다. 하위 계층 및 설명선 모듈도 마찬가지로 추가하거나 제거할 수 있습니다.

데이터 흐름:

  1. 패킷이 네트워크 스택에 들어옵니다.
  2. 네트워크 스택은 shim을 찾아 호출합니다.
  3. shim은 특정 계층에서 분류 프로세스를 호출합니다.
  4. 분류하는 동안 필터가 일치하고 결과 작업이 수행됩니다. ( 필터 중재를 참조하세요.)
  5. 분류 프로세스 중에 설명선 필터가 일치하는 경우 해당 설명선이 호출됩니다.
  6. shim은 최종 필터링 결정에 따라 작동합니다(예: 패킷 삭제).

아웃바운드 데이터 흐름은 비슷한 패턴을 따릅니다.

다음 topics WFP의 작업에 대해 자세히 설명합니다.

개체 모델

개체 관리