Gateway perlu mendapatkan alamat IP asal klien untuk meningkatkan keamanan, mengoptimalkan pengalaman pengguna, atau memenuhi persyaratan kepatuhan dalam skenario pemasaran, audit, dan anti-penipuan. Topik ini menjelaskan cara mengonfigurasi header permintaan X-Forwarded-For (XFF) untuk mengaktifkan gateway ASM mendapatkan alamat IP asal klien.
Fungsi ini memerlukan versi ASM 1.24.6.83 atau lebih baru. Tingkatkan instance ASM Anda jika diperlukan.
Latar Belakang
X-Forwarded-For (XFF) adalah bidang header permintaan HTTP yang mencatat alamat IP asal klien ketika permintaan melewati server proxy, penyeimbang beban server, atau Alibaba Cloud CDN.
X-Forwarded-For adalah daftar alamat IP yang dipisahkan oleh tanda koma. Formatnya adalah sebagai berikut:
X-Forwarded-For: <IP asal klien>, <IP proxy pertama>, <IP proxy kedua>, ...Mendapatkan IP klien dengan mengonfigurasi jumlah proxy tepercaya
Ketika topologi rantai panggilan tetap, Anda dapat mengaktifkan gateway ASM untuk mendapatkan IP klien dengan mengonfigurasi anotasi hop tepercaya (jumlah proxy dalam rantai dikurangi 1) untuk pod gateway. Gambar berikut menunjukkan contohnya:
Tiga proxy tetap ada dalam rantai permintaan. Jumlah hop tepercaya adalah numTrustedProxies: 2. Setelah permintaan melewati proxy, daftar IP di header permintaan XFF adalah [1.1.1.1, 2.2.2.2, 3.3.3.3]. Gateway ASM menghapus alamat IP dari akhir daftar ini berdasarkan jumlah hop tepercaya yang telah dikonfigurasi untuk mendapatkan alamat IP asal klien 1.1.1.1. Anda dapat mengonfigurasi jumlah hop tepercaya sebagai berikut:
Gunakan ASM kubeconfig untuk mengedit konfigurasi gateway ASM.
$ kubectl -n istio-system edit istiogateway <Nama gateway ASM>Tambahkan anotasi berikut ke pod gateway untuk menetapkan jumlah hop tepercaya.
PeringatanOperasi ini akan menyebabkan restart bergulir gateway. Lakukan operasi ini selama jam-jam sepi.
spec: podAnnotations: proxy.istio.io/config: | gatewayTopology: numTrustedProxies: <jumlah proxy tepercaya-1>Setelah modifikasi, konfigurasi ini akan berfungsi pada pod gateway.
Nilai
numTrustedProxiesharus kurang dari jumlah alamat IP di header permintaan XFF. Jika nilainya lebih besar atau sama dengan itu, gateway ASM akan menggunakan alamat terakhir (paling kanan) dalam daftar IP sebagai alamat IP asal klien.Output header permintaan XFF di log akses gateway ASM mencakup alamat yang ditambahkan oleh gateway ASM. Penambahan ini terjadi setelah
numTrustedProxiesperhitungan. Dalam contoh ini, isi header permintaan XFF akan mencakup alamat IP4.4.4.4. Hal ini karena setelah gateway menyelesaikan perhitungannumTrustedProxiesdan mendapatkan IP klien, ia menambahkan IP Proxy3 ke header permintaan XFF. Ini tidak memengaruhi akurasi IP klien yang diperoleh.
Mendapatkan IP klien dengan mengecualikan alamat yang dikenal
Ketika topologi rantai panggilan tidak tetap, mengonfigurasi hanya jumlah hop tepercaya tidak dapat menjamin mendapatkan IP klien. Anda perlu mengonfigurasi alamat tepercaya yang dikenal untuk mengaktifkan gateway ASM mengecualikannya. Kemudian Anda bisa mendapatkan alamat klien yang benar. Berikut adalah contohnya:
Pada gambar di atas, jumlah hop topologi untuk Client1 dan Client2 tidak konsisten. Oleh karena itu, Anda tidak bisa mendapatkan alamat IP asal klien dengan mengonfigurasi jumlah hop tetap. Dalam hal ini, Anda perlu menambahkan IP Proxy1 hingga Proxy4 ke segmen alamat tepercaya gateway. Lalu gateway dapat mengecualikan alamat yang dikenal ini dan mendapatkan alamat klien yang benar. Anda dapat mengonfigurasi alamat yang dikenal sebagai berikut:
Edit konfigurasi gateway ASM.
$ kubectl -n istio-system edit istiogateway <Nama gateway ASM>Tambahkan anotasi berikut ke pod gateway untuk menambahkan alamat IP yang dikenal ke segmen tepercaya.
PeringatanOperasi ini akan menyebabkan restart bergulir gateway. Lakukan operasi ini selama jam-jam sepi.
Hanya format CIDR yang didukung di sini. IP tetap harus mencakup jumlah bit mask subnet
/32.spec: podAnnotations: proxy.istio.io/config: | gatewayTopology: xffTrustedCidrs: - 2.2.2.2/32 - 3.3.3.3/32 - 4.4.4.4/32 - 5.5.5.5/32Setelah modifikasi, konfigurasi ini akan berfungsi pada pod gateway baru.