All Products
Search
Document Center

Web Application Firewall:Mengambil IP asli klien melalui header HTTP

Last Updated:Jun 04, 2026

Saat menggunakan integrasi CNAME Web Application Firewall (WAF), server origin menerima alamat IP proxy hop terakhir, bukan alamat IP klien yang sebenarnya. WAF menyisipkan field X-Forwarded-For ke dalam header permintaan HTTP untuk meneruskan alamat IP asli. Topik ini menjelaskan cara mengonfigurasi berbagai server web backend agar mengekstrak alamat IP klien asli dari field tersebut guna memastikan pencatatan log dan audit keamanan berfungsi sebagaimana mestinya.

Cara kerja

Setelah Anda menggunakan akses CNAME untuk menghubungkan domain ke WAF, permintaan klien terlebih dahulu melewati WAF dan kemungkinan juga proxy perantara lainnya (seperti CDN atau Anti-DDoS Pro) sebelum mencapai server origin. Pada titik ini, alamat IP sumber dari koneksi TCP yang diterima oleh server origin adalah alamat IP proxy hop terakhir, bukan alamat IP klien yang sebenarnya.

Saat WAF meneruskan permintaan HTTP, WAF secara otomatis menambahkan field header X-Forwarded-For. Nilai awal field ini adalah alamat IP klien. Setiap kali permintaan melewati node proxy, alamat IP node tersebut ditambahkan ke akhir field dengan format berikut:

X-Forwarded-For: client IP, proxy 1 IP, proxy 2 IP, …

Oleh karena itu, Anda harus mengonfigurasi server web backend agar mengekstrak alamat IP paling kiri dari header X-Forwarded-For, yaitu alamat IP klien asli. Bagian-bagian berikut menjelaskan metode konfigurasi untuk berbagai platform.

Langkah 1: Dapatkan rentang IP back-to-origin WAF

Masuk ke Konsol Web Application Firewall. Di bilah navigasi atas, pilih kelompok sumber daya dan wilayah instans WAF Anda (Chinese Mainland atau Outside Chinese Mainland). Lalu, klik Onboarding > CNAME Record > View Back-to-origin CIDR Blocks dan catat semua rentang IP back-to-origin WAF untuk konfigurasi selanjutnya.

Langkah 2: Konfigurasi server origin

Penting

Sebelum mengonfigurasi server origin, cadangkan lingkungan dengan membuat snapshot ECS atau mencadangkan file konfigurasi untuk mencegah kehilangan konfigurasi.

Konfigurasi Nginx

Nginx menggunakan modul http_realip_module untuk mengurai X-Forwarded-For. Lakukan langkah-langkah berikut untuk memodifikasi konfigurasi Nginx.

Periksa apakah http_realip_module telah terinstal

Masuk ke server dan jalankan perintah berikut:

nginx -V 2>&1 | grep -o with-http_realip_module
Catatan

Versi yang diinstal menggunakan yum install nginx atau apt install nginx biasanya sudah menyertakan modul ini. Versi hasil kompilasi kustom atau gambar kontainer minimal mungkin tidak menyertakannya.

Tambahkan modul realip (hanya jika belum tersedia)

Metode 1: Instal ulang menggunakan manajer paket sistem

# Alibaba Cloud Linux / CentOS / RHEL
sudo yum reinstall nginx -y

# Ubuntu / Debian
sudo apt install --reinstall nginx-core nginx-full

