Bagikan melalui


Proksi Terbalik - Templat Aturan

oleh Ruslan Yakushev

Templat aturan digunakan untuk menyediakan cara sederhana membuat satu atau beberapa aturan penulisan ulang untuk skenario tertentu. Url Rewrite Modul 2 menyertakan beberapa templat aturan untuk beberapa skenario penggunaan umum. Selain itu, UI Modul Penulisan Ulang URL menyediakan kerangka kerja untuk memasukkan templat aturan kustom. Panduan ini akan memandu Anda melalui cara menggunakan templat aturan "Proksi Terbalik" yang disertakan dengan modul penulisan ulang URL. Untuk mempelajari selengkapnya tentang mengonfigurasi proksi terbalik dengan Modul Penulisan Ulang URL IIS dan Perutean Permintaan Aplikasi IIS, lihat Reverse Proxy dengan URL Rewrite v2 dan Perutean Permintaan Aplikasi.

Prasyarat

Panduan ini memerlukan prasyarat berikut:

  • IIS 7 atau lebih tinggi dengan layanan peran ASP.NET diaktifkan;
  • Modul Penulisan Ulang URL 2.0 terinstal;
  • Pengarahan Permintaan Aplikasi IIS terpasang.

Membuat Contoh Situs Web

Untuk kesederhanaan, skenario reverse-proxy yang akan Anda gunakan dalam panduan ini akan diterapkan pada satu server, dengan IIS "Default Web Site" bertindak sebagai situs reverse-proxy dan aplikasi konten yang dihosting pada situs web IIS yang terpisah di server yang sama.

