Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Nazim Lala
Pendahuluan
Modul Pembatasan IP Dinamis (DIPR) untuk IIS 7.0 ke atas memberikan perlindungan terhadap penolakan layanan dan serangan brute force pada server web dan situs web. Untuk memberikan perlindungan ini, modul untuk sementara memblokir alamat IP klien HTTP yang membuat jumlah permintaan bersamaan yang luar biasa tinggi atau yang membuat sejumlah besar permintaan dalam waktu kecil.
Kapan menggunakan Pembatasan IP Dinamis?
Ketika Anda perlu mengizinkan/menolak akses ke situs web (atau mengizinkan semua tetapi mencatat kondisi yang terpenuhi) berdasarkan jumlah permintaan bersamaan dari alamat IP atau berdasarkan jumlah permintaan dari IP selama jangka waktu tertentu.
Fitur
Modul Pembatasan IP Dinamis mencakup fitur-fitur utama ini:
- Pemblokiran alamat IP berdasarkan jumlah permintaan bersamaan - Jika klien HTTP melebihi jumlah permintaan bersamaan yang diizinkan, alamat IP klien tersebut akan diblokir sementara.
- Pemblokiran alamat IP berdasarkan jumlah permintaan selama jangka waktu - Jika klien HTTP melebihi jumlah permintaan yang dibuat selama interval waktu yang ditentukan, alamat IP klien tersebut akan diblokir sementara.
- Izinkan daftar alamat IP yang tidak akan diblokir - Anda dapat menambahkan daftar alamat IP klien yang ingin Anda kecualikan agar tidak diblokir oleh modul terlepas dari konfigurasi lainnya.
- Berbagai tindakan penolakan - Anda dapat menentukan respons mana yang akan dikembalikan ke klien HTTP tempat alamat IP diblokir. Modul dapat mengembalikan kode status 403 dan 404 atau hanya mengakhiri koneksi HTTP dan tidak mengembalikan respons apa pun.
- Dukungan untuk server web di belakang proksi - Jika server web Anda berada di belakang proksi, Anda dapat mengonfigurasi modul untuk menggunakan alamat IP klien dari headerForwarded-For X.
- IPv6 - modul menyediakan dukungan penuh untuk alamat IPv6.
Menginstal modul DIPR
Anda dapat mencoba metode berikut untuk menginstal Pembatasan IP Dinamis:
Dari layar Pilih Layanan Peran, navigasikan ke Server Web (IIS) > Web Server > Security. Centang kotak centang Pembatasan IP dan Domain dan klik Berikutnya untuk melanjutkan.
Prasyarat
Anda harus memiliki salah satu sistem operasi berikut.
- Windows Server 2008
- Windows Vista SP1
- Windows Server 2008 R2
- Windows 7
Menghapus instalan modul DIPR versi Beta
Jika Anda menggunakan pertamaBeta rilis modul DIPR, Anda harus menghapusnya sebelum menginstal Kandidat Rilis; jika tidak, kesalahan akan terjadi dan penginstalan akan gagal. Pastikan Anda mencadangkan konfigurasi sebelum menguninstall versi beta.
Jika Anda menggunakan rilis Beta 2 modul DIPR, Anda dapat meningkatkan langsung ke rilis akhir. Pengaturan konfigurasi Anda akan dipertahankan.
Mengakses dan Mengonfigurasi Pembatasan IP Dinamis
Catatan: Saat mengonfigurasi Pembatasan IP, Anda perlu mempertimbangkan tingkat IIS serta konfigurasi tingkat situs, karena tingkat situs akan mengambil alih tingkat IIS (ini adalah perilaku IIS umum dan tidak spesifik untuk fitur Pembatasan IP).
Pembatasan IP Dinamis dapat dikonfigurasi dengan menggunakan IIS Manager, API konfigurasi IIS, atau dengan menggunakan alat baris perintah appcmd.
Untuk mengakses pengaturan Pembatasan IP Dinamis di IIS Manager, ikuti langkah-langkah berikut:
- Buka Manajer IIS
- Dalam tampilan pohon sisi kiri pilih simpul server jika Anda ingin mengonfigurasi pengaturan di seluruh server, atau pilih simpul situs untuk mengonfigurasi pengaturan khusus situs.
- Dalam Tampilan Fitur klik "Pembatasan IP Dinamis"
Contoh 1: Pemblokiran alamat IP berdasarkan jumlah permintaan bersamaan menggunakan appcmd
Saat menggunakan opsi ini, server akan mengizinkan alamat IP klien apa pun untuk hanya membuat jumlah permintaan bersamaan yang dapat dikonfigurasi. Setiap permintaan tambahan yang melebihi batas yang ditentukan akan ditolak.
Cara sederhana untuk menguji fitur ini adalah dengan mengatur jumlah maksimum permintaan bersamaan ke 2 dengan menjalankan perintah appcmd:
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity
/denyByConcurrentRequests.enabled:"True"
/denyByConcurrentRequests.maxConcurrentRequests:"2"
/commit:apphost
Penting
Saat mengonfigurasi jumlah permintaan bersamaan untuk aplikasi web nyata, uji batas yang Anda pilih secara menyeluruh untuk memastikan bahwa klien HTTP yang valid tidak diblokir. Ini sangat penting untuk Aplikasi Internet Kaya yang memiliki halaman web yang diaktifkan AJAX dan menyajikan konten media.
Contoh 2: Pemblokiran alamat IP berdasarkan jumlah permintaan dari waktu ke waktu menggunakan appcmd
Saat menggunakan opsi ini, server akan menolak permintaan dari alamat IP klien HTTP apa pun yang membuat lebih dari jumlah permintaan yang dapat dikonfigurasi selama jangka waktu tertentu. Alamat IP akan tetap diblokir sampai jumlah permintaan dalam periode waktu turun di bawah batas yang dikonfigurasi.
Untuk menguji fitur ini, atur "Jumlah maksimum permintaan" ke 5 dan "Periode waktu" ke 5000 dengan menjalankan perintah appcmd:
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity /denyByRequestRate.enabled:"True" /denyByRequestRate.maxRequests:"5" /denyByRequestRate.requestIntervalInMilliseconds:"5000" /commit:apphost
Buka browser web, minta http://localhost/welcome.png lalu tekan F5 untuk terus menyegarkan halaman. Ini akan menghasilkan lebih dari 5 permintaan selama 5 detik sehingga sebagai hasilnya Anda akan melihat server merespons dengan kode status 403 - Terlarang.
Jika Anda menunggu 5 detik lagi ketika semua permintaan sebelumnya telah dijalankan dan kemudian membuat permintaan, permintaan akan berhasil.
Penting
Saat mengonfigurasi jumlah permintaan yang diizinkan dari waktu ke waktu untuk aplikasi web nyata, uji secara menyeluruh batas yang Anda pilih untuk memastikan bahwa klien HTTP yang valid tidak diblokir. Ini sangat penting untuk Aplikasi Internet Kaya yang memiliki halaman web yang diaktifkan AJAX dan menyajikan konten media.
Contoh 3: Pemblokiran alamat IP berdasarkan jumlah permintaan bersamaan menggunakan UI
Pada tingkat IIS saya, saya memiliki konfigurasi di bawah ini:
Dari "Edit Pengaturan Fitur":
Dari "Ubah Pengaturan Pembatasan Dinamis...":
Pada tingkat situs saya, saya memiliki konfigurasi di bawah ini:
Ini berarti bahwa hingga 2 permintaan simultan akan diizinkan ke situs (karena nomor 2 yang ditetapkan di atas), dan kode status 403 akan diterima untuk permintaan bersamaan lainnya (karena tindakan "Terlarang" yang dikonfigurasi di atas) seperti yang dapat dilihat di alat pengembang browser (saya mengklik "nonaktifkan cache" untuk membuatnya jelas dan menghindari penembolokan sisi browser):
Catatan: Anda mungkin bertanya-tanya mengapa Anda melihat 3 permintaan yang diizinkan dan bukan hanya dua; itu karena dua permintaan pertama dibuka secara bersamaan dan setelah selesai terjadi bahwa permintaan ketiga mencapai aplikasi, yang berarti permintaan ketiga adalah satu-satunya (oleh karena itu hanya 1 permintaan bersamaan) ketika itu terjadi.
Tindakan "Izinkan" yang dikonfigurasi di atas berarti bahwa setiap alamat IP baik-baik saja untuk mengirim permintaan dan bahwa aturan yang dikonfigurasi menentukan kondisi mana IP yang diizinkan ini akan ditolak aksesnya.
Seperti yang Anda perhatikan, konfigurasi tingkat situs "Izinkan" menimpa "Tolak" tingkat IIS, dan konfigurasi tingkat situs "Terlarang" menimpa konfigurasi tingkat IIS "Tidak Ditemukan", sehingga kode status 403 dikirimkan alih-alih 404.
Namun jika saya mengubah tingkat situs "Izinkan" menjadi "Tolak" maka semua IP akan ditolak aksesnya terlepas dari apakah mereka membuat 2 permintaan bersamaan atau sebaliknya:
Contoh 4: Pemblokiran alamat IP berdasarkan jumlah permintaan bersamaan & jumlah permintaan dari waktu ke waktu, menggunakan UI
Sekarang mari kita ubah konfigurasi dari Contoh 3 sedikit di tingkat situs. Tingkat IIS sama seperti sebelumnya di Contoh 3:
Konfigurasi tingkat situs saat ini adalah:
Sekarang saat membuat permintaan dari browser:
Setiap garis berwarna (contoh disorot) mewakili masa pakai satu permintaan. Aturan menentukan dua kondisi seperti yang Anda lihat. Ini berarti bahwa jika ada kondisi yang terpenuhi pertama kali, maka penolakan akan diterapkan. Aturan ini hanya akan mengizinkan hingga dua permintaan dalam 200 msec, dan permintaan lebih lanjut dalam jangka waktu ini akan ditolak. Seperti yang dapat dilihat, permintaan ketiga dipicu hampir 20 msec setelah yang pertama, yang berarti sekarang kita memiliki lebih dari dua permintaan dalam bingkai 200 msec dan karenanya yang ketiga akan ditolak, dan demikian juga akan menjadi yang ke-4 dan ke-5 dan ke-6.
Penebangan kayu
Anda akan melihat hal di bawah ini dalam log IIS (misalnya 2 di atas):
2024-07-22 14:17:48 ::1 GET / - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 0 0 1
2024-07-22 14:17:48 ::1 GET /Content/css v=7n95mJcoE9tVcdjbEUwG1-urp8oL9Yf2bFpa2lb4Nq41 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 0 0 3
2024-07-22 14:17:48 ::1 GET /bundles/modernizr v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 5
2024-07-22 14:17:48 ::1 GET /bundles/jquery v=JVBM4Dk7eZ-fjWvmxvoCeVR5MAt_3YXn4K7MRdHsuR81 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 7
2024-07-22 14:17:48 ::1 GET /bundles/bootstrap v=X8gnNIYDSsAzCxLBuTaZy64JJqo9mzWM5GPsE4TJLNI1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 7
2024-07-22 14:17:48 ::1 GET /favicon.ico - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 0
2024-07-22 14:17:48 ::1 GET /Content/bootstrap.min.css.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 403 502 0 0
Kode status http untuk permintaan yang ditolak dalam contoh ini adalah 403 dan kode sub status adalah 502. Dengan cara ini Anda dapat mengetahui perbedaan antara kode status Terlarang normal yang ditetapkan oleh kode aplikasi dan antara yang ditetapkan Terlarang oleh fitur Pembatasan IP IIS. Daftar (kode status) yang ditetapkan oleh fitur Pembatasan IP dibahas di bawah ini.
Tolak Tindakan
Modul dapat dikonfigurasi untuk melakukan tindakan berikut saat menolak permintaan alamat IP:
• Dilarang: 403 • Tidak Sah: 401 • Tidak Ditemukan: 404 • Batal: koneksi TCP hanya akan diatur ulang dan http tidak akan dibuat. Ini juga bagus jika halaman utama ditolak dan Anda tidak ingin pengguna akhir melihat kode sub status 502 (untuk tidak tahu ini karena fitur Pembatasan IP). Pengguna akan melihat yang berikut:
Dan berikut adalah kemungkinan (kode substatus) oleh fitur Pembatasan IP: 501, 502.
Kode substatus akan menjadi 501 atau 502 tergantung pada salah satu dari dua kondisi yang terpenuhi dan karenanya klien ditolak akses: 501 -> Pembatasan IP Dinamis: terlalu banyak permintaan bersamaan yang dibuat dari IP klien yang sama.
502 -> Pembatasan IP Dinamis: jumlah maksimum permintaan dari IP klien yang sama dalam batas waktu tertentu tercapai.
Kode di atas didokumenkan di sini: Gambaran umum kode status HTTP - Layanan Informasi Internet | Microsoft Learn
Aktifkan Mode Pengelogan Saja:
Sekarang dalam kasus "Aktifkan Mode Hanya Pengelogan" tidak akan ada klien yang ditolak oleh fitur ini, yang berarti kode status akan menjadi hasil yang diharapkan (biasanya 200 tetapi juga tergantung pada aplikasi Anda) dan klien akan menerima respons normal yang diharapkan, namun, kode substatus yang menunjukkan bahwa salah satu dari dua kondisi terpenuhi akan dicatat dalam log IIS. Di bawah ini adalah contoh:
2024-07-28 06:57:35 ::1 GET / - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 0 0 3 2024-07-28 06:57:35 ::1 GET /bundles/modernizr v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 501 0 3
2024-07-28 06:57:35 ::1 GET /bundles/bootstrap v=X8gnNIYDSsAzCxLBuTaZy64JJqo9mzWM5GPsE4TJLNI1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 502 0 8
2024-07-28 06:57:35 ::1 GET /Content/css v=7n95mJcoE9tVcdjbEUwG1-urp8oL9Yf2bFpa2lb4Nq41 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 0 0 9
2024-07-28 06:57:35 ::1 GET /bundles/jquery v=JVBM4Dk7eZ-fjWvmxvoCeVR5MAt_3YXn4K7MRdHsuR81 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 501 0 8 2024-07-28 06:57:35 ::1 GET /Content/bootstrap.min.css.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 502 0 19
2024-07-28 06:57:35 ::1 GET /Content/bootstrap.min.css.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 502 0 37
2024-07-28 06:57:35 ::1 GET /bundles/bootstrap.min.js.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 404 502 2 0
Dan klien akan mendapatkan ini di sisinya:
Dukungan untuk server web di belakang proksi
Jika server web Anda berada di belakang firewall atau komputer proksi, maka IP klien untuk semua permintaan mungkin muncul sebagai IP proksi atau server firewall. Ini akan menghambat kemampuan agar modul Pembatasan IP Dinamis berguna. Namun, sebagian besar server tersebut menambahkan headerForwarded-For X dalam permintaan HTTP yang berisi alamat IP klien asli. Memilih kotak centang mode "Proksi" di halaman konfigurasi Pembatasan IP Dinamis utama akan memeriksa alamat IP klien di header ini terlebih dahulu.