全部产品
Search
文档中心

Web Application Firewall:Mengambil alamat IP asal dari klien

更新时间:Jul 02, 2025

Setelah situs web Anda ditambahkan ke Web Application Firewall (WAF), WAF menyaring permintaan akses ke situs web Anda 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 dari klien. Topik ini menjelaskan cara mengonfigurasi server aplikasi web dan kontainer Kubernetes untuk mengambil alamat IP asal dari klien. Server aplikasi web meliputi server NGINX, IIS 6, IIS 7, Apache, dan Tomcat.

Latar Belakang

Header X-Forwarded-For digunakan untuk mencatat alamat IP asal dari klien. WAF menambahkan Header X-Forwarded-For ke Header permintaan HTTP sebelum meneruskan permintaan akses ke server hop berikutnya dalam format X-Forwarded-For:Alamat IP Klien. Jika permintaan akses melewati beberapa server proxy perantara seperti WAF, Anti-DDoS Pro atau Anti-DDoS Premium, dan Alibaba Cloud CDN, Header X-Forwarded-For mencatat alamat IP asal dari klien dan alamat IP server proxy perantara. Header tersebut mencatat beberapa alamat IP yang dipisahkan dengan 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 dari klien.

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

Penting

Sebelum memulai, pastikan Anda telah mencadangkan lingkungan yang ada, termasuk snapshot Instance ECS dan file konfigurasi server aplikasi web.

Konfigurasi server NGINX

Server NGINX menggunakan modul http_realip_module untuk mengambil alamat IP asal dari klien. Gunakan metode berikut untuk menginstal modul http_realip_module dan memodifikasi file konfigurasi NGINX.

  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.

      Catatan

      Modul ini tidak terinstal saat NGINX diinstal menggunakan paket instalasi cepat.

      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 default.conf.

    2. Tambahkan konten berikut ke location / {}:

      set_real_ip_from <ip_range1>;
      set_real_ip_from <ip_range2>;
      ...
      set_real_ip_from <ip_rangex>;
      real_ip_header X-Forwarded-For;

      <ip_range1>, <ip_range2>, dan <ip_rangex> dalam konten adalah blok CIDR balik ke asal dari WAF. Untuk informasi lebih lanjut tentang blok CIDR balik ke asal dari WAF, lihat Mengizinkan Permintaan dari Blok CIDR Balik ke Asal dari WAF.

      Masukkan satu blok CIDR balik ke asal dalam setiap baris. Anggaplah blok CIDR balik ke asal dari WAF mencakup 10.0.0.1, 10.0.0.2, dan 10.0.0.3. Tambahkan konten berikut ke location / {}:

      set_real_ip_from 10.0.0.1;
      set_real_ip_from 10.0.0.2;
      set_real_ip_from 10.0.0.3;
      real_ip_header X-Forwarded-For;
  3. Modifikasi 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.

      Konten berikut menunjukkan format log yang dimodifikasi:

      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.

Konfigurasi server IIS 6

Server IIS 6 menggunakan modul F5XForwardedFor untuk mengambil alamat IP asal dari klien. Anda dapat melakukan operasi berikut untuk menginstal modul F5XForwardedFor.

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

    Catatan
    • Pastikan proses Internet Information Services (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 mengunduhnya dan salin 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.

    Anggaplah server Anda menjalankan sistem operasi 32-bit.

    • Filter name: Masukkan x_forwarded_for_x86.

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

  4. Mulai ulang server IIS 6 agar konfigurasi diterapkan.

Konfigurasi server IIS 7

Server IIS 7 menggunakan modul F5XForwardedFor untuk mengambil alamat IP asal dari klien. Anda dapat melakukan operasi berikut untuk menginstal modul F5XForwardedFor.

  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-file tersebut tidak ada di direktori x86\Release atau x64\Release, klik F5XForwardedFor untuk mengunduhnya.

  2. Di bagian IIS Server, klik dua kali Module.

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

  4. Di kotak dialog Configure Local Module, klik Register. Tentukan parameter berikut dan klik OK.

    Anggaplah server Anda menjalankan sistem operasi 32-bit.

    • Name: Masukkan x_forwarded_for_x86.

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

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

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

  7. Mulai ulang server IIS 7 agar konfigurasi diterapkan.

Konfigurasi server Apache

Configure Apache servers in Windows

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

  1. Buat file konfigurasi bernama httpd-remoteip.conf di folder konfigurasi ekstra Apache (conf/extra/).

    Catatan

    Anda dapat memuat konfigurasi terkait dengan mengimpor file konfigurasi remoteip.conf. Ini mengurangi jumlah kali Anda memodifikasi file httpd.conf dan menghindari 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 konten adalah blok CIDR balik ke asal dari WAF. Untuk informasi lebih lanjut tentang blok CIDR balik ke asal dari WAF, lihat Mengizinkan Permintaan dari Blok CIDR Balik ke Asal dari WAF.

    Pisahkan beberapa blok CIDR balik ke asal dengan spasi. Anggaplah blok CIDR balik ke asal dari server proxy mencakup 10.0.0.1, 10.0.0.2, dan 10.0.0.3. Gunakan format serupa dengan 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

    Konten di atas menyisipkan file konfigurasi httpd-remoteip.conf ke conf/httpd.conf.

  4. Ubah format log di 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 diterapkan.

Configure Apache servers in Linux

Lakukan langkah-langkah di atas untuk menambahkan modul remoteip_module (mod_remoteip.so) dan konfigurasikan format log untuk mengambil alamat IP asal dari klien. Modul remoteip_module adalah modul bawaan Apache 2.4 dan versi selanjutnya.

Jika versi Apache lebih lama dari 2.4, instal modul pihak ketiga mod_rpaf untuk mengambil alamat IP asal dari 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 dari 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 konten adalah alamat IP dari modul mod_rpaf. Anda dapat menanyakan alamat IP spesifik di log Apache. Jangan gunakan alamat IP dari server proxy. Dalam banyak kasus, dua alamat IP disertakan, seperti yang ditunjukkan dalam contoh berikut:

    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 diterapkan.

    /alidata/server/httpd/bin/apachectl restart

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

Konfigurasi server Tomcat

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

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

  2. Modifikasi fitur logging AccessLogValve berdasarkan konten 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"/>

Konfigurasi kontainer Kubernetes

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

Anda dapat memodifikasi file konfigurasi kontainer dengan melakukan operasi 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 diterapkan segera setelah Anda menyimpan file konfigurasi. Kemudian, pengontrol Ingress menambahkan alamat IP asal dari klien ke bidang X-Forwarded-For.

  4. Ubah bidang yang digunakan untuk mendapatkan alamat IP asal dari klien ke bidang X-Original-Forwarded-For.