Share via


IIS 7.0 요청 필터링 및 URL 다시 쓰기

작성자 : Ruslan Yakushev

IIS 7.0 이상에는 IIS 6.0에 대한 URLScan ISAPI 필터를 기반으로 하는 요청 필터링 모듈이 포함되어 있습니다. 이 모듈은 웹 서버의 보안을 강화하는 데 도움이 됩니다.

또한 IIS 팀은 규칙 기반 URL 조작을 위한 기능을 제공하는 IIS용 추가 기능 URL 다시 쓰기 모듈을 릴리스했습니다. URL 다시 쓰기 모듈의 주요 목적은 요청에 대한 URL 경로를 다시 작성하는 것이지만, 다시 쓰기 모듈을 웹 사이트 콘텐츠에 대한 액세스를 방지하는 데 도움이 되는 보안 적용 도구로 사용할 수도 있습니다.

이 문서에서는 이러한 두 모듈 간의 차이점을 설명하고 웹 서버의 보안을 강화하기 위해 선택할 수 있는 지침을 제공합니다.

IIS 요청 처리 파이프라인에서 요청 필터링 및 URL 다시 쓰기

우선 요청 필터링 모듈과 재작성 모듈이 IIS 파이프라인에 연결하는 방법을 이해하는 것이 중요합니다. 다음 다이어그램은 이러한 두 모듈의 상대적 순서를 보여 줍니다.

H T T P 요청 및 H T T P 응답에서 가져오는 작업자 프로세스의 다이어그램

요청 필터링 모듈은 BeginRequest 이벤트를 처리하여 요청 처리 파이프라인의 시작 부분에서 실행됩니다. 모듈은 요청 메타데이터가 기존 필터와 일치하는지 여부를 확인하기 위해 헤더, 쿼리 문자열, 콘텐츠 길이 등과 같은 요청 메타데이터를 평가합니다. 일치하는 항목이 있는 경우 모듈은 404(파일을 찾을 수 없음) 응답을 생성한 다음 IIS 파이프라인의 나머지 부분을 바로 가기로 지정합니다.

요청 필터링 모듈이 요청을 필터링하지 않은 경우 요청은 URL 다시 쓰기 모듈일 수 있는 IIS 파이프라인의 다음 모듈로 전달됩니다. URL 다시 쓰기 모듈은 다시 쓰기 규칙에 대해 요청을 평가합니다. 규칙이 리디렉션되거나 사용자 지정 응답을 보내거나 요청을 중단하는 경우 다시 쓰기 모듈은 적절한 응답을 생성한 다음 IIS 파이프라인의 나머지 부분을 바로 가기로 만듭니다.

요청 필터링 모듈은 URL 다시 쓰기 모듈 앞에 배치됩니다. IIS 아키텍처에서 요청 필터링 모듈은 악의적인 요청으로부터 웹 서버를 보호하는 게이트키퍼 구성 요소로 간주되기 때문입니다. URL 다시 쓰기 모듈은 요청 필터링 모듈에 의해 이미 필터링된 URL에서 작동하는 서버 기반 URL 조작 구성 요소로 간주됩니다. URL 다시 쓰기는 다시 작성 또는 리디렉션을 수행할 수 있는 ASP.NET 애플리케이션과 유사하게 서버 기반 애플리케이션 논리로 생각할 수 있습니다. 요청 필터링은 첫 번째 방어선이지만 URL 재작성기는 애플리케이션별로 더 구체적인 두 번째 보안 장벽이 될 수 있습니다. 자세한 내용은 IIS 웹 사이트의 블로그 게시물 "URL 재작성 및 IIS7에 대한 요청 필터링 모듈 간의 상호 작용"을 참조하세요.

요청 필터링과 URL 다시 쓰기의 차이점

요청 필터링과 URL 다시 쓰기 간의 개념적 차이점은 다음과 같습니다.

  • 요청 필터링은 보안 시나리오에 맞게 설계 및 최적화됩니다.
  • 광범위한 시나리오 집합에 URL 다시 쓰기를 적용할 수 있습니다. 보안 시나리오는 이들 중 일부에 불과합니다.

