Dynamic IP Security <dynamicIpSecurity>

Gambaran Umum

Elemen ini <dynamicIpSecurity> menyediakan cara dinamis untuk memblokir permintaan Web berbahaya. Menggunakan pembatasan IP dinamis berarti administrator tidak perlu mengidentifikasi alamat IP yang perlu diblokir. Sebagai gantinya, administrator dapat mengonfigurasi sistem sehingga memblokir alamat IP apa pun yang memenuhi kriteria yang ditetapkan. Ini dapat mencakup pemblokiran klien jarak jauh jika jumlah permintaan koneksi HTTP bersamaan dari klien tersebut melebihi angka tertentu, atau memblokir klien jika jumlah permintaan yang diterima selama periode waktu melebihi angka tertentu. Pembatasan IP dinamis dapat dikonfigurasi di tingkat server atau situs.

Administrator dapat menentukan kode status respons HTTP mana yang akan dikembalikan jika klien diblokir: Tidak sah (401); Terlarang (403); atau Tidak Ditemukan (404). Anda juga dapat mengatur Tolak Jenis Tindakan ke Batalkan untuk menghilangkan koneksi tanpa mengembalikan indikasi mengapa.

Jika Anda mengaktifkan mode proksi, permintaan dapat diblokir dengan mengidentifikasi alamat IP asal klien yang terhubung ke server web melalui proksi HTTP atau load balancer. Ini dilakukan dengan memeriksa header x-forwarded-for-HTTP.

Kompatibilitas

Versi Catatan
IIS 10.0 Elemen <dynamicIpSecurity> tidak dimodifikasi dalam IIS 10.0.
IIS 8.5 Elemen <dynamicIpSecurity> tidak dimodifikasi dalam IIS 8.5.
IIS 8.0 Elemen ini <dynamicIpSecurity> diperkenalkan di IIS 8.0.
IIS 7.5 T/A
IIS 7.0 T/A
IIS 6.0 T/A

Siapkan

Windows Server 2012 atau Windows Server 2012 R2

  1. Pada taskbar, klik Manajer Server.
  2. Di Manajer Server, klik menu Kelola , lalu klik Tambahkan Peran dan Fitur.
  3. Di wizard Tambahkan Peran dan Fitur , klik Berikutnya. Pilih jenis penginstalan dan klik Berikutnya. Pilih server tujuan dan klik Berikutnya.
  4. Pada halaman Peran Server , perluas Server Web (IIS), perluas Server Web, perluas Keamanan, lalu pilih Pembatasan IP dan Domain. Klik Berikutnya.
    Cuplikan layar yang memperlihatkan Pembatasan I P dan Domain dipilih untuk Windows Server 2012. .
  5. Pada halaman Pilih fitur, klik Berikutnya.
  6. Pada halaman Konfirmasi pilihan instalasi, klik Instal.
  7. Pada halaman Hasil , klik Tutup.

Windows 8 atau Windows 8.1

  1. Pada layar Mulai, pindahkan penunjuk ke sudut kiri bawah, klik kanan tombol Mulai, lalu klik Panel Kontrol.
  2. Di Panel Kontrol, klik Program dan Fitur, lalu klik Aktifkan atau nonaktifkan fitur Windows.
  3. Perluas Layanan Informasi Internet, perluas World Wide Web Services, perluas Keamanan, lalu pilih Keamanan IP.
    Cuplikan layar yang memperlihatkan Keamanan I P dipilih untuk Windows 8.
  4. Klik OK.
  5. Klik Tutup.

Bagaimana Caranya

Cara menambahkan pembatasan IP dinamis untuk menolak akses untuk situs Web

  1. Buka Pengelola Layanan Informasi Internet (IIS):

    • Jika Anda menggunakan Windows Server 2012 atau yang lebih baru:

      • Pada bilah tugas, klik Manajer Server, klik Alat, lalu klik Pengelola Layanan Informasi Internet (IIS).
    • Jika Anda menggunakan Windows 8 atau yang lebih baru:

      • Tahan tombol Windows, tekan huruf X, lalu klik Panel Kontrol.
      • Klik Alat Administratif, lalu klik dua kali Manajer Layanan Informasi Internet (IIS).
  2. Di panel Koneksi , pilih nama server untuk menambahkan pembatasan IP dinamis untuk server, atau perluas Situs lalu pilih situs untuk menambahkan pembatasan IP dinamis untuk situs tersebut.

  3. Di panel Beranda , klik dua kali fitur Alamat IP dan Pembatasan Domain .

  4. Di panel Tindakan , klik Edit Pengaturan Pembatasan Dinamis....

  5. Dalam kotak dialog Pengaturan Pembatasan IP Dinamis , tentukan apakah akan menolak alamat IP berdasarkan jumlah sampel bersamaan dan/atau tingkat permintaan, tentukan apakah akan mengaktifkan mode khusus pengelogan, lalu klik OK.

    Cuplikan layar yang memperlihatkan kotak dialog Pengaturan Pembatasan I P Dinamis. Semua variabel dipilih.

