Setelah situs web Anda ditambahkan ke Web Application Firewall (WAF), WAF menyaring permintaan akses ke situs web Anda 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 dari klien. Topik ini menjelaskan cara mengonfigurasi server aplikasi web dan kontainer Kubernetes untuk mengambil alamat IP asal dari klien. Server aplikasi web meliputi server NGINX, IIS 6, IIS 7, Apache, dan Tomcat.
Latar Belakang
Header X-Forwarded-For digunakan untuk mencatat alamat IP asal dari klien. WAF menambahkan Header X-Forwarded-For ke Header permintaan HTTP sebelum meneruskan permintaan akses ke server hop berikutnya dalam format X-Forwarded-For:Alamat IP Klien. Jika permintaan akses melewati beberapa server proxy perantara seperti WAF, Anti-DDoS Pro atau Anti-DDoS Premium, dan Alibaba Cloud CDN, Header X-Forwarded-For mencatat alamat IP asal dari klien dan alamat IP server proxy perantara. Header tersebut mencatat beberapa alamat IP yang dipisahkan dengan 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 dari klien.
Berikut ini menjelaskan cara mengonfigurasi Header X-Forwarded-For pada server NGINX, IIS 6, IIS 7, Apache, dan Tomcat, serta pada kontainer Kubernetes.
Sebelum memulai, pastikan Anda telah mencadangkan lingkungan yang ada, termasuk snapshot Instance ECS dan file konfigurasi server aplikasi web.
Konfigurasi server NGINX
Server NGINX menggunakan modul http_realip_module untuk mengambil alamat IP asal dari klien. Gunakan metode berikut untuk menginstal modul http_realip_module dan memodifikasi file konfigurasi NGINX.
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.
CatatanModul ini tidak terinstal saat NGINX diinstal menggunakan paket instalasi cepat.
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
default.conf.Tambahkan konten berikut ke
location / {}:set_real_ip_from <ip_range1>; set_real_ip_from <ip_range2>; ... set_real_ip_from <ip_rangex>; real_ip_header X-Forwarded-For;<ip_range1>,<ip_range2>, dan<ip_rangex>dalam konten adalah blok CIDR balik ke asal dari WAF. Untuk informasi lebih lanjut tentang blok CIDR balik ke asal dari WAF, lihat Mengizinkan Permintaan dari Blok CIDR Balik ke Asal dari WAF.Masukkan satu blok CIDR balik ke asal dalam setiap baris. Anggaplah blok CIDR balik ke asal dari WAF mencakup 10.0.0.1, 10.0.0.2, dan 10.0.0.3. Tambahkan konten berikut ke location / {}:
set_real_ip_from 10.0.0.1; set_real_ip_from 10.0.0.2; set_real_ip_from 10.0.0.3; real_ip_header X-Forwarded-For;
Modifikasi format log.
Buka file konfigurasi
nginx.confdan temukanlog_formatdalam konfigurasiHTTP.Dalam
log_format, ganti bidangremote-addressdengan bidangx-forwarded-for.Konten berikut menunjukkan format log yang dimodifikasi:
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.
Konfigurasi server IIS 6
Server IIS 6 menggunakan modul F5XForwardedFor untuk mengambil alamat IP asal dari klien. Anda dapat melakukan operasi berikut untuk menginstal modul F5XForwardedFor.
Salin file
F5XForwardedFor.dlldari direktorix86\Releaseataux64\Releaseke direktori kustom sepertiC:\ISAPIFilters\x86danC:\ISAPIFilters\x64.CatatanPastikan proses Internet Information Services (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 mengunduhnya dan salin 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.
Anggaplah server Anda menjalankan sistem operasi 32-bit.
Filter name: Masukkan
x_forwarded_for_x86.Executable: Masukkan jalur lengkap dari
F5XForwardedFor.dll. Contoh:C:\ISAPIFilters\x86\F5XForwardedFor.dll.
Mulai ulang server IIS 6 agar konfigurasi diterapkan.
Konfigurasi server IIS 7
Server IIS 7 menggunakan modul F5XForwardedFor untuk mengambil alamat IP asal dari klien. Anda dapat melakukan operasi berikut untuk menginstal modul F5XForwardedFor.
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-file tersebut tidak ada di direktori x86\Release atau x64\Release, klik F5XForwardedFor untuk mengunduhnya.
Di bagian IIS Server, klik dua kali Module.
Pada halaman Module, klik Configure Local Module di bagian Actions di sebelah kanan.
Di kotak dialog Configure Local Module, klik Register. Tentukan parameter berikut dan klik OK.
Anggaplah server Anda menjalankan sistem operasi 32-bit.
Name: Masukkan
x_forwarded_for_x86.Path: Masukkan jalur lengkap dari modul
F5XFFHttpModule.dll. Contoh:C:\x_forwarded_for\x86\F5XFFHttpModule.dll.
Di kotak dialog Configure Local Module, pilih modul yang baru saja didaftarkan dan klik OK.
Di bagian ISAPI and CGI Restrictions, tambahkan file DLL yang didaftarkan dan atur Restriction ke Allow.
Mulai ulang server IIS 7 agar konfigurasi diterapkan.
Konfigurasi server Apache
Configure Apache servers in Windows
Paket instalasi Apache 2.4 dan versi selanjutnya menyediakan file modul remoteip_module bernama mod_remoteip.so. Anda dapat menggunakan modul ini untuk mengambil alamat IP asal dari klien.
Buat file konfigurasi bernama
httpd-remoteip.confdi folder konfigurasi ekstra Apache (conf/extra/).CatatanAnda dapat memuat konfigurasi terkait dengan mengimpor file konfigurasi
remoteip.conf. Ini mengurangi jumlah kali Anda memodifikasi filehttpd.confdan menghindari 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 konten adalah blok CIDR balik ke asal dari WAF. Untuk informasi lebih lanjut tentang blok CIDR balik ke asal dari WAF, lihat Mengizinkan Permintaan dari Blok CIDR Balik ke Asal dari WAF.Pisahkan beberapa blok CIDR balik ke asal dengan spasi. Anggaplah blok CIDR balik ke asal dari server proxy mencakup 10.0.0.1, 10.0.0.2, dan 10.0.0.3. Gunakan format serupa dengan 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.confKonten di atas menyisipkan file konfigurasi
httpd-remoteip.confke conf/httpd.conf.Ubah format log di 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 diterapkan.
Configure Apache servers in Linux
Lakukan langkah-langkah di atas untuk menambahkan modul remoteip_module (mod_remoteip.so) dan konfigurasikan format log untuk mengambil alamat IP asal dari klien. Modul remoteip_module adalah modul bawaan Apache 2.4 dan versi selanjutnya.
Jika versi Apache lebih lama dari 2.4, instal modul pihak ketiga mod_rpaf untuk mengambil alamat IP asal dari 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.confdari Apache: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 konten adalah alamat IP dari modul mod_rpaf. Anda dapat menanyakan alamat IP spesifik di log Apache. Jangan gunakan alamat IP dari server proxy. Dalam banyak kasus, dua alamat IP disertakan, seperti yang ditunjukkan dalam contoh berikut: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 diterapkan.
/alidata/server/httpd/bin/apachectl restart
Untuk informasi lebih lanjut tentang modul Apache, lihat Dokumentasi Bantuan Apache.
Konfigurasi server Tomcat
Server Tomcat menggunakan Header X-Forwarded-For untuk mengambil alamat IP asal dari klien.
Buka file konfigurasi
tomcat/conf/server.xml.Modifikasi fitur logging AccessLogValve berdasarkan konten 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"/>
Konfigurasi kontainer Kubernetes
Jika instance ECS Anda diterapkan di Kubernetes, Kubernetes mencatat alamat IP asal dari klien di bidang X-Original-Forwarded-For dan blok CIDR balik ke asal dari WAF di bidang X-Forwarded-For. Untuk mendapatkan alamat IP asal dari klien, Anda harus memodifikasi file konfigurasi kontainer untuk mengaktifkan pengontrol Ingress menambahkannya ke bidang X-Forwarded-For.
Anda dapat memodifikasi file konfigurasi kontainer dengan melakukan operasi 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 diterapkan segera setelah Anda menyimpan file konfigurasi. Kemudian, pengontrol Ingress menambahkan alamat IP asal dari klien ke bidang X-Forwarded-For.
Ubah bidang yang digunakan untuk mendapatkan alamat IP asal dari klien ke bidang X-Original-Forwarded-For.