Saat Application Load Balancer (ALB) meneruskan permintaan, alamat IP sumber yang terlihat oleh server backend adalah alamat IP instans ALB. ALB dapat menambahkan alamat IP asal klien ke bidang X-Forwarded-For dalam header permintaan HTTP. Server backend kemudian dapat mengambil alamat IP tersebut dengan konfigurasi sederhana.
Bidang X-Forwarded-For menggunakan format berikut:
X-Forwarded-For: <Client Originating IP Address, Proxy Server 1 IP, Proxy Server 2 IP, ...>Prosedur
Langkah 1: Konfirmasi bahwa pendengar diaktifkan untuk mendapatkan alamat IP klien menggunakan header X-Forwarded-For
Masuk ke Konsol ALB dan klik ID instans target untuk membuka halaman Instance Details.
Pada tab Listener, klik ID pendengar target. Pada halaman Listener Details, di bagian Basic Information, pastikan bahwa Add HTTP Header diatur ke
Enable adding the X-Forwarded-For header to retrieve client IP addresses - Add.Opsi ini diaktifkan secara default. Jika belum diaktifkan, klik Modify Listener di bagian Basic Information, lalu aktifkan opsi tersebut di bagian Advanced Settings.
Langkah 2: Konfigurasikan server backend
Server Nginx
Bagian ini menggunakan contoh Alibaba Cloud Linux 3.2104 dan nginx/1.20.1. Perintah dan jalur aktual dapat berbeda tergantung lingkungan Anda.
Nginx menggunakan modul http_realip_module untuk mengurai header X-Forwarded-For dan mengambil alamat IP asal klien.
Konfirmasi bahwa modul telah terinstal: Jalankan
nginx -V 2>&1 | grep --color=auto http_realip_moduledi server. Jika output berisi--with-http_realip_module, berarti modul telah terinstal.
Nginx yang diinstal menggunakan manajer paket, seperti
yumatau `apt`, pada distribusi Linux utama biasanya sudah menyertakan modul ini secara default. Jika modul belum terinstal, instal atau upgrade Nginx menggunakan manajer paket.Ubah file konfigurasi Nginx: Jalankan
sudo nginx -tuntuk menemukan jalur file konfigurasi. Jalur default biasanya/etc/nginx/nginx.conf.http { # Pastikan format log mencakup $http_x_forwarded_for. Variabel ini mencatat nilai header 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"'; # Pastikan log akses menggunakan format log di atas. access_log /var/log/nginx/access.log main; # ... }Muat ulang konfigurasi: Jalankan
sudo nginx -tuntuk memeriksa sintaksis file konfigurasi. Jika sintaksis benar, jalankansudo nginx -s reloaduntuk menerapkan perubahan.
Server Apache
Bagian ini menggunakan contoh Alibaba Cloud Linux 3.2104 dan Apache/2.4.37. Perintah dan jalur aktual dapat berbeda tergantung lingkungan Anda.
Apache menggunakan modul mod_remoteip untuk mengurai header X-Forwarded-For dan mengambil alamat IP asal klien.
Konfirmasi bahwa modul telah terinstal: Jalankan
httpd -M | grep remoteip_moduledi server. Jika output berisiremoteip_module (shared), berarti modul telah terinstal.
Apache yang diinstal menggunakan manajer paket, seperti
yumatau `apt`, pada distribusi Linux utama biasanya sudah menyertakan modul ini secara default. Jika modul belum terinstal, instal atau upgrade Apache menggunakan manajer paket.Ubah file konfigurasi Apache: Jalankan
httpd -Vuntuk menemukan jalur file konfigurasi. Jalur default biasanya/etc/httpd/conf/httpd.conf.# ... <IfModule log_config_module> # ... # Pastikan format log mencakup %{X-Forwarded-For}i. Variabel ini mencatat nilai header X-Forwarded-For. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined # ... # Pastikan log akses menggunakan format log di atas. CustomLog "logs/access_log" combined </IfModule> # ...Muat ulang konfigurasi: Jalankan
sudo systemctl restart httpduntuk menerapkan perubahan.
Server IIS
Bagian ini menggunakan contoh Windows Server 2022 21H2 dan IIS 10.0. Langkah-langkah aktual dapat berbeda tergantung lingkungan Anda.
Di IIS Manager, pilih server target di panel Connections di sebelah kiri. Lalu, di panel utama, klik ganda fitur Logging.

Pada bagian Log File, klik Select Fields.

Pada kotak dialog W3C Logging Fields, klik Add Field. Pada kotak dialog Add Custom Field, konfigurasikan informasi bidang lalu klik OK.
Untuk Field Name, masukkan
X-Forwarded-For.Source Type: Nilai default adalah
Request Header.Untuk Source, masukkan
X-Forwarded-For.

Konfirmasi bahwa bidang kustom telah ditambahkan, lalu klik OK.

Di panel Actions di sebelah kanan, klik Apply.

Langkah 3: Verifikasi bahwa server backend mendapatkan alamat IP asal klien
Periksa log akses server web backend untuk memverifikasi bahwa server tersebut mengambil alamat IP asal klien.
Server Nginx
Jalur default log akses Nginx adalah /var/log/nginx/access.log.
Pada setiap catatan log, bidang yang sesuai dengan variabel $http_x_forwarded_for adalah alamat IP asal klien.

Server Apache
Jalur default log akses Apache adalah /var/log/httpd/access_log.
Pada setiap catatan log, bidang yang sesuai dengan variabel %{X-Forwarded-For}i adalah alamat IP asal klien.

Server IIS
Jalur default log akses IIS adalah %SystemDrive%\inetpub\logs\LogFiles.
Pada setiap catatan log, nilai yang sesuai dengan bidang X-Forwarded-For di akhir catatan adalah alamat IP asal klien.

Going live
Validasi dan filter header X-Forwarded-For: Di server backend, validasi dan filter header X-Forwarded-For untuk memastikan bahwa header tersebut sah dan tepercaya. Anda dapat memeriksa format dan alamat IP dalam header X-Forwarded-For serta menolak nilai ilegal atau mencurigakan.
Gunakan kebijakan keamanan: Gunakan grup keamanan Alibaba Cloud atau kebijakan keamanan pihak ketiga lainnya antara instans ALB dan server backend untuk membatasi dan memfilter permintaan berbahaya yang menargetkan header X-Forwarded-For.
Gunakan enkripsi TLS: Gunakan enkripsi TLS untuk melindungi komunikasi, termasuk transmisi header X-Forwarded-For. Hal ini mengurangi risiko serangan man-in-the-middle dan manipulasi data.
FAQ
Mengapa alamat IP yang dimulai dengan 100 sering mengakses layanan backend?
Instans ALB yang ditingkatkan: menggunakan alamat IP pribadi (Local IP) dari blok CIDR vSwitch-nya untuk berkomunikasi dengan server backend.
Instans ALB lama: menggunakan rentang alamat
100.64.0.0/10untuk berkomunikasi dengan server backend. Ini adalah blok CIDR yang dicadangkan oleh Alibaba Cloud dan tidak menimbulkan risiko keamanan.
Selain meneruskan permintaan ke server backend, ALB juga melakukan pemeriksaan kesehatan pada server backend. Jika Anda menggunakan instans ALB lama, Anda akan melihat banyak permintaan akses dari alamat IP yang dimulai dengan 100 di log akses server backend.
Untuk memastikan komunikasi normal antara instans ALB dan layanan backend, jika kebijakan keamanan—seperti grup keamanan Alibaba Cloud atau kebijakan keamanan pihak ketiga lainnya—dikonfigurasi untuk jalur akses, Anda harus mengizinkan trafik dari blok CIDR vSwitch instans ALB atau rentang alamat 100.64.0.0/10.
Bagaimana cara mendapatkan alamat IP asal klien saat ALB digunakan bersama WAF, CDN, atau GA?
Jika trafik diteruskan oleh WAF, CDN, atau Global Accelerator (GA) Alibaba Cloud sebelum mencapai instans ALB, Anda juga dapat mengambil alamat IP asal klien dari bidang X-Forwarded-For. Produk-produk ini meneruskan bidang ini secara default dan tidak memerlukan konfigurasi tambahan.
Untuk mencegah spoofing X-Forwarded-For, Anda juga dapat menggunakan bidang header permintaan HTTP lainnya untuk mencatat alamat IP asal klien:
Gunakan header
Ali-Cdn-Real-Ipdari Alibaba Cloud CDN. Arsitekturnya adalah Client > CDN > WAF > ALB > ECS.Secara default, CDN menambahkan header permintaan
Ali-Cdn-Real-Ipke permintaan pengambilan asal untuk meneruskan alamat IP asli klien ke server origin.Saat Anda menambahkan layanan ke WAF, atur metode deteksi alamat IP klien untuk menggunakan header yang ditentukan
Ali-Cdn-Real-Ip.Konfigurasikan variabel log di server Nginx backend sebagai
$http_Ali_Cdn_Real_Ip. Anda kemudian dapat mengambil alamat IP asal klien dari bidang ini.
Anda dapat menggunakan aksi Add Header dalam aturan pengalihan pendengar ALB untuk menambahkan header HTTP kustom. Alur permintaan untuk aksi ini adalah Client > GA > ALB > ECS.
Dalam aturan pengalihan pendengar ALB, atur Action ke Add Header. Dalam contoh ini, header ditambahkan dengan kunci
client-real-ipdan nilainya diatur keSystem-defined variableClient IP Address.
Aktifkan Retrieve Client IP pada pendengar dan tambahkan alamat IP publik titik akhir ke Trusted IP List.
Konfigurasikan variabel log di server Nginx backend sebagai
$http_client_real_ip. Anda kemudian dapat mengambil alamat IP asal klien dari bidang ini.
Bagaimana cara mendapatkan alamat IP asal klien saat ALB digunakan dalam skenario ACK?
Untuk informasi lebih lanjut, lihat Obtain the IP address of a visitor.