Untuk membuat contoh isi situs Web:

  1. Buat folder bernama "contentsite" di folder berikut:

    %SystemDrive%\inetpub\ folder.
    
  2. Buat situs web IIS yang disebut "contentsite" yang menunjuk ke folder terkait di bawah %SystemDrive%\inetpub\. Gunakan port 8081 untuk situs.
    Anda bisa menggunakan perintah berikut untuk membuat situs:

    %windir%\System32\inetsrv\appcmd.exe add site /name:"contentsite" /bindings:http/*:8081: /physicalPath:"%SystemDrive%\inetpub\contentsite
    
  3. Buat file bernama default.aspx di folder berikut:

    %SystemDrive%\inetpub\contentsite
    
  4. Salin markup ASP.NET berikut, tempelkan ke dalam file, dan simpan file sebagai default.aspx:

    <%@ Page Language="C#" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Reverse Proxy Test Application</title>
    </head>
    <body>
        <h1>Reverse Proxy Test Page</h1>
        <p>Requested URL path is <%= Request.ServerVariables["SCRIPT_NAME"] %></p>
        <p><a href="http://<%= Request.ServerVariables["HTTP_HOST"] + Request.ServerVariables["SCRIPT_NAME"] %>">Here</a> is the link to this page.</p>
    </body>
    </html>
    
  5. Untuk memastikan bahwa situs berfungsi dengan benar, buka penelusuran Web dan minta URL berikut:

    http://localhost:8081/default.aspx
    

Hasilkan Aturan Masuk dan Keluar dengan Menggunakan Templat Proksi Terbalik

Templat aturan "Proksi Terbalik" dapat digunakan untuk menghasilkan aturan penulisan ulang masuk yang digunakan untuk mem-proksi permintaan HTTP ke server lain. Secara opsional templat juga dapat membuat aturan penulisan ulang keluar yang dapat memperbaiki nama host di URL tautan di dalam respons HTML. Dalam contoh kasus yang dijelaskan dalam panduan ini, nama host server proksi adalah localhost dan nama host server konten adalah localhost:8081. Aplikasi web di server konten menghasilkan tautan dalam respons HTML yang menggunakan nama host internal, misalnya http://localhost:8081/default.aspx. Aturan keluar mengatur tautan ini untuk menggunakan nama host proksi, misalnya http://localhost/default.aspx.

Untuk membuat aturan dengan menggunakan templat aturan, ikuti langkah-langkah berikut:

  1. Di Manajer IIS pilih "Situs Web Default" dalam tampilan pohon di sisi kiri.
  2. Buka tampilan fitur Penulisan Ulang URL.
  3. Dalam tampilan fitur Penulisan Ulang URL, pilih "Tambahkan Aturan..." tindakan lalu pilih templat "Proksi Terbalik":
    Cuplikan layar kotak dialog Tambahkan Aturan yang menampilkan opsi templat aturan. Proksi Terbalik disorot.
  4. Dalam dialog "Tambahkan Aturan Proksi Terbalik" masukkan yang berikut ini:
    Nama server atau alamat IP tempat permintaan HTTP akan diteruskan: localhost:8081
    Centang kotak centang "Tulis ulang nama domain tautan dalam respons HTTP" dan masukkan:
    Dari: localhost:8081
    Ke: localhost
    Cuplikan layar kotak dialog Tambahkan Aturan Proksi Terbalik.
  5. Klik OK. Aturan masuk dan keluar akan dibuat:
    Cuplikan layar Manajer I I S yang menampilkan halaman Penulisan Ulang U R L.

Menguji Proksi Terbalik

Untuk menguji bahwa aturan penulisan ulang yang dihasilkan oleh templat aturan berfungsi dengan benar membuka browser web dan membuat permintaan ke http://localhost/default.aspx. IIS "Situs Web Default" akan menerima permintaan ini dan akan merutekannya http://localhost:8081/default.aspx sesuai dengan aturan penulisan ulang masuk. Ketika respons HTTP dikembalikan dari situs web contentsite , aturan penulisan ulang keluar memodifikasi URL tautan di dalam HTML untuk menulis ulang nama host dari localhost:8081 ke localhost:

Cuplikan layar jendela browser yang menampilkan Halaman Uji Proksi Terbalik.

Menggunakan ARR Reverse Proxy untuk Servlet Tomcat

Untuk menambahkan pertahanan berlapis saat menghosting servlet Tomcat di belakang proksi terbalik IIS + ARR, gunakan aturan Penulisan Ulang URL untuk memitigasi serangan traversal jalur. Serangan ini sering mengeksploitasi perbedaan dalam cara Tomcat menangani parameter jalur dalam segmen URL, misalnya "/..; a=b/" seperti yang dijelaskan dalam Pertimbangan Keamanan Apache Tomcat.

Mengapa ini penting

Tomcat menginterpretasikan parameter jalur berbasis titik koma secara berbeda dari IIS, yang dapat menyebabkan perilaku traversal yang tidak terduga. Memblokir atau menormalkan pola tersebut sebelum modul ARR menanganinya membantu mencegah eksploitasi.

Jika tujuan Anda hanyalah memblokir permintaan yang berisi upaya traversal (seperti "/..; a=b/"), gunakan wildcard atau sintaks ekspresi reguler.

Contoh aturan wildcard

<rule name="BlockDotDotWildcard" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*/..;*/*" />
    <action type="CustomResponse" statusCode="404" statusReason="Not Found" statusDescription="" />
</rule>

Contoh aturan RegEx

<rule name="BlockDotDotRegEx" stopProcessing="true">
    <match url="\/\.\.;.*\/" />
    <action type="CustomResponse" statusCode="404" statusReason="Not Found" statusDescription="" />
</rule>

Catatan penting

  • Uji secara menyeluruh di lingkungan end-to-end Anda. Anda mungkin memerlukan aturan tambahan untuk pola yang dikodekan atau dikodekan dua kali (misalnya, %252F..%253Bfoo%252F).
  • Urutan aturan penting: Pastikan aturan pemblokiran berjalan sebelum aturan terkait proksi ARR.
  • Kompromi performa: RegEx lebih fleksibel tetapi menimbulkan beban yang lebih tinggi.

Skenario tingkat lanjut: Renormalisasi URL

Jika Anda ingin menghapus parameter jalur dan menormalkan kembali URL sehingga semua aturan Penulisan Ulang URL berlaku untuk URL yang dinormalisasi, Anda memerlukan pengalihan ulang. Misalnya: Input: /abc/..;boo/xyz/ Dialihkan ke: /abc/../xyz/ → dinormalisasi untuk /xyz/ → dievaluasi ulang oleh aturan penulisan ulang.

Contoh aturan

<rule name="RenormalizeURL_SSL" stopProcessing="true">
    <match url="^([^;]*)(;[^/]*)(/.*)$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTPS}" pattern="ON" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}{R:3}" redirectType="Found" />
</rule>
<rule name="RenormalizeURL" stopProcessing="true">
    <match url="^([^;]*)(;[^/]*)(/.*)$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTPS}" pattern="OFF" />
    </conditions>
    <action type="Redirect" url="http://{HTTP_HOST}/{R:1}{R:3}" redirectType="Found" />
</rule>

Ketika RegEx terlalu kompleks

Untuk kasus yang sangat kompleks, pertimbangkan untuk menulis Penyedia Penulisan Ulang URL kustom.

Ringkasan

Dalam panduan ini, Anda mempelajari cara menggunakan templat aturan "Proksi Terbalik" untuk menghasilkan aturan penulisan ulang yang menerapkan konfigurasi proksi terbalik sederhana di IIS. Gunakan templat aturan ini sebagai titik awal untuk menghasilkan aturan dasar. Anda dapat menyesuaikan atau mengubah aturan ini nanti untuk mengatasi persyaratan perutean dan penulisan ulang tertentu untuk aplikasi web Anda.