Metode 2: Kompilasi dari kode sumber

  1. Instal dependensi.

    # Alibaba Cloud Linux / CentOS / RHEL
    sudo yum install -y gcc pcre-devel zlib-devel openssl-devel
    
    # Ubuntu / Debian
    sudo apt update
    sudo apt install -y build-essential libpcre3-dev zlib1g-dev libssl-dev
  2. Periksa versi Nginx yang terinstal.

    # Periksa versi (digunakan untuk mengunduh kode sumber versi yang sesuai)
    nginx -v
    
    # Periksa argumen kompilasi lengkap
    nginx -V 2>&1 | grep 'configure arguments' | sed 's/configure arguments: //'

    Catat output-nya, misalnya --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module.

  3. Unduh kode sumber Nginx untuk versi yang sesuai. Ganti nomor versi dengan versi aktual.

    cd /tmp
    wget http://nginx.org/download/nginx-1.26.0.tar.gz
    tar zxvf nginx-1.26.0.tar.gz
    cd nginx-1.26.0
  4. Konfigurasikan argumen kompilasi. Salin argumen asli dari Langkah 2 dan tambahkan --with-http_realip_module di akhir.

    ./configure \
      --prefix=/usr/local/nginx \
      --with-http_ssl_module \
      --with-http_v2_module \
      --with-http_realip_module
  5. Kompilasi dan tingkatkan layanan.

    make
    #  Setelah menjalankan make, file biner nginx baru dihasilkan di direktori objs/.
    
    #  Ganti nama biner lama (simpan sebagai cadangan)
    sudo mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
    
    #  Ganti dengan versi yang baru dikompilasi
    sudo cp objs/nginx /usr/local/nginx/sbin/nginx
    
    # Dapatkan PID proses master saat ini
    OLD_PID=$(pgrep -f 'nginx: master' | head -1)
    
    # Mulai proses master baru
    sudo kill -USR2 $OLD_PID
    
    # Tunggu proses baru dimulai
    sleep 2
    
    # Matikan proses lama
    sudo kill -QUIT $OLD_PID

Konfigurasi Nginx untuk mempercayai rentang IP back-to-origin WAF

  1. Edit file konfigurasi utama nginx.conf (lokasi default: /etc/nginx/nginx.conf) dan tambahkan konten berikut ke dalam blok http {}.

    http {
      # Percayai header X-Forwarded-For dari IP back-to-origin WAF
      # Ganti dengan rentang IP back-to-origin WAF aktual yang diperoleh dari konsol. Setiap rentang harus berada di baris terpisah.
      # Anda harus menyertakan semua rentang back-to-origin WAF. Jika ada yang terlewat, log mungkin tetap menampilkan IP back-to-origin WAF, bukan IP klien asli.
      set_real_ip_from    <ip_range1>;    
      set_real_ip_from    <ip_range2>;   
      ...
      set_real_ip_from    <ip_rangex>;
      
      # Tentukan header X-Forwarded-For untuk mengekstrak alamat IP asli
      real_ip_header      X-Forwarded-For;
    }
  2. Muat ulang konfigurasi Nginx:

    nginx -t && nginx -s reload

Verifikasi konfigurasi

  1. Akses website. Ganti http://your-domain.com/ dengan nama domain yang terhubung ke WAF.

    curl http://your-domain.com/
  2. Lihat log akses Nginx. Alamat IP klien asli seharusnya ditampilkan.

    tail -f /var/log/nginx/access.log

Konfigurasi IIS 7 (berlaku untuk IIS 7 dan versi lebih baru)

Saat WAF bertindak sebagai reverse proxy, field c-ip dalam log IIS default mencatat IP back-to-origin WAF, bukan alamat IP klien yang sebenarnya. Anda dapat menggunakan fitur field log kustom W3C di IIS untuk menulis header permintaan X-Forwarded-For ke dalam log guna keperluan audit dan troubleshooting.

  1. Buka IIS Manager. Di pohon Connections di sisi kiri, perluas node server dan pilih website target (misalnya, Default Web Site).

  2. Di panel Features View di sebelah kanan, klik ganda ikon Logging.image

  3. Di bagian Log Files, pastikan Format diatur ke W3C (nilai default). Jika format lain dipilih, ubah ke W3C.

  4. Di bagian Log Files, klik Select Fields....

  5. Di bagian bawah kotak dialog yang muncul, klik Add Field....

  6. Di kotak dialog Add Custom Field, masukkan informasi berikut dan klik OK.

    Parameter

    Deskripsi

    Field Name

    Masukkan X-FORWARDED-FOR

    Source Type

    Pilih Request Header

    Source

    Masukkan X-Forwarded-For

  7. Klik OK untuk menyimpan field kustom.

  8. Klik OK lagi untuk menutup jendela field logging, lalu klik Apply di panel Actions untuk menyimpan perubahan.

  9. Restart IIS agar perubahan berlaku.

  10. Akses website untuk memverifikasi konfigurasi, dan lihat log akses (lokasi default: C:\inetpub\logs\LogFiles\W3SVC1\). Alamat IP klien asli seharusnya ditampilkan.

