Jika Anda menggunakan pendengar Application Load Balancer (ALB) untuk meneruskan lalu lintas, alamat IP asal klien dapat diperoleh dari bidang X-Forwarded-For dalam Header HTTP.
Cara kerja X-Forwarded-For
Pendengar HTTP dan HTTPS mendukung header X-Forwarded-For. Anda dapat mengonfigurasi server backend untuk mengekstrak 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 merupakan alamat IP klien.
Prosedur
Langkah 1: Periksa bahwa pendengar diaktifkan untuk memperoleh alamat IP menggunakan header X-Forwarded-For
Masuk ke Konsol Application Load Balancer (ALB).
Di bilah navigasi atas, pilih wilayah tempat instans diterapkan.
Di halaman Instances, temukan instans target dan klik ID instansnya.
Di halaman detail instans, klik tab Listener, temukan pendengar target, dan klik ID-nya.
Di halaman detail pendengar, verifikasi bahwa Add HTTP Header mencakup Use the X-Forwarded-For Header to Obtain Client IP Addresses.
CatatanSecara default, ALB diaktifkan untuk memperoleh alamat IP asal klien menggunakan header X-Forwarded-For.
Langkah 2: Konfigurasikan server backend
Pilih prosedur berikut berdasarkan jenis server backend yang digunakan.
Konfigurasikan server NGINX
Contoh ini menggunakan sistem operasi CentOS 7.9 dan NGINX 1.20.1. Sesuaikan konfigurasi sesuai dengan lingkungan Anda.
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, dirilis pada tahun 2011, dan versi setelahnya mendukung modul http_realip_module. Jika versi NGINX Anda lebih awal 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 ulang dan instalasi ulang NGINX, lalu tambahkan modul tersebut. Kami sarankan Anda menggunakan manajer paket seperti YUM untuk menginstal dan mengelola NGINX karena 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 dapat bervariasi berdasarkan lingkungan Anda.http { # Set variabel $http_x_forwarded_for, yang digunakan untuk merekam 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
Contoh ini menggunakan sistem operasi CentOS 7.9 dan Apache 2.4.6. Sesuaikan konfigurasi sesuai dengan lingkungan Anda.
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, dirilis pada tahun 2012, dan versi setelahnya mendukung modul remoteip_module. Jika versi Apache Anda lebih awal 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 ulang dan instalasi ulang Apache, lalu tambahkan modul tersebut. Kami sarankan Anda menggunakan manajer paket seperti YUM untuk menginstal dan mengelola Apache karena 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 dapat bervariasi berdasarkan lingkungan Anda.# ... <IfModule log_config_module> # Tambahkan direktif LogFormat %{X-Forwarded-For}i, yang digunakan untuk merekam 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
Contoh ini menggunakan sistem operasi Windows Server 2016. Sesuaikan konfigurasi sesuai dengan lingkungan Anda.
Unduh dan ekstrak file F5XForwardedFor.
Salin file
F5XFFHttpModule.dlldanF5XFFHttpModule.inidari direktorix86\ataux64ke direktori di server IIS. Pastikan proses IIS memiliki izin baca dan tulis pada 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 merekam 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 Aksi di sebelah kanan.
Mulai ulang server IIS dan tunggu hingga konfigurasi selesai diterapkan.
Langkah 3: Uji apakah server backend dapat mengambil alamat IP klien
Pilih prosedur berikut berdasarkan jenis server backend yang digunakan.
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 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 instans ECS?
Sistem Server Load Balancer meneruskan permintaan eksternal ke instans ECS backend. Sistem ini juga melakukan pemeriksaan kesehatan dan memantau ketersediaan layanan pada instans ECS. Permintaan akses tersebut berasal dari sistem Server Load Balancer.
Instans ALB yang ditingkatkan menggunakan alamat IP pribadi (Local IP) dari blok CIDR vSwitch mereka untuk berkomunikasi dengan instans ECS backend secara default. Sebaliknya, instans ALB lama menggunakan rentang alamat 100.64.0.0/10. Rentang 100.64.0.0/10 adalah blok CIDR yang dicadangkan oleh Alibaba Cloud. Alamat IP dalam rentang ini tidak dapat ditetapkan kepada pengguna lain, sehingga tidak ada risiko keamanan yang terkait. Jika Anda menggunakan instans ALB lama yang belum ditingkatkan, Anda mungkin melihat banyak permintaan akses dari alamat IP yang dimulai dengan 100.
Untuk memastikan ketersediaan layanan, pastikan server Anda tidak memblokir lalu lintas dari Local IP instans ALB atau blok CIDR 100.64.0.0/10. Ini mencakup pemblokiran lalu lintas menggunakan iptables atau perangkat lunak kebijakan keamanan pihak ketiga apa pun.
Bagaimana cara memperoleh alamat IP asal klien saat menggunakan WAF, CDN, atau GA
Jika lalu lintas diteruskan oleh produk seperti Web Application Firewall (WAF), CDN, atau Global Accelerator (GA) sebelum mencapai load balancer, Anda dapat memperoleh alamat IP asal klien dari bidang X-Forwarded-For. Produk-produk ini melewati bidang X-Forwarded-For secara default, tanpa memerlukan konfigurasi tambahan.
Jika bisnis Anda memiliki persyaratan keamanan tinggi dan Anda ingin mencegah pemalsuan X-Forwarded-For, Anda dapat mengambil langkah-langkah berikut:
Tentukan bidang header di produk lain untuk merekam alamat IP asal klien.
Sebagai contoh, jika arsitektur Anda adalah Client > CDN > WAF > Server Load Balancer > ECS, CDN melewati bidang Ali-Cdn-Real-Ip dalam Header HTTP. Saat mengonfigurasi WAF, atur metode deteksi alamat IP klien untuk menggunakan bidang header yang ditentukan Ali-Cdn-Real-Ip. Kemudian, konfigurasikan variabel log di server backend Nginx sebagai $http_Ali_Cdn_Real_Ip. Alamat IP yang direkam dalam log adalah alamat IP asal klien.
Tentukan bidang header di ALB untuk merekam alamat IP asal klien.
Sebagai contoh, jika arsitektur Anda adalah Client > GA > Server Load Balancer > ECS, Anda dapat menggunakan aksi Insert Header dalam aturan penerusan pendengar ALB untuk merekam alamat IP asal klien. Sebagai contoh, atur kunci menjadi client-real-ip dan nilainya menjadi Alamat IP Klien, yang merupakan variabel sistem yang ditentukan. Pada saat yang sama, aktifkan saklar Find Real Client Source IP, tambahkan alamat IP publik titik akhir GA ke daftar IP tepercaya ALB, dan konfigurasikan variabel log di server backend Nginx sebagai $http_client_real_ip. Alamat IP yang direkam dalam log adalah alamat IP asal klien.

Anda juga dapat menggunakan metode lain untuk meningkatkan keamanan sistem, seperti:
Validasi dan filter header X-Forwarded-For: Di server backend, validasi dan filter header X-Forwarded-For untuk memastikan bahwa itu sah dan tepercaya. Anda dapat memeriksa format dan alamat IP dalam header X-Forwarded-For serta menolak nilai ilegal atau mencurigakan.
Gunakan firewall dan daftar kontrol akses (ACL): Terapkan firewall dan ACL antara load balancer dan server backend untuk menyaring permintaan jahat yang dapat memanipulasi header X-Forwarded-For.
Gunakan enkripsi SSL/TLS: Gunakan enkripsi SSL/TLS untuk melindungi komunikasi, termasuk transmisi header X-Forwarded-For. Ini mengurangi risiko serangan man-in-the-middle (MITM) dan manipulasi data.
Bagaimana cara memperoleh alamat IP asal klien saat menggunakan ALB dalam skenario ACK?
Untuk memperoleh alamat IP klien saat menggunakan ALB dalam kluster ACK, lihat Memperoleh alamat IP pengunjung.
Referensi
Berbagai jenis penyeimbang beban menggunakan metode berbeda untuk mendapatkan alamat IP asal Klien:
Jika Anda menggunakan Network Load Balancer (NLB), alamat IP asal klien dapat diperoleh melalui fitur pelestarian IP klien dari grup server atau dengan mengaktifkan Proxy Protocol. Untuk informasi lebih lanjut, lihat Memperoleh alamat IP asal klien melalui NLB.
Jika Anda menggunakan pendengar Lapisan 7 dari Classic Load Balancer (CLB), alamat IP asal klien dapat diperoleh dari bidang X-Forwarded-For. Untuk informasi lebih lanjut, lihat Memperoleh alamat IP asal klien melalui pendengar Lapisan 7 dari CLB.
Jika Anda menggunakan pendengar Lapisan 4 dari CLB, alamat IP asal klien dapat diperoleh secara langsung atau dengan mengaktifkan Proxy Protocol. Untuk informasi lebih lanjut, lihat Memperoleh alamat IP asal klien pada server backend melalui pendengar Lapisan 4 dari CLB.