Saat ALB meneruskan permintaan, alamat IP sumber yang terlihat oleh server backend adalah alamat IP instans ALB. ALB dapat menambahkan IP klien asli ke bidang X-Forwarded-For dalam header HTTP, yang dapat Anda ambil dengan konfigurasi sederhana pada server backend Anda.
Bidang X-Forwarded-For memiliki format berikut:
X-Forwarded-For: <IP klien asli, IP server proxy 1, IP server proxy 2, ...>
Prosedur
Langkah 1: Verifikasi konfigurasi pendengar untuk X-Forwarded-For
-
Masuk ke Konsol ALB, lalu 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 dikonfigurasi untuk menyertakan
X-Forwarded-For.Opsi ini diaktifkan secara default. Jika tidak diaktifkan, klik Modify Listener di bagian Basic Information dan aktifkan opsi tersebut di bagian Advanced Settings.
Langkah 2: Konfigurasikan server backend
Server Nginx
Dokumen ini menggunakan server Nginx yang menjalankan Alibaba Cloud Linux 3.2104 dan nginx/1.20.1 sebagai contoh. Konfigurasi aktual dapat berbeda tergantung lingkungan Anda.
Nginx menggunakan modul http_realip_module untuk mengurai header X-Forwarded-For dan mengambil IP klien asli.
-
Verifikasi bahwa modul telah terinstal: Di server, jalankan perintah
nginx -V 2>&1 | grep --color=auto http_realip_module. Jika output berisi--with-http_realip_module, berarti modul tersebut telah terinstal.
Untuk distribusi Linux utama, Nginx yang diinstal melalui manajer paket seperti
yumatauaptbiasanya sudah menyertakan modul ini secara default. Jika modul belum terinstal, kami menyarankan agar Anda menginstal atau melakukan peningkatan Nginx menggunakan manajer paket. -
Ubah file konfigurasi Nginx: Jalankan
sudo nginx -tuntuk menemukan lokasi file konfigurasi. Lokasi default biasanya/etc/nginx/nginx.conf.http { # Pastikan format log mencakup $http_x_forwarded_for untuk 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 konfigurasi. Jika sintaksis benar, jalankansudo nginx -s reloaduntuk menerapkan perubahan.
Server Apache
Dokumen ini menggunakan server Apache yang menjalankan Alibaba Cloud Linux 3.2104 dan Apache/2.4.37 sebagai contoh. Konfigurasi aktual dapat berbeda tergantung lingkungan Anda.
Apache menggunakan modul mod_remoteip untuk mengurai header X-Forwarded-For dan mengambil IP klien asli.
-
Verifikasi bahwa modul telah terinstal: Di server, jalankan perintah
httpd -M | grep remoteip_module. Jika output berisiremoteip_module (shared), berarti modul tersebut telah terinstal.
Untuk distribusi Linux utama, Apache yang diinstal melalui manajer paket seperti
yumatauaptbiasanya sudah menyertakan modul ini secara default. Jika modul belum terinstal, kami menyarankan agar Anda menginstal atau melakukan peningkatan Apache menggunakan manajer paket. -
Ubah file konfigurasi Apache: Jalankan
httpd -Vuntuk menemukan lokasi file konfigurasi. Lokasi default biasanya/etc/httpd/conf/httpd.conf.# ... <IfModule log_config_module> # ... # Pastikan format log mencakup %{X-Forwarded-For}i untuk 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
Dokumen ini menggunakan server IIS yang menjalankan Windows Server 2022 21H2 dan IIS 10.0 sebagai contoh. Konfigurasi aktual dapat berbeda tergantung lingkungan Anda.
-
Di panel Connections IIS Manager, pilih server target. Di panel utama, klik ganda Logging.

-
Di 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.
-
Field Name: Masukkan
X-Forwarded-For. -
Source Type: Biarkan nilai default, yaitu
Request Header. -
Source: Masukkan
X-Forwarded-For.

-
-
Pastikan bidang kustom telah ditambahkan, lalu klik OK.

-
Di panel Actions di sebelah kanan, klik Apply untuk menyimpan perubahan.

Langkah 3: Verifikasi pengambilan IP klien
Periksa log akses server web backend untuk memverifikasi bahwa server telah berhasil mengambil IP klien asli.
Server Nginx
Lokasi default log akses Nginx adalah /var/log/nginx/access.log.
Pada setiap entri log, nilai variabel $http_x_forwarded_for adalah IP klien asli.

Server Apache
Lokasi default log akses Apache adalah /var/log/httpd/access_log.
Pada setiap entri log, nilai variabel %{X-Forwarded-For}i adalah IP klien asli.

Server IIS
Lokasi default log akses IIS adalah %SystemDrive%\inetpub\logs\LogFiles.
Pada setiap entri log, nilai pada bidang X-Forwarded-For terakhir adalah IP klien asli.

Praktik terbaik produksi
-
Validasi dan filter header X-Forwarded-For: Di server backend Anda, validasi dan filter header X-Forwarded-For. Tolak entri yang diformat secara tidak tepat atau berisi alamat IP yang tidak tepercaya.
-
Gunakan kebijakan keamanan: Gunakan grup keamanan atau kebijakan keamanan pihak ketiga lainnya antara ALB dan server backend Anda untuk membatasi dan memfilter permintaan serangan yang memalsukan header X-Forwarded-For.
-
Enkripsi TLS: Gunakan enkripsi TLS untuk melindungi komunikasi antar komponen, termasuk transmisi header X-Forwarded-For. Hal ini mengurangi risiko serangan man-in-the-middle dan manipulasi data.
FAQ
Akses sering dari IP yang dimulai dengan 100
-
Instans ALB yang ditingkatkan menggunakan alamat IP pribadi (IP lokal) dari blok CIDR vSwitch terkait untuk berkomunikasi dengan server backend.
-
Instans ALB yang tidak ditingkatkan menggunakan rentang alamat
100.64.0.0/10, yang dicadangkan oleh Alibaba Cloud dan tidak menimbulkan risiko keamanan, untuk berkomunikasi dengan server backend.
Selain meneruskan permintaan ke server backend, ALB juga melakukan pemeriksaan kesehatan secara terus-menerus terhadap server tersebut. Jika Anda menggunakan instans ALB yang tidak ditingkatkan, log akses server backend Anda akan menunjukkan banyak permintaan dari alamat IP dalam rentang 100.64.0.0/10.
Untuk memastikan konektivitas yang tepat antara instans ALB dan layanan backend Anda, pastikan iptables atau perangkat lunak keamanan pihak ketiga lainnya pada instans ECS backend Anda tidak memblokir blok CIDR vSwitch instans ALB atau rentang alamat 100.64.0.0/10.
Mengambil IP klien dengan WAF, CDN, atau GA
Jika trafik diteruskan oleh layanan seperti Web Application Firewall (WAF), Content Delivery Network (CDN), atau Global Accelerator (GA) sebelum mencapai ALB, Anda juga dapat mengambil IP klien asli dari bidang X-Forwarded-For. Produk-produk ini meneruskan header ini secara default dan tidak memerlukan konfigurasi tambahan.
Untuk mencegah pemalsuan X-Forwarded-For, Anda dapat menggunakan header HTTP lain untuk mencatat IP klien asli:
-
Gunakan header
Ali-Cdn-Real-Ipdari Alibaba Cloud CDN. Arsitekturnya adalah Klien > CDN > WAF > ALB > ECS.-
Secara default, CDN menambahkan header permintaan
Ali-Cdn-Real-Ipke permintaan yang diteruskan ke server origin. Header ini meneruskan alamat IP asli klien yang terhubung ke Titik kehadiran (POP) CDN. -
Saat mengintegrasikan dengan WAF, pilih
Ali-Cdn-Real-Ipsebagai header kustom untuk deteksi IP klien. -
Konfigurasikan variabel log
$http_Ali_Cdn_Real_Ippada server Nginx backend untuk mengambil IP klien asli dari bidang ini.
-
-
Gunakan aksi Add Header dalam aturan pengalihan pendengar ALB untuk menambahkan header HTTP (pasangan kunci-nilai) ke permintaan. Arsitekturnya adalah Klien > GA > ALB > ECS.
-
Pada aturan pengalihan pendengar ALB, atur Action ke Add Header. Dalam contoh ini, kuncinya adalah
client-real-ipdan nilainya diatur keSystem-defined-Client IP Address.
-
Untuk pendengar tersebut, aktifkan Retrieve Client IP dan tambahkan alamat IP egress publik titik akhir GA ke daftar alamat IP tepercaya.
-
Konfigurasikan variabel log
$http_client_real_ippada server Nginx backend untuk mengambil IP klien asli dari bidang ini.
-
Mengambil IP klien di lingkungan ACK
Untuk informasi lebih lanjut, lihat Konfigurasikan instans ALB menggunakan AlbConfig.