Konfigurasi Apache

Apache 2.4 dan versi lebih baru menyertakan remoteip_module (mod_remoteip.so), yang dapat digunakan untuk mendapatkan alamat IP klien asli.

Alibaba Cloud Linux / CentOS / RHEL

  1. Edit file konfigurasi utama Apache.

    sudo vim /etc/httpd/conf/httpd.conf
  2. Tambahkan konten berikut ke akhir file.

    # Aktifkan mod_remoteip
    LoadModule remoteip_module modules/mod_remoteip.so
    
    # Tentukan header permintaan yang digunakan WAF untuk meneruskan alamat IP asli (WAF menggunakan X-Forwarded-For)
    RemoteIPHeader X-Forwarded-For
    
    # Tetapkan rentang IP back-to-origin WAF. Ganti placeholder dengan rentang IP back-to-origin WAF Alibaba Cloud yang sebenarnya
    RemoteIPTrustedProxy 100.xx.xx.0/10
    RemoteIPTrustedProxy 11.xx.xx.0/13
    RemoteIPTrustedProxy 112.xx.xx.0/16
  3. Temukan bagian format log dalam file konfigurasi, lalu ubah %h menjadi %a. %a merepresentasikan alamat IP remote dari koneksi (alamat IP klien asli setelah dikoreksi oleh mod_remoteip), sedangkan %h merepresentasikan alamat IP koneksi asli (alamat IP node WAF). Gambar berikut menunjukkan contoh yang telah dimodifikasi.image

  4. Restart Apache agar perubahan berlaku.

    sudo systemctl restart httpd
  5. Akses website untuk memverifikasi konfigurasi, dan lihat log akses. Alamat IP klien asli seharusnya ditampilkan.

    tail -f /var/log/httpd/access_log

Ubuntu / Debian

  1. Aktifkan modul remoteip.

    sudo a2enmod remoteip
  2. Edit file konfigurasi utama Apache.

    sudo vim /etc/apache2/apache2.conf
  3. Tambahkan konten berikut ke akhir file.

    # Tentukan header permintaan yang digunakan WAF untuk meneruskan alamat IP asli (WAF menggunakan X-Forwarded-For)
    RemoteIPHeader X-Forwarded-For
    
    # Tetapkan rentang IP back-to-origin WAF. Ganti placeholder dengan rentang IP back-to-origin WAF Alibaba Cloud yang sebenarnya
    RemoteIPTrustedProxy 100.xx.xx.0/10
    RemoteIPTrustedProxy 11.xx.xx.0/13
    RemoteIPTrustedProxy 112.xx.xx.0/16
  4. Temukan bagian format log dalam file konfigurasi, lalu ubah %h menjadi %a. %a merepresentasikan alamat IP remote dari koneksi (alamat IP klien asli setelah dikoreksi oleh mod_remoteip), sedangkan %h merepresentasikan alamat IP koneksi asli (alamat IP node WAF). Gambar berikut menunjukkan contoh yang telah dimodifikasi.image

  5. Restart Apache agar perubahan berlaku.

    sudo systemctl restart apache2
  6. Akses website untuk memverifikasi konfigurasi, dan lihat log akses. Alamat IP klien asli seharusnya ditampilkan.

    tail -f /var/log/apache2/access.log

Konfigurasi Tomcat

Tomcat dapat memperoleh alamat IP klien asli dengan mengaktifkan fitur X-Forwarded-For.

  1. Buka direktori instalasi Tomcat dan buka file konfigurasi tomcat/conf/server.xml.

  2. Modifikasi konfigurasi log AccessLogValve menjadi seperti 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"/>
  3. Restart Tomcat.

    sudo systemctl restart tomcat
  4. Akses website untuk memverifikasi konfigurasi, dan lihat log akses. Alamat IP klien asli seharusnya ditampilkan.

    # Ganti perintah berikut dengan path direktori instalasi Tomcat aktual dan file log aktual
    tail -f /opt/tomcat/logs/localhost_access_log.2026-01-01.txt 

