All Products
Search
Document Center

Web Application Firewall:Mengambil IP klien asli dari header HTTP

Last Updated:Sep 12, 2026

Saat Anda menggunakan integrasi CNAME untuk Web Application Firewall (WAF), alamat IP sumber dari permintaan yang diterima oleh server origin adalah IP proxy hop terakhir, bukan IP klien asli. WAF menambahkan header permintaan HTTP X-Forwarded-For untuk meneruskan IP klien asli ke server Anda. Topik ini menjelaskan cara mengonfigurasi server web backend agar mengekstrak IP klien dari header ini sehingga log dan audit keamanan Anda berfungsi dengan benar.

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, field header X-Forwarded-For secara otomatis ditambahkan. 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 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). Kemudian, 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 header X-Forwarded-For. Ikuti 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 minimalis mungkin tidak menyertainya.

Tambahkan modul realip (hanya jika belum ada)

Metode 1: Instal ulang menggunakan manajer paket sistem

# Untuk Alibaba Cloud Linux / CentOS / RHEL
sudo yum reinstall nginx -y
# Untuk Ubuntu / Debian
sudo apt install --reinstall nginx-core nginx-full

Metode 2: Kompilasi dari kode sumber

  1. Instal dependensi.

    # Untuk Alibaba Cloud Linux / CentOS / RHEL
    sudo yum install -y gcc pcre-devel zlib-devel openssl-devel
    # Untuk 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 untuk mengunduh kode sumber yang sesuai.
    nginx -v
    # Periksa argumen configure saat ini.
    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
    # Perintah make membuat binary nginx baru di direktori objs/.
    # Backup binary lama.
    sudo mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
    # Ganti binary lama dengan yang baru.
    sudo cp objs/nginx /usr/local/nginx/sbin/nginx
    # Dapatkan PID proses master lama.
    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 worker lama secara graceful.
    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 permintaan yang dikirim oleh WAF.
      # Ganti placeholder berikut dengan rentang IP back-to-origin WAF yang Anda peroleh dari konsol.
      # Anda harus menambahkan semua rentang IP. Jika ada yang terlewat, beberapa permintaan mungkin tetap mencatat IP WAF, bukan IP klien asli.
      set_real_ip_from    <ip_range1>;    
      set_real_ip_from    <ip_range2>;   
      ...
      set_real_ip_from    <ip_rangex>;
      # Beri tahu Nginx untuk menggunakan header X-Forwarded-For guna menemukan IP klien 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 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 sebelah kiri, perluas node server dan pilih website target (misalnya, Default Web Site).

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

  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 bahwa IP klien asli diteruskan dalam header X-Forwarded-For.
    RemoteIPHeader X-Forwarded-For
    # Tambahkan rentang IP back-to-origin WAF sebagai proxy tepercaya. 
    # Ganti dengan rentang IP aktual Anda.
    RemoteIPTrustedProxy 100.xx.xx.0/10
    RemoteIPTrustedProxy 11.xx.xx.0/13
    RemoteIPTrustedProxy 112.xx.xx.0/16
  3. Arahkan ke bagian format log dalam file konfigurasi dan ubah %h menjadi %a. %a merepresentasikan alamat IP remote dari koneksi (alamat IP klien asli yang dikoreksi oleh mod_remoteip), sedangkan %h adalah alamat IP koneksi asli (alamat IP node WAF). Contoh konfigurasi yang telah dimodifikasi ditunjukkan di bawah ini.

    <IfModule log_config_module>
        #
        # Direktif berikut mendefinisikan beberapa nama format untuk digunakan dengan
        # direktif CustomLog (lihat di bawah).
        #
        LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
        LogFormat "%a %l %u %t \"%r\" %>s %b" common
        <IfModule logio_module>
          # Anda perlu mengaktifkan mod_logio.c untuk menggunakan %I dan %O
          LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
        </IfModule>
        #
        # Lokasi dan format file log akses (Common Logfile Format).
        # Jika Anda tidak mendefinisikan file log akses apa pun di dalam container <VirtualHost>
        # , log akan dicatat di sini. Sebaliknya, jika Anda *mendefinisikan*
        # file log akses per-<VirtualHost>, transaksi akan
        # dicatat di sana dan *tidak* di file ini.
        #
        #CustomLog "logs/access_log" common
        #
        # Jika Anda lebih suka file log dengan informasi akses, agen, dan referer
        # (Combined Logfile Format), Anda dapat menggunakan direktif berikut.
        #
        CustomLog "logs/access_log" combined
    </IfModule>
  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 bahwa IP klien asli diteruskan dalam header X-Forwarded-For.
    RemoteIPHeader X-Forwarded-For
    # Tambahkan rentang IP back-to-origin WAF sebagai proxy tepercaya.
    # Ganti dengan rentang IP aktual Anda.
    RemoteIPTrustedProxy 100.xx.xx.0/10
    RemoteIPTrustedProxy 11.xx.xx.0/13
    RemoteIPTrustedProxy 112.xx.xx.0/16
  4. Arahkan ke bagian format log dalam file konfigurasi dan ubah %h menjadi %a. %a merepresentasikan alamat IP klien asli yang dikoreksi oleh mod_remoteip, sedangkan %h merepresentasikan alamat IP koneksi asli (alamat IP node WAF). Contoh konfigurasi yang telah dimodifikasi ditunjukkan di bawah ini.

    #
    LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
    LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%a %l %u %t \"%r\" %>s %O" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
  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. Ubah 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 secara otomatis 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.

Optimasi lanjutan: Meneruskan alamat IP asli menggunakan header kustom

Dalam arsitektur jaringan yang 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 menggunakan header kustom untuk mengambil IP klien asli.

  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. Konfigurasikan WAF

    Lengkapi 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, dan 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 placeholder berikut dengan rentang IP back-to-origin WAF yang Anda peroleh dari konsol.
      # Anda harus menambahkan semua rentang IP. Jika ada yang terlewat, beberapa permintaan mungkin tetap mencatat IP WAF, bukan IP klien asli.
      set_real_ip_from    <ip_range1>;    
      set_real_ip_from    <ip_range2>;   
      ...
      set_real_ip_from    <ip_rangex>;
      # Beri tahu Nginx untuk mengambil IP asli dari header kustom Anda, TrueIP dalam contoh ini.
      real_ip_header      TrueIP;
    }

    Kami menyarankan Anda mengonfigurasi security group server origin agar hanya mengizinkan traffic dari rentang IP back-to-origin WAF. Hal ini memastikan bahwa 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 (diuraikan 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 (diuraikan 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 untuk 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.