이를 염두에 두고 보안 시나리오에 사용할 수 있는 각 모듈의 기능을 비교할 수 있습니다. 다음 범주를 고려해야 합니다.

  1. 필터링 조건. 요청 차단에 대한 결정을 내리는 데 사용할 수 있는 입력 종류는 무엇인가요? 또한 요청 차단 논리를 표현하는 데 사용할 수 있는 조건은 무엇인가요?
  2. 요청 차단 작업. 요청이 필터링 조건을 충족하는 경우 수행할 수 있는 작업은 무엇인가요?
  3. 성능에 영향을 줍니다. 필터링 및 URL 다시 쓰기 요청이 웹 서버의 성능에 어떤 영향을 주나요?

필터링 조건

다음 표에서는 가능한 필터링 조건을 나열하고 각 모듈이 이를 지원하는 방법을 설명합니다.

조건 요청 필터링 모듈에서 지원되는가요? URL 다시 쓰기 모듈에서 지원되는가요?
요청된 URL 경로 검사 예, 부분 문자열 검색 사용 예, 정규식 및 와일드카드 패턴 사용
URL 길이 확인 Yes 아니요
검색 쿼리 문자열 No 예, 정규식 및 와일드카드 패턴 사용
쿼리 문자열 길이 확인 Yes 아니요
HTTP 동사 확인 Yes Yes
요청 콘텐츠 길이 확인 Yes 아니요
HTTP 헤더 검사 No 예, 정규식 및 와일드카드 패턴 사용
HTTP 헤더 길이 확인 Yes
서버 변수 검사 아니요
보낸 사람의 IP 주소 또는 호스트 이름 확인 아니요* Yes

* IIS의 IP 제한 모듈은 특정 IP 주소 및 호스트 이름의 요청을 차단하는 데 사용할 수 있습니다.

Request-Blocking 작업

요청 필터링 모듈에는 요청이 필터링 조건과 일치할 때 수행하는 작업이 하나만 있습니다. 작업은 상태 코드 404(파일을 찾을 수 없음)를 반환하는 것입니다.

URL 다시 쓰기 모듈은 다음을 포함하여 요청을 차단해야 하는 경우 훨씬 더 광범위한 옵션 집합을 제공합니다.

  1. 요청된 URL을 다른 URL로 다시 작성할 수 있습니다. 예를 들어 이미지 핫 연결을 방지하려면 타사 도메인에서 오는 모든 요청에 대한 URL을 자리 표시자 이미지 파일로 다시 작성할 수 있습니다.
  2. 웹 클라이언트는 다른 URL로 리디렉션할 수 있습니다.
  3. 선택한 HTTP 상태 코드를 웹 클라이언트로 보낼 수 있습니다. 예를 들어 특정 필터링 조건과 일치하는 요청에 대해 상태 401(권한 없음) 응답을 보낼 수 있습니다.
  4. 소켓 연결을 삭제하여 HTTP 요청을 중단할 수 있습니다. 이렇게 하면 웹 클라이언트는 웹 서버에 대한 정보를 전혀 얻지 않습니다.

성능에 미치는 영향

두 모듈 모두 IIS 웹 서버의 성능에 최대한 적은 영향을 미치도록 구현되었습니다. 그러나 이러한 모듈 간에는 다음과 같은 중요한 성능 차이가 있습니다.

  • URL 다시 쓰기 모듈은 정규식 패턴에 크게 의존합니다. 정규식 평가는 비용이 많이 드는 작업이며 많은 복잡한 다시 쓰기 규칙을 정의하는 경우 웹 서버의 처리량에 눈에 띄는 영향을 미칠 수 있습니다.
  • 요청 필터링 모듈은 정규식 또는 다른 패턴 일치를 사용하지 않습니다. 단순히 부분 문자열 검색을 수행하므로 웹 서버 처리량에 훨씬 더 작은 영향을 미칠 수 있습니다.

요청 필터링과 URL 다시 쓰기 중에서 선택

웹 서버의 보안을 강화하기 위해 요청 필터링과 URL 다시 쓰기 중에서 선택하는 경우 일반적인 규칙은 요청 필터링으로 시작하는 것입니다. 요청 필터링은 보안 시나리오에 최적화되어 있으며 해당 기능 집합은 보안 요구 사항을 구현하기에 충분할 가능성이 큽니다. 요청 필터링 모듈에서 해결할 수 없는 요구 사항이 있는 경우 URL 다시 쓰기 모듈을 사용하여 해당 요구 사항을 구현하고 나머지 보안 작업을 요청 필터링 모듈에 둡니다. 이렇게 하면 서버에서 처리할 재작성 규칙을 최소화하여 URL 다시 쓰기 모듈의 성능 영향을 줄일 수 있습니다.