Setelah situs web ditambahkan ke Web Application Firewall (WAF), WAF menyaring permintaan akses ke situs web dan meneruskan permintaan normal ke server asal. Server asal dapat menggunakan Header X-Forwarded-For dalam permintaan balik ke asal untuk mengambil alamat IP asal klien. Topik ini menjelaskan cara mengonfigurasi server aplikasi web dan kontainer Kubernetes untuk mengambil alamat IP asal klien, termasuk server NGINX, IIS 6, IIS 7, Apache, dan Tomcat.
Informasi latar belakang
Header X-Forwarded-For digunakan untuk mencatat alamat IP asal klien. WAF menambahkan X-Forwarded-For sebagai header permintaan HTTP sebelum meneruskan permintaan akses ke server hop berikutnya. Formatnya adalah X-Forwarded-For:Alamat IP Klien. Jika permintaan melewati beberapa server proxy perantara seperti WAF, Anti-DDoS Proxy, dan Alibaba Cloud CDN, header X-Forwarded-For mencatat alamat IP asal klien dan alamat IP server proxy perantara, dipisahkan oleh koma (,). Contoh: X-Forwarded-For:Alamat IP Klien, Alamat IP Proxy Server 1, Alamat IP Proxy Server 2, Alamat IP Proxy Server 3, …..
Oleh karena itu, server aplikasi web umum dan kontainer Kubernetes dapat menggunakan header X-Forwarded-For untuk mengambil alamat IP asal klien.
Berikut ini menjelaskan cara mengonfigurasi header X-Forwarded-For pada server NGINX, IIS 6, IIS 7, Apache, dan Tomcat serta kontainer Kubernetes.
Sebelum memulai, pastikan lingkungan yang ada telah dicadangkan, termasuk snapshot instance Elastic Compute Service (ECS) dan file konfigurasi server aplikasi web.
Konfigurasikan server NGINX
Server NGINX menggunakan modul http_realip_module untuk mengambil alamat IP asal klien. Untuk menginstal modul http_realip_module dan memodifikasi file konfigurasi NGINX, ikuti langkah-langkah berikut:
Instal modul http_realip_module.
Jalankan perintah
nginx -V | grep http_realip_moduledi server NGINX untuk memeriksa apakah modul sudah terinstal.Jika modul sudah terinstal, lewati langkah ini.
Jika modul belum terinstal, kompilasi ulang NGINX dan instal modul tersebut.
CatatanJika NGINX diinstal menggunakan paket instalasi cepat, modul ini tidak terinstal.
wget http://nginx.org/download/nginx-1.12.2.tar.gz tar zxvf nginx-1.12.2.tar.gz cd nginx-1.12.2 ./configure --user=www --group=www --prefix=/alidata/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module make make install kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid` kill -QUIT `cat /alidata/server/nginx/logs/nginx.pid.oldbin`
Modifikasi file konfigurasi NGINX.
Buka file konfigurasi
nginx.conf.Tambahkan konten berikut ke
http {}:http { # Tentukan alamat IP dari mana Anda dapat menerima alamat IP asal klien set_real_ip_from <ip_range1>; set_real_ip_from <ip_range2>; ... set_real_ip_from <ip_rangex>; # Tentukan header HTTP untuk alamat IP klien real_ip_header X-Forwarded-For; }<ip_range1>,<ip_range2>, dan<ip_rangex>dalam konfigurasi menentukan blok CIDR balik ke asal WAF. Untuk mendapatkan semua blok CIDR balik ke asal WAF, masuk ke Konsol WAF dan pilih grup sumber daya dan wilayah tempat instans WAF diterapkan. Anda dapat memilih Chinese Mainland atau Outside Chinese Mainland untuk wilayah. Di panel navigasi di sebelah kiri, klik . Pada tab CNAME Record, klik Back-to-origin CIDR Blocks.Jika beberapa blok CIDR balik ke asal terlibat, tambahkan semuanya dengan masing-masing berada di baris terpisah. Misalnya, jika blok CIDR balik ke asal WAF mencakup 10.10.10.0/24, 11.11.XX.X/25, dan 2.13.XX.XX/27, tambahkan konten berikut ke http {}:
set_real_ip_from 10.10.10.0/24; set_real_ip_from 11.11.XX.X/25; set_real_ip_from 2.13.XX.XX/27; real_ip_header X-Forwarded-For;Gunakan skrip berikut untuk mengonversi blok CIDR IPv4 balik ke asal yang disalin ke format
set_real_ip_from <ip_rangeX>.import re def format_ip_ranges(ip_ranges_str): # Gunakan ekspresi reguler untuk mencocokkan semua blok CIDR ip_pattern = re.compile(r'\d+\.\d+\.\d+\.\d+/\d\d') ip_list = ip_pattern.findall(ip_ranges_str) formatted_ips = [f" set_real_ip_from {ip};" for ip in ip_list] output = "\n".join(formatted_ips) return output ip_ranges_str = "Blok CIDR balik ke asal WAF dalam format string" formatted_output = format_ip_ranges(ip_ranges_str) print(formatted_output)
Ubah format log.
Buka file konfigurasi
nginx.confdan temukanlog_formatdalam konfigurasiHTTP.Dalam
log_format, ganti bidangremote-addressdengan bidangx-forwarded-for.Berikut ini adalah format log setelah perubahan:
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" ';
Jalankan perintah
nginx -s reloaduntuk memulai ulang NGINX.Periksa apakah konfigurasi berlaku.
Jalankan perintah curl berikut untuk mensimulasikan permintaan:
curl -H "X-Forwarded-For: 1.2.3.4" http://example.comJalankan perintah berikut untuk memeriksa log akses NGINX dan konfirmasi apakah alamat IP klien diambil:
tail -f access.log
Konfigurasikan server IIS 6
Internet Information Services (IIS) 6 menggunakan modul F5XForwardedFor untuk mengambil alamat IP asal klien. Untuk menginstal modul F5XForwardedFor, ikuti langkah-langkah berikut:
Salin file
F5XForwardedFor.dlldari direktorix86\Releaseataux64\Releaseke direktori kustom sepertiC:\ISAPIFilters\x86atauC:\ISAPIFilters\x64.CatatanPastikan proses IIS memiliki izin baca dan tulis pada direktori kustom.
Jika file
F5XForwardedFor.dlltidak ada di direktori x86\Release atau x64\Release, klik F5XForwardedFor.dll untuk mengunduh dan menyalin file ke direktori kustom.
Buka IIS Manager, temukan situs web, klik kanan situs web, dan pilih Properties.
Pada tab ISAPI Filters, klik Add. Konfigurasikan parameter berikut dan klik OK.
Dalam contoh ini, server yang menjalankan sistem operasi 32-bit digunakan.
Filter name: Masukkan
x_forwarded_for_x86.Executable: Masukkan jalur lengkap file
F5XForwardedFor.dll. Contoh:C:\ISAPIFilters\x86\F5XForwardedFor.dll.
Mulai ulang IIS 6 agar konfigurasi berlaku.
Konfigurasikan server IIS 7
Server IIS 7 menggunakan modul F5XForwardedFor untuk mengambil alamat IP asal klien. Untuk menginstal modul F5XForwardedFor, ikuti langkah-langkah berikut:
Salin file
F5XFFHttpModule.dlldanF5XFFHttpModule.inidari direktorix86\Releaseataux64\Releaseke direktori kustom sepertiC:\x_forwarded_for\x86atauC:\x_forwarded_for\x64.CatatanPastikan proses IIS memiliki izin baca dan tulis pada direktori kustom.
Jika file
F5XForwardedFor.dlldanF5XFFHttpModule.initidak ada di direktori x86\Release atau x64\Release, klik F5XForwardedFor untuk mengunduh file tersebut.
Buka IIS Manager dan klik dua kali Module di bagian IIS Server.
Pada halaman Module, klik Configure Local Module di bagian Aksi di sebelah kanan.
Dalam kotak dialog Configure Local Module, klik Register. Konfigurasikan parameter berikut dan klik OK.
Dalam contoh ini, server yang menjalankan sistem operasi 32-bit digunakan.
Name: Masukkan
x_forwarded_for_x86.Path: Masukkan jalur lengkap file
F5XFFHttpModule.dll. Contoh:C:\x_forwarded_for\x86\F5XFFHttpModule.dll.
Dalam kotak dialog Configure Local Module, pilih modul yang baru didaftarkan dan klik OK.
Di bagian ISAPI and CGI Restrictions, tambahkan file DLL yang didaftarkan dan atur Restriction ke Allow.
Mulai ulang IIS 7 agar konfigurasi berlaku.
Konfigurasikan server Apache
Configure Apache servers in Windows
Paket instalasi Apache 2.4 dan versi lebih tinggi menyediakan file modul remoteip_module bernama mod_remoteip.so. Anda dapat menggunakan modul ini untuk mengambil alamat IP asal klien.
Di folder konfigurasi tambahan Apache (
conf/extra/), buat file konfigurasi bernamahttpd-remoteip.conf.CatatanAnda dapat mengimpor file konfigurasi
remoteip.confuntuk memuat konfigurasi terkait. Ini mengurangi jumlah kali Anda memodifikasi filehttpd.confdan mencegah pengecualian layanan akibat kesalahan operasi.Tambahkan konten berikut ke file konfigurasi
httpd-remoteip.conf:# Muat modul mod_remoteip.so LoadModule remoteip_module modules/mod_remoteip.so # Konfigurasikan header RemoteIPHeader RemoteIPHeader X-Forwarded-For # Tentukan blok CIDR balik ke asal RemoteIPInternalProxy <ip_range1> <ip_range2> ... <ip_rangex><ip_range1>,<ip_range2>, dan<ip_rangex>dalam konfigurasi menentukan blok CIDR balik ke asal WAF. Untuk mendapatkan semua blok CIDR balik ke asal WAF, masuk ke Konsol WAF dan pilih grup sumber daya dan wilayah tempat instans WAF diterapkan. Anda dapat memilih Chinese Mainland atau Outside Chinese Mainland untuk wilayah. Di panel navigasi di sebelah kiri, klik . Pada tab CNAME Record, klik Back-to-origin CIDR Blocks.Pisahkan beberapa blok CIDR balik ke asal dengan spasi. Misalnya, jika blok CIDR balik ke asal server proxy mencakup 10.0.0.1, 10.0.0.2, dan 10.0.0.3, tentukan blok CIDR dalam format berikut:
RemoteIPInternalProxy 10.0.0.1 10.0.0.2 10.0.0.3Tambahkan konten berikut ke file konfigurasi conf/httpd.conf:
Include conf/extra/httpd-remoteip.confKonfigurasi sebelumnya menentukan bahwa konten file konfigurasi
httpd-remoteip.confdimasukkan ke conf/httpd.conf.Ubah format log dalam file konfigurasi
httpd.conf.LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%a %l %u %t \"%r\" %>s %b" commonMulai ulang Apache agar konfigurasi berlaku.
Configure Apache servers in Linux
Lakukan langkah-langkah sebelumnya untuk menambahkan modul remoteip_module (mod_remoteip.so) dan mengonfigurasi format log untuk mengambil alamat IP asal klien. Modul remoteip_module adalah modul bawaan Apache 2.4 dan versi lebih tinggi.
Jika versi Apache lebih awal dari 2.4, instal modul pihak ketiga bernama mod_rpaf untuk mengambil alamat IP asal klien.
Instal modul mod_rpaf.
wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz tar zxvf mod_rpaf-0.6.tar.gz cd mod_rpaf-0.6 /alidata/server/httpd/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.cTambahkan konten berikut ke file konfigurasi
/alidata/server/httpd/conf/httpd.confApache:LoadModule rpaf_module modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname On RPAFproxy_ips <rpaf IP address> RPAFheader X-Forwarded-For<rpaf IP address>dalam konfigurasi adalah alamat IP modul mod_rpaf. Anda dapat memeriksa alamat IP di log Apache. Jangan gunakan alamat IP publik server proxy. Dalam banyak kasus, dua alamat IP termasuk. Contoh:LoadModule rpaf_module modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname On RPAFproxy_ips 10.XX.XX.65 10.XX.XX.131 RPAFheader X-Forwarded-ForMulai ulang Apache agar konfigurasi berlaku.
/alidata/server/httpd/bin/apachectl restart
Untuk informasi lebih lanjut tentang modul Apache, lihat Dokumentasi Bantuan Apache.
Konfigurasikan server Tomcat
Server Tomcat menggunakan header X-Forwarded-For untuk mengambil alamat IP asal klien.
Buka file konfigurasi
tomcat/conf/server.xml.Modifikasi fitur logging AccessLogValve berdasarkan konfigurasi berikut:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts="false"/>
Konfigurasikan kontainer Kubernetes
Jika layanan Anda diterapkan pada kontainer Kubernetes, Kubernetes mencatat alamat IP asal klien di bidang X-Original-Forwarded-For dan blok CIDR balik ke asal WAF di bidang X-Forwarded-For. Untuk mendapatkan alamat IP asal klien, Anda harus memodifikasi file konfigurasi kontainer dan mengaktifkan pengontrol Ingress untuk menambahkan alamat IP ke bidang X-Forwarded-For.
Untuk memodifikasi file konfigurasi kontainer, ikuti langkah-langkah berikut:
Jalankan perintah berikut untuk memodifikasi file konfigurasi
kube-system/nginx-configuration:kubectl -n kube-system edit cm nginx-configurationTambahkan konten berikut ke file konfigurasi:
compute-full-forwarded-for: "true" forwarded-for-header: "X-Forwarded-For" use-forwarded-headers: "true"Simpan file konfigurasi.
Konfigurasi berlaku segera setelah Anda menyimpan file konfigurasi. Kemudian, pengontrol Ingress menambahkan alamat IP asal klien ke bidang X-Forwarded-For.
Ganti bidang yang digunakan untuk mendapatkan alamat IP asal klien dengan bidang X-Original-Forwarded-For.