全部产品
Search
文档中心

Server Load Balancer:Aktifkan pendengar Lapisan 7 untuk mempertahankan alamat IP klien dan meneruskannya ke server backend

更新时间:Jul 02, 2025

Topik ini menjelaskan cara mengaktifkan pendengar Lapisan 7 dari Classic Load Balancer (CLB) untuk mempertahankan alamat IP klien menggunakan header permintaan X-Forwarded-For.

Cara Kerja X-Forwarded-For

Pendengar HTTP dan HTTPS mendukung header X-Forwarded-For. Anda dapat mengonfigurasi server backend untuk mengambil alamat IP klien dari header tersebut.

Format X-Forwarded-For:

X-Forwarded-For: <Alamat IP Klien, Alamat IP Proxy Server 1, Alamat IP Proxy Server 2, ...>

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

Catatan

Pendengar HTTPS CLB mengenkripsi permintaan pada CLB. Namun, CLB berkomunikasi dengan server backend melalui HTTP. Oleh karena itu, server backend menggunakan HTTP meskipun pendengar HTTPS digunakan.

Prosedur

Prasyarat

  • Sebuah instance CLB telah dibuat. Sebuah pendengar Lapisan 7 telah dibuat untuk instance CLB. Dalam contoh ini, pendengar HTTP yang menggunakan port 80 digunakan. Untuk informasi lebih lanjut, lihat Membuat dan mengelola instance CLB dan Menambahkan pendengar HTTP.

  • Sebuah grup server telah dibuat untuk instance CLB. Server backend telah ditambahkan ke grup server. Dalam contoh ini, sebuah vServer group yang berisi Instance ECS dan menggunakan HTTP serta port 80 digunakan. Untuk informasi lebih lanjut, lihat Membuat dan mengelola grup vServer.

Langkah 1: Periksa apakah pemeliharaan IP klien berdasarkan X-Forwarded-For diaktifkan untuk pendengar

  1. Masuk ke Konsol CLB.

  2. Di bilah navigasi atas, pilih wilayah tempat instance CLB diterapkan.

  3. Di halaman Instances, klik ID instance CLB yang ingin Anda kelola.

  4. Di halaman detail instance, klik tab Listener dan klik ID pendengar Lapisan 7 yang ingin Anda kelola.

  5. Di halaman detail pendengar, periksa apakah Custom HTTP Header mencakup opsi X-Forwarded-For: Retrieve Client IP.

    Catatan

    Secara default, pendengar Lapisan 7 CLB menggunakan header X-Forwarded-For untuk mempertahankan alamat IP klien. Header ini tidak dapat dinonaktifkan.

Langkah 2: Konfigurasikan server backend

Prosedur berikut menunjukkan cara mengonfigurasi server backend. Pilih prosedur berdasarkan jenis server backend yang Anda gunakan.

Konfigurasikan server NGINX

Dalam contoh ini, sistem operasi CentOS 7.9 dan NGINX 1.20.1 digunakan. Sesuaikan konfigurasi berdasarkan lingkungan yang Anda gunakan.

  1. Jalankan perintah nginx -V | grep http_realip_module di server NGINX untuk memeriksa apakah modul http_realip_module terinstal. Server NGINX menggunakan modul ini untuk mengurai nilai X-Forwarded-For.

    Jika --with-http_realip_module termasuk dalam output, itu menunjukkan bahwa http_realip_module terinstal di server NGINX dan Anda dapat melanjutkan ke langkah berikutnya.

    Contoh output yang menunjukkan bahwa http_realip_module terinstal

    nginx version: nginx/1.20.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
    built with OpenSSL 1.1.1k  FIPS 25 Mar 2021
    TLS SNI support enabled
    configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
    
    Catatan
    • NGINX 1.0.4, yang dirilis pada tahun 2011, dan versi setelahnya mendukung modul http_realip_module. Jika versi NGINX Anda lebih lama dari 1.0.4, kami sarankan Anda mencadangkan data dan meningkatkan ke versi yang lebih baru.

    • Jika modul http_realip_module tidak terinstal di server NGINX, kompilasi dan instal ulang NGINX, lalu instal http_realip_module. Kami sarankan Anda menggunakan manajer paket seperti YUM untuk menginstal dan mengelola NGINX. Manajer paket menyederhanakan proses.

  2. Ubah dan simpan file konfigurasi NGINX. Blok kode berikut menunjukkan contohnya. Jalankan perintah nginx -t untuk menanyakan jalur file konfigurasi, yang secara default adalah /etc/nginx/nginx.conf. Jalur tersebut mungkin bervariasi berdasarkan lingkungan yang Anda gunakan.

    http {
      # Tetapkan variabel $http_x_forwarded_for, yang digunakan untuk 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"';
      
      # ...
    }
    
  3. Jalankan perintah sudo nginx -s reload untuk memuat ulang file konfigurasi NGINX.

