Saat menggunakan pendengar Lapisan 7 Classic Load Balancer (CLB) untuk meneruskan lalu lintas, Anda dapat mengambil alamat IP klien dari field X-Forwarded-For dalam Header HTTP.
Cara kerja
Load balancing lapisan 7 (untuk HTTP atau HTTPS) menggunakan field X-Forwarded-For dalam Header HTTP untuk mempertahankan alamat IP klien. Setelah server backend dikonfigurasi, server tersebut dapat mengambil alamat IP ini.
Field X-Forwarded-For memiliki format berikut:
X-Forwarded-For: <alamat IP klien, IP-proxy-server-1, IP-proxy-server-2, ...>
Dengan metode ini, alamat IP paling kiri dalam daftar merupakan alamat IP klien.
CLB menangani enkripsi HTTPS dan berkomunikasi dengan server backend melalui HTTP. Oleh karena itu, Anda hanya perlu mengonfigurasi server backend untuk HTTP, meskipun menggunakan pendengar HTTPS.
Prosedur
Prasyarat
-
Anda telah membuat instans CLB dan menambahkan pendengar Lapisan 7 ke dalamnya. Topik ini menggunakan pendengar HTTP pada port 80 sebagai contoh. Untuk informasi selengkapnya, lihat Buat dan kelola instans CLB dan Tambahkan pendengar HTTP.
-
Anda telah membuat kelompok server untuk instans CLB dan menambahkan server backend. Topik ini menggunakan kelompok vServer dengan protokol HTTP, instans ECS sebagai server backend, dan port 80 sebagai port aplikasi sebagai contoh. Untuk informasi selengkapnya, lihat 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 yang dituju dan klik ID-nya.
-
Pada halaman Instance Details, klik tab Listener, temukan pendengar Lapisan 7 yang dituju, lalu klik ID-nya.
-
Pada halaman detail pendengar, verifikasi bahwa bagian Custom HTTP Header mencakup X-Forwarded-For: Retrieve Client IP.
CatatanSecara 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
Ikuti langkah-langkah berikut sesuai jenis server Anda.
Server Nginx
Bagian ini menggunakan CentOS 7.9 dan Nginx 1.20.1 sebagai contoh. Konfigurasi aktual dapat berbeda tergantung lingkungan Anda.
-
Jalankan perintah
nginx -V | grep http_realip_moduleuntuk memeriksa apakah modul http_realip_module telah diinstal pada server Nginx. Nginx menggunakan modul ini untuk mengurai catatan X-Forwarded-For.Modul tersebut telah diinstal jika output mencakup
--with-http_realip_module. Jika demikian, Anda dapat melanjutkan ke langkah berikutnya.Catatan-
Modul http_realip_module telah didukung sejak Nginx 1.0.4 (rilis tahun 2011). Jika Anda menggunakan versi yang lebih lama, kami menyarankan agar Anda melakukan backup data konfigurasi dan meningkatkan versi Nginx.
-
Jika modul http_realip_module belum diinstal, Anda perlu mengompilasi ulang dan menginstal Nginx dengan modul tersebut. Proses ini kompleks. Kami menyarankan menggunakan manajer paket seperti yum untuk menginstal Nginx.
-
-
Ubah dan simpan file konfigurasi Nginx seperti pada contoh berikut. Untuk menemukan lokasi file konfigurasi, jalankan perintah
nginx -t. Lokasi default biasanya/etc/nginx/nginx.conf, tetapi dapat berbeda tergantung lingkungan Anda.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
Bagian ini menggunakan CentOS 7.9 dan Apache 2.4.6 sebagai contoh. Konfigurasi aktual dapat berbeda tergantung lingkungan Anda.
-
Jalankan perintah
httpd -M | grep remoteip_moduleuntuk memeriksa apakah modul remoteip_module telah diinstal pada server Apache. Apache menggunakan modul ini untuk mengurai header X-Forwarded-For.Jika output mencakup
remoteip_module (shared), berarti modul tersebut telah diinstal. Anda dapat melanjutkan ke langkah berikutnya.Catatan-
Modul remoteip_module telah didukung sejak Apache 2.4.0 (rilis tahun 2012). Jika Anda menggunakan versi yang lebih lama, kami menyarankan agar Anda melakukan backup data konfigurasi dan meningkatkan versi Apache.
-
Jika modul remoteip_module belum diinstal, Anda perlu mengompilasi ulang dan menginstal Apache dengan modul tersebut. Proses ini kompleks. Kami menyarankan menggunakan manajer paket seperti yum untuk menginstal Apache.
-
-
Ubah dan simpan file konfigurasi Apache seperti pada contoh berikut. Lokasi default biasanya
/etc/httpd/conf/httpd.conf, tetapi dapat berbeda tergantung lingkungan Anda.# ... <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 merestart layanan Apache.
Server IIS
Bagian ini menggunakan Windows Server 2016 sebagai contoh. Konfigurasi aktual dapat berbeda tergantung lingkungan Anda.
-
Unduh dan ekstrak file F5XForwardedFor.
-
Bergantung pada sistem operasi server Anda, salin
F5XFFHttpModule.dlldanF5XFFHttpModule.inidari direktorix86\ataux64\ke direktori baru, pastikan proses IIS memiliki izin baca terhadap direktori tersebut. -
Pada 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 lokasi, 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 berikut sesuai jenis server Anda.
Server Nginx
Saat Nginx digunakan sebagai server backend, periksa log akses Nginx untuk memverifikasi bahwa alamat IP klien berhasil diambil.
Lokasi default log akses Nginx adalah /var/log/nginx/access.log.
Pada setiap entri log, alamat IP paling kiri dalam field variabel $http_x_forwarded_for adalah alamat IP klien.

