작성자: 나짐 랄라
소개
IIS 7.0 이상용 DIPR(동적 IP 제한) 모듈은 웹 서버 및 웹 사이트에 대한 서비스 거부 및 무차별 암호 대입 공격 방지를 제공합니다. 이 보호를 제공하기 위해 모듈은 비정상적으로 많은 수의 동시 요청을 수행하거나 적은 기간 동안 많은 수의 요청을 만드는 HTTP 클라이언트의 IP 주소를 일시적으로 차단합니다.
기능
동적 IP 제한 모듈에는 다음과 같은 주요 기능이 포함됩니다.
- 동시 요청 수에 따라 IP 주소 차단 - HTTP 클라이언트가 허용되는 동시 요청 수를 초과하면 해당 클라이언트의 IP 주소가 일시적으로 차단됩니다.
- 기간 동안 의 요청 수에 따라 IP 주소 차단 - HTTP 클라이언트가 지정된 시간 간격 동안 수행된 요청 수를 초과하면 해당 클라이언트의 IP 주소가 일시적으로 차단됩니다.
- 차단되지 않는 IP 주소 목록 허용 - 다른 구성에 관계없이 모듈에 의해 차단되지 않도록 제외하려는 클라이언트의 IP 주소 목록을 추가할 수 있습니다.
- 다양한 거부 작업 - IP 주소가 차단되는 HTTP 클라이언트로 반환할 응답을 지정할 수 있습니다. 모듈은 상태 코드 403 및 404를 반환하거나 HTTP 연결을 종료하고 응답을 반환하지 않을 수 있습니다.
- 프록시 뒤에 있는 웹 서버에 대한 지원 - 웹 서버가 프록시 뒤에 있는 경우 X-Forwarded-For 헤더의 클라이언트 IP 주소를 사용하도록 모듈을 구성할 수 있습니다.
- IPv6 - 모듈은 IPv6 주소를 완전히 지원합니다.
DIPR 모듈 설치
다음 방법을 사용하여 동적 IP 제한을 설치할 수 있습니다.
역할 서비스 선택 화면에서 웹 서버(IIS) > 웹 서버 > 보안으로 이동합니다. IP 및 도메인 제한 확인란을 선택하고 [다음]을 클릭하여 계속합니다.
필수 조건
다음 운영 체제 중 하나가 있어야 합니다.
- Windows Server 2008
- Windows Vista SP1
- Windows Server 2008 R2
- Windows 7
DIPR 모듈의 베타 버전 제거
DIPR 모듈의 첫 번째 베타 릴리스를 사용하는 경우 릴리스 후보를 설치하기 전에 제거해야 합니다. 그렇지 않으면 오류가 발생하고 설치가 실패합니다. 베타 버전을 제거하기 전에 구성을 백업해야 합니다.
DIPR 모듈의 베타 2 릴리스를 사용하는 경우 최종 릴리스로 직접 업그레이드할 수 있습니다. 구성 설정이 유지됩니다.
동적 IP 제한 구성
동적 IP 제한은 IIS 관리자, IIS 구성 API를 사용하거나 명령줄 도구 appcmd를 사용하여 구성할 수 있습니다.
IIS 관리자에서 동적 IP 제한 설정에 액세스하려면 다음 단계를 수행합니다.
- IIS 관리자 열기
- 왼쪽 트리 보기에서 서버 전체 설정을 구성하려는 경우 서버 노드를 선택하거나 사이트별 설정을 구성할 사이트 노드를 선택합니다.
- 기능 보기에서 "동적 IP 제한"을 클릭합니다.
- "동적 IP 제한" 기본 페이지에서 모든 기능에 대한 구성을 사용하도록 설정하고 지정할 수 있습니다. 허용 목록에 IP 주소를 추가하려면 오른쪽의 "허용된 주소 표시" 링크를 클릭할 수 있습니다.
- 위의 "허용된 주소 표시" 링크를 선택하면 아래와 같이 동적 IP 제한 유효성 검사를 무시할 수 있는 모든 IP 주소를 볼 수 있는 창이 표시됩니다. 오른쪽의 "허용 항목 추가" 링크를 선택하여 목록에 IP 주소를 더 추가할 수 있습니다.
동시 요청 수에 따라 IP 주소 차단
이 옵션을 사용하는 경우 서버는 모든 클라이언트의 IP 주소가 구성 가능한 수의 동시 요청만 만들 수 있도록 허용합니다. 지정된 한도를 초과하는 추가 요청은 거부됩니다.
이 기능을 테스트하는 간단한 방법은 UI를 사용하거나 appcmd 명령을 실행하여 최대 동시 요청 수를 2로 설정하는 것입니다.
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity
/denyByConcurrentRequests.enabled:"True"
/denyByConcurrentRequests.maxConcurrentRequests:"2"
/commit:apphost
웹 사이트의 루트 폴더에서 test.aspx 파일을 만들고 다음 콘텐츠를 붙여넣습니다.
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(3000);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Dynamic IP Restrictions Test</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Hello World!</h1>
</div>
</form>
</body>
</html>
응답을 반환하기 전에 3초 동안 이 ASP.NET 페이지입니다. 파일을 저장한 다음, 웹 브라우저를 열고, 요청한 http://localhost/test.aspx
다음, 계속해서 F5 키를 눌러 브라우저를 새로 고칩니다. 이렇게 하면 브라우저에서 2개 이상의 동시 요청을 수행하므로 서버에서 403 - 사용할 수 없음 오류가 표시됩니다.
Important
실제 웹 애플리케이션에 대한 동시 요청 수를 구성할 때 선택한 제한을 철저히 테스트하여 유효한 HTTP 클라이언트가 차단되지 않도록 합니다. 이는 AJAX가 웹 페이지를 사용하도록 설정하고 미디어 콘텐츠를 제공하는 리치 인터넷 애플리케이션에 특히 중요합니다.
시간 경과에 따른 요청 수에 따라 IP 주소 차단
이 옵션을 사용하는 경우 서버는 일정 기간 동안 구성 가능한 수 이상의 요청을 만드는 HTTP 클라이언트의 IP 주소에서 요청을 거부합니다. IP 주소는 기간 내 요청 수가 구성된 제한 아래로 떨어질 때까지 차단된 상태로 유지됩니다.
이 기능을 테스트하려면 IIS 관리자를 사용하거나 appcmd 명령을 실행하여 "최대 요청 수"를 5로 설정하고 "기간"을 5000으로 설정합니다.
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity /denyByRequestRate.enabled:"True" /denyByRequestRate.maxRequests:"5" /denyByRequestRate.requestIntervalInMilliseconds:"5000" /commit:apphost
웹 브라우저를 열고, 요청한 http://localhost/welcome.png
다음, F5 키를 눌러 페이지를 지속적으로 새로 고칩니다. 이렇게 하면 5초 동안 5개 이상의 요청이 생성되므로 서버가 403 - 사용할 수 없음 상태 코드로 응답하는 것을 볼 수 있습니다.
이전의 모든 요청이 실행될 때 5초 더 기다린 다음 요청을 수행하면 요청이 성공합니다.
Important
실제 웹 애플리케이션에 대해 시간이 지남에 따라 허용되는 요청 수를 구성하는 경우 선택한 제한을 철저히 테스트하여 유효한 HTTP 클라이언트가 차단되지 않도록 합니다. 이는 AJAX가 웹 페이지를 사용하도록 설정하고 미디어 콘텐츠를 제공하는 리치 인터넷 애플리케이션에 특히 중요합니다.
거부 작업
IP 주소에 대한 요청을 거부할 때 다음 작업을 수행하도록 모듈을 구성할 수 있습니다.
- 클라이언트에 403(사용할 수 없음) 응답을 보냅니다.
- 클라이언트에 404(파일을 찾을 수 없음) 응답을 보냅니다.
- 클라이언트에 응답을 보내지 않고 HTTP 연결을 닫아 요청을 중단합니다.
프록시 뒤에 있는 웹 서버 지원
웹 서버가 방화벽 또는 프록시 컴퓨터 뒤에 있는 경우 모든 요청에 대한 클라이언트 IP가 프록시 또는 방화벽 서버의 IP로 표시될 수 있습니다. 이렇게 하면 동적 IP 제한 모듈이 유용할 수 없습니다. 그러나 이러한 서버의 대부분은 원래 클라이언트의 IP 주소를 포함하는 HTTP 요청에 X-Forwarded-For 헤더를 추가합니다. 기본 동적 IP 제한 구성 페이지에서 "프록시" 모드 확인란을 선택하면 먼저 이 헤더에서 클라이언트 IP 주소를 확인합니다.