全部产品
Search
文档中心

Web Application Firewall:Mengambil alamat IP asal klien

更新时间:Jun 28, 2025

Setelah situs web ditambahkan ke Web Application Firewall (WAF), WAF menyaring permintaan akses ke situs web dan meneruskan permintaan normal ke server asal. Server asal dapat menggunakan Header X-Forwarded-For dalam permintaan balik ke asal untuk mengambil alamat IP asal klien. Topik ini menjelaskan cara mengonfigurasi server aplikasi web dan kontainer Kubernetes untuk mengambil alamat IP asal klien, termasuk server NGINX, IIS 6, IIS 7, Apache, dan Tomcat.

Informasi latar belakang

Header X-Forwarded-For digunakan untuk mencatat alamat IP asal klien. WAF menambahkan X-Forwarded-For sebagai header permintaan HTTP sebelum meneruskan permintaan akses ke server hop berikutnya. Formatnya adalah X-Forwarded-For:Alamat IP Klien. Jika permintaan melewati beberapa server proxy perantara seperti WAF, Anti-DDoS Proxy, dan Alibaba Cloud CDN, header X-Forwarded-For mencatat alamat IP asal klien dan alamat IP server proxy perantara, dipisahkan oleh koma (,). Contoh: X-Forwarded-For:Alamat IP Klien, Alamat IP Proxy Server 1, Alamat IP Proxy Server 2, Alamat IP Proxy Server 3, …..

Oleh karena itu, server aplikasi web umum dan kontainer Kubernetes dapat menggunakan header X-Forwarded-For untuk mengambil alamat IP asal klien.

Berikut ini menjelaskan cara mengonfigurasi header X-Forwarded-For pada server NGINX, IIS 6, IIS 7, Apache, dan Tomcat serta kontainer Kubernetes.

Penting

Sebelum memulai, pastikan lingkungan yang ada telah dicadangkan, termasuk snapshot instance Elastic Compute Service (ECS) dan file konfigurasi server aplikasi web.

Konfigurasikan server NGINX

