Saya memiliki satu set server Nginx di belakang penyeimbang beban ELB Amazon. Saya menggunakan set_real_ip (dari HttpRealIpModule ) sehingga saya dapat mengakses alamat IP klien asal pada server ini (untuk melewati ke php-fpm dan untuk digunakan dalam HttpGeoIPModule ).
Tampaknya set_real_ip_from
dalam konfigurasi nginx hanya dapat menerima alamat IP. Namun, berkaitan dengan mesin ELB Amazon mengatakan:
Catatan: Karena set alamat IP yang terkait dengan LoadBalancer dapat berubah dari waktu ke waktu, Anda tidak boleh membuat catatan "A" dengan alamat IP tertentu. Jika Anda ingin menggunakan nama DNS yang ramah untuk LoadBalancer Anda alih-alih nama yang dihasilkan oleh layanan Elastic Load Balancing, Anda harus membuat catatan CNAME untuk nama DNS LoadBalancer, atau menggunakan Amazon Route 53 untuk membuat zona yang dihosting. Untuk informasi lebih lanjut, lihat Menggunakan Nama Domain Dengan Penyeimbangan Beban Elastis
Tetapi jika saya perlu memasukkan alamat IP saya tidak dapat menggunakan CNAME (baik milik amazon atau milik saya). Apakah ada solusi untuk masalah ini?
10.0.0.1/8
akan berfungsi meskipun mungkin ada sesuatu yang lebih spesifik)Praktik terbaik hari ini adalah menggunakan VPC, jadi, Anda akan mengetahui CIDR yang tepat untuk ELB Anda. Kemudian, Anda dapat menambahkan sesuatu seperti ini ke file konfigurasi Nginx Anda:
sumber
Gunakan VPC CIDR untuk
set_real_ip_from
Anda dapat menemukannya di konsol Amazon di bawah VPC => VPC Anda (ganti<your VPC CIDR here>
dengan itu):sumber
Mengatur rentang tepercaya ke 0.0.0.0/0 di Amazon ELB pasti akan membuat Anda mendapat masalah. Anda dapat menjamin bahwa permintaan berasal dari ELB jika Anda dapat mengkonfigurasi grup keamanan untuk server nginx Anda, tetapi permintaan asli akan berasal dari sumber yang memungkinkan (Amazon ELB adalah antarmuka publik).
Tes sederhana akan mengungkapkan ini:
Log pada server nginx Anda kemudian akan menampilkan 1.2.3.4 sebagai IP asli, yang merupakan spoofed. Lihat Rentang IP untuk IP pribadi internal Amazon ELB untuk jawaban yang lebih baik.
sumber
The realip_module menyatakan bahwa dalam kasus X-Forwarded-For, modul ini menggunakan alamat ip terakhir di X-Forwarded-For header untuk penggantian. Modul ini tidak akan berfungsi hanya saat
real_ip_header
danset_real_ip_form
sudah diatur. Ini karena modul ini akan menggunakan alamat IP proxy alih-alih IP klien. Untuk mengatasireal_ip_recursive
arahan ini harus diaktifkan.Lebih lanjut, jika Anda memiliki sertifikat SSL yang digunakan dan diperpanjang pada contoh (seperti katakan mari kita enkripsi atau sertifikat certbot). Otoritas sertifikat ini mungkin mencoba memvalidasi sertifikat tersebut melalui IPV6.
Jadi penting juga untuk memiliki IPV6. Jadi file konfigurasi Nginx juga harus berisi set_real_ip_dari alamat IPV6.
jika pembatasan keamanan tambahan berlaku, kami mungkin juga perlu menyertakan
set_real_ip_from
VPC CIDR (baik IPV4 dan IPV6) untuk subnet cloudfront / elb / ec2.sumber