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 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 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_moduleJika output berisi
with-http_realip_module, modul tersebut telah terinstal. Lewati ke Konfigurasi Nginx untuk mempercayai rentang IP back-to-origin WAF.Jika tidak ada output, Nginx saat ini tidak dikompilasi dengan modul ini. Lanjutkan ke Menambahkan 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 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
-
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 -
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. 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_module-
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
-
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 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; } 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 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 sebelah 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.conf-
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 -
Arahkan ke bagian format log dalam file konfigurasi dan ubah
%hmenjadi%a.%amerepresentasikan alamat IP remote dari koneksi (alamat IP klien asli yang dikoreksi olehmod_remoteip), sedangkan%hadalah 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> 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.conf-
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 -
Arahkan ke bagian format log dalam file konfigurasi dan ubah
%hmenjadi%a.%amerepresentasikan alamat IP klien asli yang dikoreksi olehmod_remoteip, sedangkan%hmerepresentasikan 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 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.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"/>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 secara otomatis 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.
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.
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
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.-
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 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-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 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.