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.
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
Masuk ke Konsol CLB.
Di bilah navigasi atas, pilih wilayah tempat instance CLB diterapkan.
Di halaman Instances, klik ID instance CLB yang ingin Anda kelola.
Di halaman detail instance, klik tab Listener dan klik ID pendengar Lapisan 7 yang ingin Anda kelola.
Di halaman detail pendengar, periksa apakah Custom HTTP Header mencakup opsi X-Forwarded-For: Retrieve Client IP.
CatatanSecara 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.
Jalankan perintah
nginx -V | grep http_realip_moduledi 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_moduletermasuk dalam output, itu menunjukkan bahwa http_realip_module terinstal di server NGINX dan Anda dapat melanjutkan ke langkah berikutnya.CatatanNGINX 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.
Ubah dan simpan file konfigurasi NGINX. Blok kode berikut menunjukkan contohnya. Jalankan perintah
nginx -tuntuk 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"'; # ... }Jalankan perintah
sudo nginx -s reloaduntuk 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.
Jalankan perintah
httpd -M | grep remoteip_moduledi 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.CatatanApache 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.
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> # ...Jalankan perintah
sudo systemctl restart httpduntuk memulai ulang Apache.
Konfigurasikan server IIS
Dalam contoh ini, sistem operasi Windows Server 2016 digunakan. Sesuaikan konfigurasi berdasarkan lingkungan yang Anda gunakan.
Unduh dan ekstrak file F5XForwardedFor.
Salin file
F5XFFHttpModule.dlldanF5XFFHttpModule.inidari direktorix86\ataux64ke direktori di server IIS. Pastikan proses IIS memiliki izin baca dan tulis di direktori tersebut.Buka IIS Manager di Server Manager.
Pilih server IIS dan klik dua kali Modules.

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

Tambahkan file .dll yang diunduh.
Masukkan nama file, pilih jalur, lalu klik OK.

Modul yang akan didaftarkan dipilih secara otomatis. Klik OK.
Kembali ke halaman utama IIS Manager dan klik dua kali Logging. Konfigurasikan format log untuk mencatat informasi tentang
X-Forwarded-For.Klik Select Fields.

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

Klik Apply di panel Actions di sebelah kanan.
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.

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.

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.

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

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.
ALB menggunakan header X-Forwarded-For untuk mempertahankan alamat IP klien. Untuk informasi lebih lanjut, lihat Aktifkan ALB untuk mempertahankan alamat IP klien dan meneruskannya ke server backend.
NLB menggunakan fitur pemeliharaan IP klien dari grup server backend atau protokol Proxy untuk mempertahankan alamat IP klien. Untuk informasi lebih lanjut, lihat Aktifkan NLB untuk mempertahankan alamat IP klien dan meneruskannya ke server backend.
Pendengar Lapisan 4 CLB dapat langsung mempertahankan alamat IP klien, atau menggunakan protokol Proxy untuk mempertahankan alamat IP klien. Untuk informasi lebih lanjut, lihat Aktifkan pendengar Lapisan 4 untuk mempertahankan alamat IP klien.