Ambil alamat IP klien dari header HTTP X-Forwarded-For saat menggunakan Pendengar Lapisan 7 CLB.
Cara kerja
Pendengar Lapisan 7 CLB (HTTP/HTTPS) menyimpan alamat IP klien dalam header HTTP X-Forwarded-For. Server backend dapat mengambil alamat ini setelah dikonfigurasi.
Field X-Forwarded-For memiliki format berikut:
X-Forwarded-For: <alamat IP klien, IP-proxy-server-1, IP-proxy-server-2, ...>
Saat menggunakan metode ini, alamat IP paling kiri dalam daftar adalah alamat IP klien.
CLB menghentikan tugas HTTPS dan berkomunikasi dengan server backend melalui HTTP. Konfigurasikan server backend hanya untuk HTTP, meskipun menggunakan pendengar HTTPS.
Prosedur
Prasyarat
-
Instans CLB dengan pendengar Lapisan 7 telah dibuat. Topik ini menggunakan pendengar HTTP pada Port 80. Buat dan kelola instans CLB. Tambahkan pendengar HTTP.
-
Kelompok server dengan server backend telah ditambahkan ke instans CLB. Topik ini menggunakan kelompok vServer dengan protokol HTTP, instans ECS, dan Port 80. Buat dan kelola kelompok vServer.
Langkah 1: Verifikasi bahwa pendengar menggunakan X-Forwarded-For
-
Masuk ke Konsol Classic Load Balancer (CLB).
-
Pada bilah navigasi atas, pilih wilayah tempat instans ditempatkan.
-
Pada halaman Instances, temukan instans target dan klik ID-nya.
-
Pada halaman Instance Details, klik tab Listener, temukan pendengar Lapisan 7 target, lalu klik ID-nya.
-
Pada halaman detail pendengar, verifikasi bahwa bagian Custom HTTP Header mencakup X-Forwarded-For: Retrieve Client IP.
Secara default, pendengar Lapisan 7 CLB menggunakan header X-Forwarded-For untuk mengambil alamat IP klien. Fitur ini tidak dapat dinonaktifkan.
Langkah 2: Konfigurasikan server backend
-
Bagian ini menjelaskan cara mencatat alamat IP klien dalam log akses server backend (melalui field
X-Forwarded-For). Variabel lapisan koneksi (seperti$remote_addrNginx) tetap menampilkan IP forwarding CLB dan tidak terpengaruh. -
Jika Anda ingin mengganti variabel lapisan koneksi (seperti
$remote_addr) dengan IP klien sebenarnya agar format log yang ada, kontrol akses, dan aturan pembatasan laju tetap berfungsi tanpa modifikasi, lihat Ganti alamat lapisan koneksi dengan IP klien (Nginx dan Apache).
Server Nginx
Lingkungan contoh: CentOS 7.9 dengan Nginx 1.20.1. Konfigurasi Anda mungkin berbeda.
-
Jalankan
nginx -V | grep http_realip_moduleuntuk memeriksa apakah modul http_realip_module telah diinstal. Nginx menggunakan modul ini untuk mengurai catatan X-Forwarded-For.Jika output mencakup
--with-http_realip_module, modul tersebut telah diinstal. Lanjutkan ke langkah berikutnya.Modul http_realip_module tersedia sejak Nginx 1.0.4 (2011). Jika Anda menggunakan versi yang lebih lama, backup konfigurasi Anda dan lakukan upgrade Nginx.
Jika modul http_realip_module belum diinstal, kompilasi ulang Nginx dengan modul tersebut atau instal ulang Nginx menggunakan manajer paket seperti yum.
-
Edit file konfigurasi Nginx. Jalankan
nginx -tuntuk menemukan path file tersebut. Default-nya adalah/etc/nginx/nginx.conf.http { # Pastikan log_format mencakup $http_x_forwarded_for. Variabel ini mencatat nilai X-Forwarded-For. log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # ... } -
Jalankan perintah
sudo nginx -s reloaduntuk memuat ulang konfigurasi Nginx.
Server Apache
Lingkungan contoh: CentOS 7.9 dengan Apache 2.4.6. Konfigurasi Anda mungkin berbeda.
-
Jalankan
httpd -M | grep remoteip_moduleuntuk memeriksa apakah modul remoteip_module telah diinstal. Apache menggunakan modul ini untuk mengurai catatan X-Forwarded-For.Jika output mencakup
remoteip_module (shared), modul tersebut telah diinstal. Lanjutkan ke langkah berikutnya.Modul remoteip_module tersedia sejak Apache 2.4.0 (2012). Jika Anda menggunakan versi yang lebih lama, backup konfigurasi Anda dan lakukan upgrade Apache.
Jika modul remoteip_module belum diinstal, kompilasi ulang Apache dengan modul tersebut atau instal ulang Apache menggunakan manajer paket seperti yum.
-
Edit file konfigurasi Apache. Path default-nya adalah
/etc/httpd/conf/httpd.conf.# ... <IfModule log_config_module> # Tambahkan %{X-Forwarded-For}i untuk mencatat informasi X-Forwarded-For. LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b" common #... </IfModule> # ... -
Jalankan perintah
sudo systemctl restart httpduntuk me-restart layanan Apache.
Server IIS
Lingkungan contoh: Windows Server 2016. Konfigurasi Anda mungkin berbeda.
-
Unduh dan ekstrak file F5XForwardedFor.
-
Berdasarkan arsitektur OS Anda, salin
F5XFFHttpModule.dlldanF5XFFHttpModule.inidari direktorix86\ataux64\ke lokasi yang memiliki izin baca IIS. -
Di Server Manager, buka IIS Manager.
-
Pilih server dan klik ganda Modules.

-
Klik Configure Native Modules, lalu klik Register.

-
Tambahkan file .dll yang telah diunduh.
-
Masukkan nama file, pilih path-nya, lalu klik OK.

-
Sistem secara otomatis memilih modul yang baru didaftarkan. Klik OK.

-
-
Kembali ke halaman utama server dan klik ganda modul Logging. Konfigurasikan format log untuk mencatat field
X-Forwarded-For.-
Klik Select Fields.

-
Di pojok kiri bawah, klik Add Field, tambahkan field log, lalu klik OK.

-
Di pojok kanan atas, klik Apply untuk menyimpan perubahan.
-
-
Restart server IIS agar konfigurasi berlaku.
Langkah 3: Verifikasi pengambilan IP klien
Ikuti langkah-langkah sesuai jenis server Anda.
Server Nginx
Periksa log akses Nginx untuk memverifikasi pengambilan IP klien.
Path default log akses Nginx adalah /var/log/nginx/access.log.
IP paling kiri dalam field $http_x_forwarded_for adalah alamat IP klien.

Server Apache
Periksa log akses Apache untuk memverifikasi pengambilan IP klien.
Path default log akses Apache adalah /var/log/httpd/access_log.
IP paling kiri dalam field %{X-Forwarded-For}i adalah alamat IP klien.

Server IIS
Periksa log IIS untuk memverifikasi pengambilan IP klien.
Temukan path file log di modul Logging.

IP paling kiri dalam field X-Forwarded-For adalah alamat IP klien.

FAQ
Akses sering dari IP yang dimulai dengan 100
Sistem CLB meneruskan permintaan eksternal ke instans ECS backend dan melakukan pemeriksaan kesehatan. Kedua jenis permintaan tersebut berasal dari sistem.
Sistem CLB menggunakan blok CIDR 100.64.0.0/10 yang dicadangkan. Blok ini eksklusif untuk Alibaba Cloud dan tidak menimbulkan risiko keamanan, tetapi menjelaskan akses sering dari IP yang dimulai dengan 100.
Pastikan iptables dan perangkat lunak keamanan lain di server Anda tidak memblokir blok CIDR ini.
Mendapatkan IP klien dengan WAF, CDN, dan GA
Jika traffic melewati WAF, CDN, atau Global Accelerator (GA) sebelum mencapai CLB, Anda tetap dapat menggunakan X-Forwarded-For untuk mengambil IP klien. Layanan-layanan ini meneruskan X-Forwarded-For secara default tanpa konfigurasi tambahan.
Untuk mencegah spoofing X-Forwarded-For, gunakan header kustom untuk mencatat IP klien. Misalnya, dalam arsitektur client > CDN > WAF > CLB > ECS, CDN dapat meneruskan header Ali-Cdn-Real-Ip. Di WAF, pilih Specify header field sebagai metode penentuan IP klien dan atur headernya menjadi Ali-Cdn-Real-Ip. Atur variabel log Nginx menjadi $http_Ali_Cdn_Real_Ip.
Langkah keamanan tambahan:
-
Validasi dan filter header XFF di server backend. Periksa format dan alamat IP-nya, serta tolak nilai yang tidak valid atau mencurigakan.
-
Gunakan firewall dan ACL antara CLB dan server backend untuk memfilter permintaan serangan yang menargetkan header XFF.
-
Gunakan enkripsi SSL/TLS untuk melindungi komunikasi, termasuk transmisi header XFF, dari serangan man-in-the-middle.
Mendapatkan IP klien di lingkungan ACK
Dalam kluster Container Service for Kubernetes (ACK), metodenya sama tetapi beberapa detail operasional berbeda. FAQ manajemen jaringan.
Perbandingan pendengar Lapisan 4 vs Lapisan 7: perilaku IP sumber
Saat permintaan klien melewati CLB, IP sumber yang terlihat oleh server backend bergantung pada jenis pendengar:
|
Jenis pendengar |
Penanganan IP sumber |
|
|
Lapisan 4 (TCP/UDP) |
CLB meneruskan langsung IP sumber klien |
Alamat IP asal klien |
|
Lapisan 7 (HTTP/HTTPS) |
CLB bertindak sebagai reverse proxy dan membuat koneksi TCP baru dengan server backend |
IP forwarding internal CLB (rentang 100.64.0.0/10) |
Dengan pendengar Lapisan 7, CLB secara otomatis menambahkan header permintaan HTTP X-Forwarded-For untuk membawa alamat IP asal klien. Jika $remote_addr dalam log akses Nginx menampilkan IP forwarding internal CLB dalam rentang 100.64.0.0/10 alih-alih IP klien, hal ini merupakan perilaku yang diharapkan.
Ganti alamat lapisan koneksi dengan IP klien (Nginx dan Apache)
Nginx
Secara default, $remote_addr dalam log Nginx mencatat IP forwarding internal CLB (rentang 100.64.0.0/10). Untuk menggantinya dengan IP klien sebenarnya agar format log yang ada, kontrol akses, dan aturan pembatasan laju tetap berfungsi tanpa modifikasi, gunakan modul ngx_http_realip_module:
-
Jalankan
nginx -V | grep http_realip_moduleuntuk memverifikasi bahwa modul telah diinstal. -
Tambahkan berikut ini ke blok
httpdalam file konfigurasi (default:/etc/nginx/nginx.conf):set_real_ip_from 100.64.0.0/10; real_ip_header X-Forwarded-For; real_ip_recursive on; -
Jalankan
sudo nginx -tuntuk memvalidasi konfigurasi, lalu jalankansudo nginx -s reloaduntuk memuat ulang.
Setelah konfigurasi berlaku, periksa log akses (default:/var/log/nginx/access.log) untuk memastikan bahwa$remote_addrkini menampilkan IP klien sebenarnya.
Jika traffic melewati beberapa proxy seperti WAF atau CDN, tambahkan rentang IP origin setiap lapisan proxy ke set_real_ip_from.
Permintaan pemeriksaan kesehatan (HEAD, tanpaX-Forwarded-For) tetap akan menampilkan$remote_addrsebagai100.64.0.0/10, yang merupakan perilaku yang diharapkan.
Apache
Secara default, %h dalam log Apache mencatat IP forwarding internal CLB. Untuk menggantinya dengan IP klien sebenarnya agar format log yang ada dan aturan kontrol akses Require ip tetap berfungsi tanpa modifikasi, gunakan modul bawaan mod_remoteip di Apache 2.4:
-
Jalankan
httpd -M | grep remoteip_moduleuntuk memverifikasi bahwa modul telah diinstal. -
Tambahkan berikut ini ke file konfigurasi (default:
/etc/httpd/conf/httpd.conf):RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 100.64.0.0/10 -
Jalankan
sudo systemctl restart httpduntuk me-restart layanan Apache.
Setelah konfigurasi berlaku, periksa log akses (default:/var/log/httpd/access_log) untuk memastikan bahwa%hkini menampilkan IP klien sebenarnya.
Jika traffic melewati beberapa proxy seperti WAF atau CDN, tambahkan rentang IP origin setiap lapisan proxy ke RemoteIPTrustedProxy.
Permintaan pemeriksaan kesehatan (HEAD, tanpaX-Forwarded-For) tetap akan menampilkan%hsebagai100.64.0.0/10, yang merupakan perilaku yang diharapkan.
Dokumen terkait
Jenis load balancer lain menggunakan metode yang berbeda:
-
Application Load Balancer (ALB): menggunakan X-Forwarded-For. Mengambil alamat IP klien dengan menggunakan ALB.
-
Network Load Balancer (NLB): menggunakan kelompok server atau protokol Proxy. Mengambil alamat IP klien dengan menggunakan NLB.
-
Pendengar Lapisan 4 CLB: mengambil langsung atau menggunakan protokol Proxy. Mengambil alamat IP klien dengan menggunakan pendengar Lapisan 4 CLB.