Server Apache
Saat Apache digunakan sebagai server backend, periksa log akses Apache untuk memverifikasi bahwa alamat IP klien berhasil diambil.
Lokasi default log akses Apache adalah /var/log/httpd/access_log.
Pada setiap entri log, alamat IP paling kiri dalam field %{X-Forwarded-For}i adalah alamat IP klien.

Server IIS
Saat IIS digunakan sebagai server backend, periksa log IIS untuk memverifikasi bahwa alamat IP klien berhasil diambil.
Anda dapat menemukan lokasi file log IIS di modul Logging.

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

FAQ
Akses sering dari IP yang dimulai dengan 100
Selain meneruskan permintaan eksternal ke instans ECS backend menggunakan Alamat IP pribadi, sistem load balancing juga melakukan pemeriksaan kesehatan dan memantau ketersediaan. Permintaan ini berasal dari sistem load balancing.
Blok CIDR sistem untuk layanan load balancing adalah 100.64.0.0/10. Ini adalah blok alamat yang dicadangkan untuk Alibaba Cloud dan tidak dapat dialokasikan kepada pengguna lain, sehingga tidak menimbulkan risiko keamanan. Inilah sebabnya Anda mungkin melihat banyak permintaan akses ke instans ECS Anda dari alamat IP yang dimulai dengan 100.
Untuk memastikan ketersediaan layanan Anda, pastikan iptables atau perangkat lunak keamanan pihak ketiga lainnya di semua server tidak memblokir blok alamat ini.
Mendapatkan IP klien dengan WAF, CDN, dan GA
Jika lalu lintas diteruskan oleh layanan seperti Web Application Firewall (WAF), Content Delivery Network (CDN), atau Global Accelerator (GA) sebelum mencapai load balancer, Anda tetap dapat menggunakan field X-Forwarded-For untuk mengambil alamat IP klien. Produk-produk ini meneruskan field X-Forwarded-For secara default, sehingga tidak diperlukan konfigurasi tambahan.
Untuk keamanan yang lebih tinggi dan mencegah spoofing X-Forwarded-For, Anda dapat menentukan header kustom di produk lain untuk mencatat alamat IP klien. Misalnya, dalam arsitektur client > CDN > WAF > load balancer > ECS, CDN dapat meneruskan header HTTP Ali-Cdn-Real-Ip. Saat mengonfigurasi WAF, Anda dapat memilih 'Specify header field' sebagai metode penentuan alamat IP klien dan mengatur headernya menjadi Ali-Cdn-Real-Ip. Pada server Nginx backend, Anda kemudian dapat mengonfigurasi variabel log Anda sebagai $http_Ali_Cdn_Real_Ip untuk menangkap alamat IP klien dalam log.
Anda juga dapat menerapkan langkah-langkah berikut untuk meningkatkan keamanan sistem:
-
Validasi dan filter header XFF: Di server backend, validasi dan filter header XFF untuk memastikan header tersebut sah dan dapat dipercaya. Anda dapat memeriksa format dan alamat IP dalam header serta menolak nilai yang tidak valid atau mencurigakan.
-
Gunakan firewall dan daftar kontrol akses (ACL): Antara load balancer dan server backend, gunakan firewall dan daftar kontrol akses (ACL) untuk membatasi dan memfilter Permintaan Serangan yang menargetkan header XFF.
-
Enkripsi SSL/TLS: Gunakan enkripsi SSL/TLS untuk melindungi komunikasi, termasuk transmisi header XFF. Hal ini mengurangi risiko serangan man-in-the-middle dan perubahan data.
Mendapatkan IP klien di lingkungan ACK
Saat Anda menggunakan load balancer dalam kluster Container Service for Kubernetes (ACK), metodenya sama, tetapi beberapa detail operasional berbeda. Untuk informasi selengkapnya, lihat FAQ manajemen jaringan.
Dokumen terkait
Jenis load balancer yang berbeda menggunakan metode berbeda untuk mengambil alamat IP klien:
-
Jika Anda menggunakan Application Load Balancer (ALB), Anda dapat menggunakan field X-Forwarded-For untuk mengambil alamat IP klien. Untuk informasi selengkapnya, lihat Mengambil alamat IP klien dengan ALB.
-
Jika Anda menggunakan Network Load Balancer (NLB), Anda dapat mempertahankan alamat IP klien dengan menggunakan kelompok server atau dengan mengaktifkan protokol Proxy. Untuk informasi selengkapnya, lihat Mengambil alamat IP klien dengan NLB.
-
Jika Anda menggunakan pendengar Lapisan 4 CLB, Anda dapat mengambil alamat IP klien secara langsung atau dengan mengaktifkan protokol Proxy. Untuk informasi selengkapnya, lihat Mengambil alamat IP klien dengan pendengar Lapisan 4 CLB.