Konfigurasikan server Apache

Dalam contoh ini, sistem operasi CentOS 7.9 dan Apache 2.4.6 digunakan. Sesuaikan konfigurasi berdasarkan lingkungan yang Anda gunakan.

  1. Jalankan perintah httpd -M | grep remoteip_module di server Apache untuk memeriksa apakah modul remoteip_module terinstal. Apache menggunakan modul ini untuk mengurai nilai X-Forwarded-For.

    Jika remoteip_module (shared) termasuk dalam output, itu menunjukkan bahwa modul tersebut terinstal di server Apache dan Anda dapat melanjutkan ke langkah berikutnya.

    Catatan
    • Apache 2.4.0, yang dirilis pada tahun 2012, dan versi setelahnya mendukung modul remoteip_module. Jika versi Apache Anda lebih lama dari 2.4.0, kami sarankan Anda mencadangkan data dan meningkatkan ke versi yang lebih baru.

    • Jika modul remoteip_module tidak terinstal di server Apache, kompilasi dan instal ulang Apache, lalu instal remoteip_module. Kami sarankan Anda menggunakan manajer paket seperti YUM untuk menginstal dan mengelola Apache. Manajer paket menyederhanakan proses.

  2. Ubah dan simpan file konfigurasi Apache. Blok kode berikut menunjukkan contohnya. Jalur default file konfigurasi adalah /etc/httpd/conf/httpd.conf. Jalur tersebut mungkin bervariasi berdasarkan lingkungan yang Anda gunakan.

    # ...
    <IfModule log_config_module>
    	# Tambahkan direktif LogFormat %{X-Forwarded-For}i, yang digunakan untuk mencatat informasi tentang 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>
    # ...

  3. Jalankan perintah sudo systemctl restart httpd untuk memulai ulang Apache.

Konfigurasikan server IIS

Dalam contoh ini, sistem operasi Windows Server 2016 digunakan. Sesuaikan konfigurasi berdasarkan lingkungan yang Anda gunakan.

  1. Unduh dan ekstrak file F5XForwardedFor.

  2. Salin file F5XFFHttpModule.dll dan F5XFFHttpModule.ini dari direktori x86\ atau x64 ke direktori di server IIS. Pastikan proses IIS memiliki izin baca dan tulis di direktori tersebut.

  3. Buka IIS Manager di Server Manager.

  4. Pilih server IIS dan klik dua kali Modules.

  5. Klik Configure Native Modules, lalu klik Register di kotak dialog yang muncul.

  6. Tambahkan file .dll yang diunduh.

    1. Masukkan nama file, pilih jalur, lalu klik OK.

    2. Modul yang akan didaftarkan dipilih secara otomatis. Klik OK.

  7. Kembali ke halaman utama IIS Manager dan klik dua kali Logging. Konfigurasikan format log untuk mencatat informasi tentang X-Forwarded-For.

    1. Klik Select Fields.

      image.png

    2. Klik Add Field di pojok kiri bawah, tambahkan bidang berikut, lalu klik OK.

      image.png

    3. Klik Apply di panel Actions di sebelah kanan.

  8. Mulai ulang server IIS dan tunggu hingga konfigurasi berlaku.

Langkah 3: Uji apakah server backend dapat mengambil alamat IP klien

Prosedur berikut menunjukkan cara menjalankan pengujian. Pilih prosedur berdasarkan jenis server backend yang Anda gunakan.

Server NGINX

Jika Anda menggunakan server NGINX, Anda dapat memeriksa log NGINX untuk menentukan apakah server backend dapat mengambil alamat IP klien.

Jalur default log NGINX adalah /var/log/nginx/access.log.

Dalam setiap entri log, alamat IP paling kiri dalam variabel $http_x_forwarded_for adalah alamat IP klien.