Server NGINX menggunakan modul http_realip_module untuk mengambil alamat IP asal klien. Untuk menginstal modul http_realip_module dan memodifikasi file konfigurasi NGINX, ikuti langkah-langkah berikut:

  1. Instal modul http_realip_module.

    Jalankan perintah nginx -V | grep http_realip_module di server NGINX untuk memeriksa apakah modul sudah terinstal.

    • Jika modul sudah terinstal, lewati langkah ini.

    • Jika modul belum terinstal, kompilasi ulang NGINX dan instal modul tersebut.

      Catatan

      Jika NGINX diinstal menggunakan paket instalasi cepat, modul ini tidak terinstal.

      wget http://nginx.org/download/nginx-1.12.2.tar.gz
      tar zxvf nginx-1.12.2.tar.gz
      cd nginx-1.12.2
      ./configure --user=www --group=www --prefix=/alidata/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
      make
      make install
      kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid`
      kill -QUIT `cat /alidata/server/nginx/logs/nginx.pid.oldbin`
  2. Modifikasi file konfigurasi NGINX.

    1. Buka file konfigurasi nginx.conf.

    2. Tambahkan konten berikut ke http {}:

      http {
        # Tentukan alamat IP dari mana Anda dapat menerima alamat IP asal klien
        set_real_ip_from    <ip_range1>;    
        set_real_ip_from    <ip_range2>;   
        ...
        set_real_ip_from    <ip_rangex>;
        # Tentukan header HTTP untuk alamat IP klien
        real_ip_header      X-Forwarded-For;
      }
      

      <ip_range1>, <ip_range2>, dan <ip_rangex> dalam konfigurasi menentukan blok CIDR balik ke asal WAF. Untuk mendapatkan semua blok CIDR balik ke asal WAF, masuk ke Konsol WAF dan pilih grup sumber daya dan wilayah tempat instans WAF diterapkan. Anda dapat memilih Chinese Mainland atau Outside Chinese Mainland untuk wilayah. Di panel navigasi di sebelah kiri, klik Website Configuration. Pada tab CNAME Record, klik Back-to-origin CIDR Blocks.

      Jika beberapa blok CIDR balik ke asal terlibat, tambahkan semuanya dengan masing-masing berada di baris terpisah. Misalnya, jika blok CIDR balik ke asal WAF mencakup 10.10.10.0/24, 11.11.XX.X/25, dan 2.13.XX.XX/27, tambahkan konten berikut ke http {}:

      set_real_ip_from 10.10.10.0/24;
      set_real_ip_from 11.11.XX.X/25;
      set_real_ip_from 2.13.XX.XX/27;
      real_ip_header X-Forwarded-For;

      Gunakan skrip berikut untuk mengonversi blok CIDR IPv4 balik ke asal yang disalin ke format set_real_ip_from <ip_rangeX>.

      import re
      def format_ip_ranges(ip_ranges_str):
          # Gunakan ekspresi reguler untuk mencocokkan semua blok CIDR
          ip_pattern = re.compile(r'\d+\.\d+\.\d+\.\d+/\d\d')
          ip_list = ip_pattern.findall(ip_ranges_str)
          formatted_ips = [f"    set_real_ip_from {ip};" for ip in ip_list]
          output = "\n".join(formatted_ips)
          return output
      
      ip_ranges_str = "Blok CIDR balik ke asal WAF dalam format string"
      formatted_output = format_ip_ranges(ip_ranges_str)
      print(formatted_output)
  3. Ubah format log.

    1. Buka file konfigurasi nginx.conf dan temukan log_format dalam konfigurasi HTTP.

    2. Dalam log_format, ganti bidang remote-address dengan bidang x-forwarded-for.

      Berikut ini adalah format log setelah perubahan:

      log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" ';
  4. Jalankan perintah nginx -s reload untuk memulai ulang NGINX.

  5. Periksa apakah konfigurasi berlaku.

    1. Jalankan perintah curl berikut untuk mensimulasikan permintaan:

      curl -H "X-Forwarded-For: 1.2.3.4" http://example.com
    2. Jalankan perintah berikut untuk memeriksa log akses NGINX dan konfirmasi apakah alamat IP klien diambil:

      tail -f access.log

Konfigurasikan server IIS 6

Internet Information Services (IIS) 6 menggunakan modul F5XForwardedFor untuk mengambil alamat IP asal klien. Untuk menginstal modul F5XForwardedFor, ikuti langkah-langkah berikut:

  1. Salin file F5XForwardedFor.dll dari direktori x86\Release atau x64\Release ke direktori kustom seperti C:\ISAPIFilters\x86 atau C:\ISAPIFilters\x64.

    Catatan
    • Pastikan proses IIS memiliki izin baca dan tulis pada direktori kustom.

    • Jika file F5XForwardedFor.dll tidak ada di direktori x86\Release atau x64\Release, klik F5XForwardedFor.dll untuk mengunduh dan menyalin file ke direktori kustom.

  2. Buka IIS Manager, temukan situs web, klik kanan situs web, dan pilih Properties.

  3. Pada tab ISAPI Filters, klik Add. Konfigurasikan parameter berikut dan klik OK.

    Dalam contoh ini, server yang menjalankan sistem operasi 32-bit digunakan.

    • Filter name: Masukkan x_forwarded_for_x86.

    • Executable: Masukkan jalur lengkap file F5XForwardedFor.dll. Contoh: C:\ISAPIFilters\x86\F5XForwardedFor.dll.

  4. Mulai ulang IIS 6 agar konfigurasi berlaku.

Konfigurasikan server IIS 7

Server IIS 7 menggunakan modul F5XForwardedFor untuk mengambil alamat IP asal klien. Untuk menginstal modul F5XForwardedFor, ikuti langkah-langkah berikut:

  1. Salin file F5XFFHttpModule.dll dan F5XFFHttpModule.ini dari direktori x86\Release atau x64\Release ke direktori kustom seperti C:\x_forwarded_for\x86 atau C:\x_forwarded_for\x64.

    Catatan
    • Pastikan proses IIS memiliki izin baca dan tulis pada direktori kustom.

    • Jika file F5XForwardedFor.dll dan F5XFFHttpModule.ini tidak ada di direktori x86\Release atau x64\Release, klik F5XForwardedFor untuk mengunduh file tersebut.

  2. Buka IIS Manager dan klik dua kali Module di bagian IIS Server.

  3. Pada halaman Module, klik Configure Local Module di bagian Aksi di sebelah kanan.

  4. Dalam kotak dialog Configure Local Module, klik Register. Konfigurasikan parameter berikut dan klik OK.

    Dalam contoh ini, server yang menjalankan sistem operasi 32-bit digunakan.

    • Name: Masukkan x_forwarded_for_x86.

    • Path: Masukkan jalur lengkap file F5XFFHttpModule.dll. Contoh: C:\x_forwarded_for\x86\F5XFFHttpModule.dll.

  5. Dalam kotak dialog Configure Local Module, pilih modul yang baru didaftarkan dan klik OK.

  6. Di bagian ISAPI and CGI Restrictions, tambahkan file DLL yang didaftarkan dan atur Restriction ke Allow.

  7. Mulai ulang IIS 7 agar konfigurasi berlaku.

Konfigurasikan server Apache

Configure Apache servers in Windows

Paket instalasi Apache 2.4 dan versi lebih tinggi menyediakan file modul remoteip_module bernama mod_remoteip.so. Anda dapat menggunakan modul ini untuk mengambil alamat IP asal klien.

  1. Di folder konfigurasi tambahan Apache (conf/extra/), buat file konfigurasi bernama httpd-remoteip.conf.

    Catatan

    Anda dapat mengimpor file konfigurasi remoteip.conf untuk memuat konfigurasi terkait. Ini mengurangi jumlah kali Anda memodifikasi file httpd.conf dan mencegah pengecualian layanan akibat kesalahan operasi.

  2. Tambahkan konten berikut ke file konfigurasi httpd-remoteip.conf:

    # Muat modul mod_remoteip.so
    LoadModule remoteip_module modules/mod_remoteip.so
    # Konfigurasikan header RemoteIPHeader
    RemoteIPHeader X-Forwarded-For
    # Tentukan blok CIDR balik ke asal
    RemoteIPInternalProxy <ip_range1> <ip_range2> ... <ip_rangex>

    <ip_range1>, <ip_range2>, dan <ip_rangex> dalam konfigurasi menentukan blok CIDR balik ke asal WAF. Untuk mendapatkan semua blok CIDR balik ke asal WAF, masuk ke Konsol WAF dan pilih grup sumber daya dan wilayah tempat instans WAF diterapkan. Anda dapat memilih Chinese Mainland atau Outside Chinese Mainland untuk wilayah. Di panel navigasi di sebelah kiri, klik Website Configuration. Pada tab CNAME Record, klik Back-to-origin CIDR Blocks.

    Pisahkan beberapa blok CIDR balik ke asal dengan spasi. Misalnya, jika blok CIDR balik ke asal server proxy mencakup 10.0.0.1, 10.0.0.2, dan 10.0.0.3, tentukan blok CIDR dalam format berikut:

    RemoteIPInternalProxy 10.0.0.1 10.0.0.2 10.0.0.3
  3. Tambahkan konten berikut ke file konfigurasi conf/httpd.conf:

    Include conf/extra/httpd-remoteip.conf

    Konfigurasi sebelumnya menentukan bahwa konten file konfigurasi httpd-remoteip.conf dimasukkan ke conf/httpd.conf.

  4. Ubah format log dalam file konfigurasi httpd.conf.

    LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%a %l %u %t \"%r\" %>s %b" common
  5. Mulai ulang Apache agar konfigurasi berlaku.

Configure Apache servers in Linux

Lakukan langkah-langkah sebelumnya untuk menambahkan modul remoteip_module (mod_remoteip.so) dan mengonfigurasi format log untuk mengambil alamat IP asal klien. Modul remoteip_module adalah modul bawaan Apache 2.4 dan versi lebih tinggi.

Jika versi Apache lebih awal dari 2.4, instal modul pihak ketiga bernama mod_rpaf untuk mengambil alamat IP asal klien.

  1. Instal modul mod_rpaf.

    wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz
    tar zxvf mod_rpaf-0.6.tar.gz
    cd mod_rpaf-0.6
    /alidata/server/httpd/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
  2. Tambahkan konten berikut ke file konfigurasi /alidata/server/httpd/conf/httpd.conf Apache:

    LoadModule rpaf_module modules/mod_rpaf-2.0.so
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips <rpaf IP address>
    RPAFheader X-Forwarded-For

    <rpaf IP address> dalam konfigurasi adalah alamat IP modul mod_rpaf. Anda dapat memeriksa alamat IP di log Apache. Jangan gunakan alamat IP publik server proxy. Dalam banyak kasus, dua alamat IP termasuk. Contoh:

    LoadModule rpaf_module modules/mod_rpaf-2.0.so
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 10.XX.XX.65 10.XX.XX.131
    RPAFheader X-Forwarded-For
  3. Mulai ulang Apache agar konfigurasi berlaku.

    /alidata/server/httpd/bin/apachectl restart

Untuk informasi lebih lanjut tentang modul Apache, lihat Dokumentasi Bantuan Apache.

Konfigurasikan server Tomcat

Server Tomcat menggunakan header X-Forwarded-For untuk mengambil alamat IP asal klien.

  1. Buka file konfigurasi tomcat/conf/server.xml.

  2. Modifikasi fitur logging AccessLogValve berdasarkan konfigurasi berikut:

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log." suffix=".txt"
    pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts="false"/>

Konfigurasikan kontainer Kubernetes

Jika layanan Anda diterapkan pada kontainer Kubernetes, Kubernetes mencatat alamat IP asal klien di bidang X-Original-Forwarded-For dan blok CIDR balik ke asal WAF di bidang X-Forwarded-For. Untuk mendapatkan alamat IP asal klien, Anda harus memodifikasi file konfigurasi kontainer dan mengaktifkan pengontrol Ingress untuk menambahkan alamat IP ke bidang X-Forwarded-For.

Untuk memodifikasi file konfigurasi kontainer, ikuti langkah-langkah berikut:

  1. Jalankan perintah berikut untuk memodifikasi file konfigurasi kube-system/nginx-configuration:

    kubectl -n kube-system edit cm nginx-configuration
  2. Tambahkan konten berikut ke file konfigurasi:

    compute-full-forwarded-for: "true"
    forwarded-for-header: "X-Forwarded-For"
    use-forwarded-headers: "true"
  3. Simpan file konfigurasi.

    Konfigurasi berlaku segera setelah Anda menyimpan file konfigurasi. Kemudian, pengontrol Ingress menambahkan alamat IP asal klien ke bidang X-Forwarded-For.

  4. Ganti bidang yang digunakan untuk mendapatkan alamat IP asal klien dengan bidang X-Original-Forwarded-For.