Konfigurasi

Elemen <dynamicIpSecurity> dikonfigurasi di tingkat server atau situs.

Atribut

Atribut Deskripsi
denyAction Atribut enum opsional.

Menentukan respons mode tolak default yang harus dikirim IIS kembali ke klien.

Nilai defaultnya adalah Forbidden.
Nilai Deskripsi
AbortRequest Menentukan bahwa secara default IIS harus mengirim respons Abort mode tolak kembali ke klien.

Nilai numerik adalah 0.

Unauthorized Menentukan bahwa secara default IIS harus mengirim respons Unauthorized mode tolak kembali ke klien. Jika klien berbasis browser digunakan di ujung jarak jauh, mengembalikan Tidak Sah dapat menyebabkan dialog autentikasi muncul di klien jarak jauh, yang mengakibatkan upaya autentikasi yang memuncak ke IIS.

Nilai numerik adalah 401.

Forbidden Menentukan bahwa secara default IIS harus mengirim respons Forbidden mode tolak kembali ke klien.

Nilai numerik adalah 403.

NotFound Menentukan bahwa secara default IIS harus mengirim respons Not Found mode tolak kembali ke klien.

Nilai numerik adalah 404.

enableLoggingOnlyMode Atribut Boolean opsional.

Menentukan bahwa IIS akan mencatat permintaan dari klien yang akan ditolak tanpa benar-benar menolaknya.

Nilai defaultnya adalah false.
enableProxyMode Atribut Boolean opsional.

Memungkinkan IIS tidak hanya memblokir permintaan dari IP klien yang dilihat oleh IIS, tetapi juga untuk memblokir permintaan dari alamat IP yang diterima di header HTTP x-forwarded-for. Header ini memungkinkan Anda mengidentifikasi alamat IP asal klien yang terhubung melalui proksi HTTP atau load balancer. Ini disebut sebagai mode proksi.

Nilai defaultnya adalah false.

Elemen Anak

Elemen Deskripsi
denyByConcurrentRequests Elemen opsional.

Menentukan bahwa klien jarak jauh tertentu akan diblokir berdasarkan jumlah permintaan yang diterima dari waktu ke waktu.
denyByRequestRate Elemen opsional.

Menentukan bahwa klien jarak jauh tertentu akan diblokir berdasarkan jumlah permintaan koneksi HTTP bersamaan dari klien.

Sampel Konfigurasi

Sampel konfigurasi berikut menunjukkan cara mengatur pembatasan alamat IP dinamis.

<system.webServer>
   <security>
      <dynamicIpSecurity enableLoggingOnlyMode="true">
         <denyByConcurrentRequests enabled="true" maxConcurrentRequests="10" />
         <denyByRequestRate enabled="true" maxRequests="30" 
            requestIntervalInMilliseconds="300" />
      </dynamicIpSecurity>
   </security>
</system.webServer>

Kode Sampel

Contoh berikut mengonfigurasi <dynamicIpSecurity> untuk situs.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/dynamicIpSecurity /denyAction:"Unauthorized" /enableProxyMode:"True" /enableLoggingOnlyMode:"True"  /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/dynamicIpSecurity /denyByConcurrentRequests.enabled:"True" /denyByConcurrentRequests.maxConcurrentRequests:"10" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/dynamicIpSecurity /denyByRequestRate.enabled:"True" /denyByRequestRate.maxRequests:"25" /denyByRequestRate.requestIntervalInMilliseconds:"210"  /commit:apphost

Catatan