Konfigurasi kluster Kubernetes

Saat kluster Kubernetes yang menggunakan Nginx Ingress Controller terhubung ke WAF, alamat IP klien asli ditambahkan oleh WAF ke header permintaan X-Forwarded-For. Secara default, Nginx Ingress Controller tidak mempercayai field ini, sehingga kontainer bisnis tidak dapat memperoleh alamat IP klien asli.

Lakukan langkah-langkah berikut untuk mengonfigurasi Nginx Ingress Controller.

  1. Edit ConfigMap dari Ingress Controller:

    kubectl -n kube-system edit cm nginx-configuration
  2. Tambahkan item konfigurasi berikut ke field data:

    compute-full-forwarded-for: "true"
    forwarded-for-header: "X-Forwarded-For"
    use-forwarded-headers: "true"
  3. Simpan dan keluar. Konfigurasi akan langsung berlaku tanpa perlu merestart pod.

    Setelah konfigurasi selesai, Ingress Controller mengidentifikasi alamat IP pertama dalam X-Forwarded-For sebagai alamat IP klien asli dan mempertahankan nilai ini saat meneruskan permintaan.

Optimalisasi lanjutan: Meneruskan alamat IP asli menggunakan header kustom

Dalam arsitektur jaringan kompleks, mengandalkan header standar X-Forwarded-For (XFF) membawa risiko seperti spoofing dan kebingungan IP di berbagai lapisan proxy. Anda dapat menggunakan header HTTP kustom untuk meneruskan alamat IP klien asli guna meningkatkan keamanan dan kontrol.

Contoh berikut menunjukkan cara memperoleh alamat IP klien asli menggunakan header kustom. Arsitektur jaringan yang sesuai ditunjukkan pada gambar berikut.

  1. Konfigurasikan CDN

    Secara default, CDN membawa header permintaan HTTP Ali-Cdn-Real-Ip dalam permintaan back-to-origin, yang menunjukkan alamat IP asli klien saat terhubung ke node CDN. Anda dapat menggunakan Add a custom outbound request header untuk meneruskan alamat IP ini ke WAF. Tabel berikut menunjukkan contoh konfigurasi di konsol CDN.

    Parameter

    Contoh

    Operation

    Add

    Request Header

    Custom back-to-origin request header

    Header Name

    Masukkan nama kustom, misalnya TrueIP

    Header Value

    $http_Ali_Cdn_Real_Ip

    Allow Duplicates

    Not Allowed

    Rule Condition

    Not used

  2. Konfigurasi WAF

    Lakukan dua konfigurasi berikut di konsol WAF:

    • Is a Layer 7 proxy such as Anti-DDoS Proxy or CDN deployed in front of WAF: Aktifkan opsi ini agar WAF dapat mengidentifikasi alamat IP klien asli dengan benar.

    • Enable Traffic Tagging: Aktifkan opsi ini agar server origin dapat memperoleh alamat IP klien asli.

    Untuk informasi lebih lanjut tentang cara mengonfigurasi opsi ini, lihat Real client information.

    Parameter

    Contoh

    Is a Layer 7 proxy such as Anti-DDoS Proxy or CDN deployed in front of WAF

    Pilih Yes, lalu pilih [Recommended] Use the First IP Address in Specified Header Field as Actual IP Address of Client to Prevent X-Forwarded-For Forgery. Masukkan Header Name yang Anda tentukan dalam konfigurasi CDN, misalnya TrueIP.

    Enable Traffic Tagging

    Pilih Originating IP Address, lalu masukkan Header Name yang Anda tentukan dalam konfigurasi CDN, misalnya TrueIP.

  3. Konfigurasikan Origin Server

    Ambil contoh Nginx. Edit file konfigurasi utama nginx.conf dan tambahkan konten berikut ke dalam blok http {}. Untuk informasi lebih lanjut, lihat Konfigurasi Nginx.

    http {
      # Percayai header permintaan dari alamat IP back-to-origin WAF
      # Ganti dengan rentang IP back-to-origin WAF aktual yang diperoleh dari konsol. Setiap rentang harus berada di baris terpisah.
      # Anda harus menyertakan semua rentang back-to-origin WAF. Jika ada yang terlewat, log mungkin tetap menampilkan IP back-to-origin WAF, bukan IP klien asli.
      set_real_ip_from    <ip_range1>;    
      set_real_ip_from    <ip_range2>;   
      ...
      set_real_ip_from    <ip_rangex>;
      
      # Tentukan header permintaan kustom untuk mengekstrak alamat IP asli. Contoh ini menggunakan TrueIP
      real_ip_header      TrueIP;
    }

    Kami menyarankan agar Anda mengonfigurasi security group server origin untuk hanya mengizinkan traffic dari rentang IP back-to-origin WAF. Hal ini memastikan hanya WAF yang dapat berkomunikasi dengan server origin, mencegah penyerang melewati WAF dan langsung mengakses alamat IP publik server origin.