image.png

Server Apache

Jika Anda menggunakan server Apache, Anda dapat memeriksa log Apache untuk menentukan apakah server backend dapat mengambil alamat IP klien.

Jalur default log Apache adalah /var/log/httpd/access_log.

Dalam setiap entri log, alamat IP paling kiri dalam variabel %{X-Forwarded-For}i adalah alamat IP klien.

image.png

Server IIS

Jika Anda menggunakan server IIS, Anda dapat memeriksa log IIS untuk menentukan apakah server backend dapat mengambil alamat IP klien.

Anda dapat menemukan jalur ke file log di modul Logging.

image.png

Dalam setiap entri log, alamat IP paling kiri dalam X-Forwarded-For adalah alamat IP klien.

image.png

FAQ

Mengapa alamat IP yang dimulai dengan 100 sering mengakses instance ECS backend?

CLB meneruskan permintaan eksternal ke instance ECS backend menggunakan alamat IP pribadi server sistem. CLB juga mengakses instance ECS untuk melakukan pemeriksaan kesehatan dan memantau ketersediaan layanan.

Blok CIDR sistem CLB adalah 100.64.0.0/10, yang dicadangkan oleh Alibaba Cloud. Untuk mencegah masalah keamanan, blok CIDR ini tidak dialokasikan ke elemen jaringan lainnya. Akibatnya, instance ECS backend diakses oleh alamat IP yang dimulai dengan 100.

Untuk memastikan ketersediaan layanan, kami sarankan Anda menambahkan aturan keamanan yang mengizinkan akses dari alamat IP ini ke semua server backend.

Bagaimana CLB mempertahankan alamat IP klien saat digunakan bersama dengan Web Application Firewall (WAF), Content Delivery Network (CDN), atau Global Accelerator (GA)?

Jika permintaan disaring oleh WAF, CDN, atau GA sebelum mencapai CLB, Anda dapat menggunakan header X-Forwarded-For untuk mempertahankan alamat IP klien. WAF, CDN, dan GA dapat meneruskan header X-Forwarded-For ke server backend secara default. Tidak diperlukan konfigurasi tambahan.

Jika Anda ingin mencegah spoofing X-Forwarded-For, yang dapat membahayakan keamanan layanan, Anda dapat menentukan header untuk mencatat alamat IP klien. Misalnya, jika permintaan melewati klien, CDN, WAF, CLB, dan ECS, dan CDN meneruskan header Ali-Cdn-Real-Ip ke server backend, Anda dapat mengaktifkan Ali-Cdn-Real-Ip untuk mencatat alamat IP klien dan menambahkan variabel $http_Ali_Cdn_Real_Ip ke file konfigurasi NGINX. Alamat IP yang dicatat oleh $http_Ali_Cdn_Real_Ip adalah alamat IP klien.

Anda juga dapat mengambil langkah-langkah berikut untuk meningkatkan keamanan sistem:

  • Autentikasi header X-Forwarded-For: Aktifkan server backend untuk menyaring permintaan yang berisi header X-Forwarded-For yang tidak valid atau tidak tepercaya. Anda dapat memeriksa format dan alamat IP header X-Forwarded-For untuk menentukan apakah itu valid dan tepercaya.

  • Aktifkan firewall dan daftar kontrol akses (ACL): Terapkan firewall dan ACL antara CLB dan server backend-nya untuk menyaring permintaan jahat yang dapat memanipulasi header X-Forwarded-For.

  • Aktifkan enkripsi SSL/TLS: Aktifkan enkripsi SSL/TLS untuk mengenkripsi transmisi data, termasuk transmisi header X-Forward-For. Langkah ini mencegah serangan man-in-the-middle (MITM) dan pemalsuan data.

Bagaimana CLB mempertahankan alamat IP klien saat diterapkan dalam kluster Container Service for Kubernetes (ACK)?

CLB dapat mempertahankan alamat IP klien saat diterapkan dalam kluster ACK. Pemeliharaan IP klien mungkin diimplementasikan dengan cara yang berbeda. Untuk informasi lebih lanjut, lihat Bagaimana cara mengonfigurasi pod untuk mendapatkan alamat IP asli klien?

Referensi

Application Load Balancer (ALB), Classic Load Balancer (CLB), dan NLB menggunakan metode berbeda untuk mempertahankan alamat IP klien.