Anda harus memastikan untuk mengatur parameter penerapan ke apphost saat menggunakan AppCmd.exe untuk mengonfigurasi pengaturan ini. Ini menerapkan pengaturan konfigurasi ke bagian lokasi yang sesuai dalam file ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

    private static void Main() {
        
        using(ServerManager serverManager = new ServerManager()) { 
            Configuration config = serverManager.GetApplicationHostConfiguration();
            
            ConfigurationSection dynamicIpSecuritySection = config.GetSection("system.webServer/security/dynamicIpSecurity", "Default Web Site");
            dynamicIpSecuritySection["denyAction"] = @"Forbidden";
            dynamicIpSecuritySection["enableProxyMode"] = true;
            dynamicIpSecuritySection["enableLoggingOnlyMode"] = true;
            
            ConfigurationElement denyByConcurrentRequestsElement = dynamicIpSecuritySection.GetChildElement("denyByConcurrentRequests");
            denyByConcurrentRequestsElement["enabled"] = true;
            denyByConcurrentRequestsElement["maxConcurrentRequests"] = 10;
            
            ConfigurationElement denyByRequestRateElement = dynamicIpSecuritySection.GetChildElement("denyByRequestRate");
            denyByRequestRateElement["enabled"] = true;
            denyByRequestRateElement["maxRequests"] = 10;
            denyByRequestRateElement["requestIntervalInMilliseconds"] = 10;
            
            serverManager.CommitChanges();
        }
    }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim dynamicIpSecuritySection As ConfigurationSection = config.GetSection("system.webServer/security/dynamicIpSecurity", "Default Web Site")
      dynamicIpSecuritySection("denyAction") = "Forbidden"
      dynamicIpSecuritySection("enableProxyMode") = true
      dynamicIpSecuritySection("enableLoggingOnlyMode") = true
      Dim denyByConcurrentRequestsElement As ConfigurationElement = dynamicIpSecuritySection.GetChildElement("denyByConcurrentRequests")
      denyByConcurrentRequestsElement("enabled") = true
      denyByConcurrentRequestsElement("maxConcurrentRequests") = 10
      Dim denyByRequestRateElement As ConfigurationElement = dynamicIpSecuritySection.GetChildElement("denyByRequestRate")
      denyByRequestRateElement("enabled") = true
      denyByRequestRateElement("maxRequests") = 10
      denyByRequestRateElement("requestIntervalInMilliseconds") = 10
      serverManager.CommitChanges
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var dynamicIpSecuritySection = adminManager.GetAdminSection ("system.webServer/security/dynamicIpSecurity", "MACHINE/WEBROOT/APPHOST/Default Web Site");
dynamicIpSecuritySection.Properties.Item("denyAction").Value = "Unauthorized";
dynamicIpSecuritySection.Properties.Item("enableProxyMode").Value = true;
dynamicIpSecuritySection.Properties.Item("enableLoggingOnlyMode").Value = true;
var denyByConcurrentRequestsElement = dynamicIpSecuritySection.ChildElements.Item("denyByConcurrentRequests");
denyByConcurrentRequestsElement.Properties.Item("enabled").Value = true;
denyByConcurrentRequestsElement.Properties.Item("maxConcurrentRequests").Value = 10;
var denyByRequestRateElement = dynamicIpSecuritySection.ChildElements.Item("denyByRequestRate");
denyByRequestRateElement.Properties.Item("enabled").Value = true;
denyByRequestRateElement.Properties.Item("maxRequests").Value = 25;
denyByRequestRateElement.Properties.Item("requestIntervalInMilliseconds").Value = 210;

adminManager.CommitChanges();

Vbscript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set dynamicIpSecuritySection = adminManager.GetAdminSection ("system.webServer/security/dynamicIpSecurity", "MACHINE/WEBROOT/APPHOST/Default Web Site")
dynamicIpSecuritySection.Properties.Item("denyAction").Value = "Unauthorized"
dynamicIpSecuritySection.Properties.Item("enableProxyMode").Value = true
dynamicIpSecuritySection.Properties.Item("enableLoggingOnlyMode").Value = true
Set denyByConcurrentRequestsElement = dynamicIpSecuritySection.ChildElements.Item ("denyByConcurrentRequests")
denyByConcurrentRequestsElement.Properties.Item("enabled").Value = true
denyByConcurrentRequestsElement.Properties.Item("maxConcurrentRequests").Value = 10
Set denyByRequestRateElement = dynamicIpSecuritySection.ChildElements.Item("denyByRequestRate")
denyByRequestRateElement.Properties.Item("enabled").Value = true
denyByRequestRateElement.Properties.Item("maxRequests").Value = 25
denyByRequestRateElement.Properties.Item("requestIntervalInMilliseconds").Value = 210

adminManager.CommitChanges()

PowerShell

Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity" -name "denyAction" -value "Unauthorized"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity" -name "enableProxyMode" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity" -name "enableLoggingOnlyMode" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByConcurrentRequests" -name "enabled" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByConcurrentRequests" -name "maxConcurrentRequests" -value 20
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByRequestRate" -name "enabled" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByRequestRate" -name "maxRequests" -value 20
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByRequestRate" -name "requestIntervalInMilliseconds" -value 20