FAQ

Apa perbedaan antara konfigurasi alamat IP asli di server origin (yang dijelaskan dalam topik ini) dan opsi Is a Layer 7 proxy such as Anti-DDoS Proxy or CDN deployed in front of WAF di konsol WAF?

  • Konfigurasi alamat IP asli di server origin (yang dijelaskan dalam topik ini)

    • Tujuan: Setelah Anda menggunakan integrasi CNAME untuk menghubungkan domain ke WAF, konfigurasi ini memungkinkan server origin (seperti Nginx) mencatat alamat IP klien asli dalam log aksesnya (seperti access.log) alih-alih alamat IP back-to-origin WAF.

    • Wajib: Hanya diperlukan jika Anda perlu melihat atau memproses alamat IP klien asli di server origin.

  • Opsi Is a Layer 7 proxy such as Anti-DDoS Proxy or CDN deployed in front of WAF di konsol WAF

    • Skema penggunaan: Proxy Lapisan 7 lainnya (seperti CDN atau Anti-DDoS Pro) ditempatkan di depan WAF.

    • Tujuan: Menginstruksikan WAF untuk mengekstrak alamat IP klien asli dari header permintaan HTTP tertentu (seperti Ali-Cdn-Real-Ip atau X-Forwarded-For) guna memastikan laporan keamanan dan identifikasi serangan didasarkan pada alamat IP sumber asli.

    • Wajib: Hanya diperlukan jika proxy Lapisan 7 ditempatkan di depan WAF. Jika tidak ada proxy frontend, biarkan nilai default No.

Apa itu spoofing X-Forwarded-For dan bagaimana cara mencegahnya?

Spofing X-Forwarded-For (XFF) mengacu pada serangan di mana penyerang membuat atau memalsukan header permintaan X-Forwarded-For dalam permintaan HTTP untuk menyisipkan alamat IP klien palsu, dengan tujuan melewati kontrol akses berbasis IP, audit log, atau kebijakan keamanan. X-Forwarded-For adalah header permintaan non-standar yang dapat diatur secara bebas oleh klien. Jika layanan backend langsung mempercayai field ini tanpa validasi, risiko keamanan akan muncul.

Contoh: Perintah serangan spoofing XFF
Penyerang dapat menggunakan perintah curl untuk memalsukan header X-Forwarded-For, memalsukan alamat IP menjadi 1.2.3.4:

curl -H "X-Forwarded-For: 1.2.3.4" https://example.com/

Untuk mencegah spoofing XFF, gunakan header permintaan tepercaya kustom untuk meneruskan alamat IP asli:
Konfigurasikan CDN atau WAF untuk menggunakan header permintaan HTTP kustom yang telah ditentukan sebelumnya guna meneruskan alamat IP klien asli saat mengirim permintaan kembali ke server origin. Server origin kemudian hanya mengurai header kustom ini. Header permintaan ini disisipkan oleh middleware tepercaya (seperti WAF) dan tidak dapat dikontrol langsung oleh klien, sehingga secara efektif mencegah spoofing.