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 dan catat semua rentang IP back-to-origin WAF untuk konfigurasi selanjutnya.
Langkah 2: Konfigurasi server origin
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_moduleJika output berisi
with-http_realip_module, berarti modul tersebut telah terinstal. Lewati ke Konfigurasi Nginx untuk mempercayai rentang IP back-to-origin WAF.Jika tidak ada output, berarti Nginx saat ini tidak dikompilasi dengan modul ini. Lanjutkan ke Tambahkan modul realip.
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-fullMetode 2: Kompilasi dari kode sumber
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-devPeriksa 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.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.0Konfigurasikan argumen kompilasi. Salin argumen asli dari Langkah 2 dan tambahkan
--with-http_realip_moduledi akhir../configure \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_moduleKompilasi 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
Edit file konfigurasi utama
nginx.conf(lokasi default:/etc/nginx/nginx.conf) dan tambahkan konten berikut ke dalam blokhttp {}.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; }Muat ulang konfigurasi Nginx:
nginx -t && nginx -s reload
Verifikasi konfigurasi
Akses website. Ganti
http://your-domain.com/dengan nama domain yang terhubung ke WAF.curl http://your-domain.com/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.
Buka IIS Manager. Di pohon Connections di sisi kiri, perluas node server dan pilih website target (misalnya,
Default Web Site).Di panel Features View di sebelah kanan, klik ganda ikon Logging.

Di bagian Log Files, pastikan Format diatur ke W3C (nilai default). Jika format lain dipilih, ubah ke W3C.
Di bagian Log Files, klik Select Fields....
Di bagian bawah kotak dialog yang muncul, klik Add Field....
Di kotak dialog Add Custom Field, masukkan informasi berikut dan klik OK.
Parameter
Deskripsi
Field Name
Masukkan
X-FORWARDED-FORSource Type
Pilih
Request HeaderSource
Masukkan
X-Forwarded-ForKlik OK untuk menyimpan field kustom.
Klik OK lagi untuk menutup jendela field logging, lalu klik Apply di panel Actions untuk menyimpan perubahan.
Restart IIS agar perubahan berlaku.
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
Edit file konfigurasi utama Apache.
sudo vim /etc/httpd/conf/httpd.confTambahkan 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/16Temukan bagian format log dalam file konfigurasi, lalu ubah
%hmenjadi%a.%amerepresentasikan alamat IP remote dari koneksi (alamat IP klien asli setelah dikoreksi olehmod_remoteip), sedangkan%hmerepresentasikan alamat IP koneksi asli (alamat IP node WAF). Gambar berikut menunjukkan contoh yang telah dimodifikasi.
Restart Apache agar perubahan berlaku.
sudo systemctl restart httpdAkses website untuk memverifikasi konfigurasi, dan lihat log akses. Alamat IP klien asli seharusnya ditampilkan.
tail -f /var/log/httpd/access_log
Ubuntu / Debian
Aktifkan modul
remoteip.sudo a2enmod remoteipEdit file konfigurasi utama Apache.
sudo vim /etc/apache2/apache2.confTambahkan 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/16Temukan bagian format log dalam file konfigurasi, lalu ubah
%hmenjadi%a.%amerepresentasikan alamat IP remote dari koneksi (alamat IP klien asli setelah dikoreksi olehmod_remoteip), sedangkan%hmerepresentasikan alamat IP koneksi asli (alamat IP node WAF). Gambar berikut menunjukkan contoh yang telah dimodifikasi.
Restart Apache agar perubahan berlaku.
sudo systemctl restart apache2Akses 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.
Buka direktori instalasi Tomcat dan buka file konfigurasi
tomcat/conf/server.xml.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"/>Restart Tomcat.
sudo systemctl restart tomcatAkses 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.
Edit ConfigMap dari Ingress Controller:
kubectl -n kube-system edit cm nginx-configurationTambahkan item konfigurasi berikut ke field
data:compute-full-forwarded-for: "true" forwarded-for-header: "X-Forwarded-For" use-forwarded-headers: "true"Simpan dan keluar. Konfigurasi akan langsung berlaku tanpa perlu merestart pod.
Setelah konfigurasi selesai, Ingress Controller mengidentifikasi alamat IP pertama dalam
X-Forwarded-Forsebagai 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.
Konfigurasikan CDN
Secara default, CDN membawa header permintaan HTTP
Ali-Cdn-Real-Ipdalam 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
TrueIPHeader Value
$http_Ali_Cdn_Real_IpAllow Duplicates
Not Allowed
Rule Condition
Not used
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.Konfigurasikan Origin Server
Ambil contoh Nginx. Edit file konfigurasi utama
nginx.confdan tambahkan konten berikut ke dalam blokhttp {}. 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-IpatauX-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.