HAProxy - cara menambahkan ip klien di header X-Client-IP dan X-Forwarded-For?


10

Saya memiliki masalah dengan server HAProxy. Saya ingin meneruskan dalam header IP klien. Saya hampir melakukannya, tetapi ada kasus yang menarik dan saya tidak bisa mengetahuinya. Saya perlu menulis IP klien di 2 tempat di header, di tag X-CLIENT-IP dan X-FORWARDED-FOR.

Masalahnya adalah: Saat saya gunakan

option http-server-close
option forwardfor

Pada server target saya lihat di header X-FORWARDED-FOR = xxx.xxx.xxx.xxx (ip klien) tetapi tidak ada header x-client-ip.

Ketika saya menggunakan:

option forwardfor header X-Client-IP
option http-server-close

Pada server target saya melihat header X-CLIENT-IP = xxx.xxx.xxx (IP klien) tetapi X-FORWARDED-FOR = xxx.xxx.xxx.xxx (HAProxy ip)

Saya perlu melihat pada header target di mana X-CLIENT-IP dan X-FORWARDED-FOR memiliki nilai IP klien.

Saya mencoba mencampur konfigurasi seperti

 option forwardfor
 option forwardfor header X-Client-IP
 option http-server-close

Tidak berpengaruh. Saya juga tidak bisa menginstal modul apa pun. Targetnya adalah IIS.

Ada ide? :(

Jawaban:


12

Anda dapat mencoba mengatur tajuk khusus, seperti ini:

http-request set-header X-Client-IP %[src]

Atau, Anda bahkan dapat menyalinnya dari header X-Forwarded-For, saya pikir sintaksnya akan seperti:

http-request set-header X-Client-IP req.hdr_ip([X-Forwarded-For])

Opsi kedua berikan saya di header x-client-ip = req.hdr_ip (% 5bX-Forwarded-For% 5d), jadi ada sesuatu yang salah. Tapi saya akan coba dulu.
KacproSo

Resolusi http-request set-header X-Client-IP% [src] berfungsi sempurna.
KacproSo

Contoh terakhir salah, aturan yang benar adalah: http-request set-header X-Client-IP% [req.hdr_ip (X-Forwarded-For)]
Rfraile

X-Client-IP dan X-Forwarded-For memiliki tujuan yang berbeda. Tidaklah aman untuk menyalin X-Forwarded-For, karena HAProxy dapat mengembalikan nilai yang dikirim oleh klien.
Der_Meister

5

Jika Anda ingin menggunakan keduanya, Anda harus menambahkan yang kedua dengan http-requestkata kunci.

# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]

Saya pikir set-header lebih baik untuk menghapus tajuk berbahaya yang dikirim dari klien.
Der_Meister

@Der_Meister Anda mungkin benar, tetapi saya tidak melihat bagaimana hal itu memiliki relevansi dengan pertanyaan atau jawaban ini. Peduli menguraikan?
GregL

1
Tujuan dari header X-Client-IP adalah untuk memberi tahu backend alamat IP asli dari koneksi, bukan nilai acak dari header yang masuk. Tidak disebutkan dalam pertanyaan, saya hanya ingin memperingatkan pembaca di masa depan.
Der_Meister

Sekali lagi, Anda mungkin benar tetapi dalam contoh ini, X-CLIENT-IPtidak diatur oleh klien, melainkan oleh HAProxy berdasarkan IP sumber. Saya sarankan meninggalkan komentar ini pada pertanyaan-pertanyaan di mana ia adalah relevan agar tidak pembaca bingung.
GregL

add-headertidak menghapus X-CLIENT-IPyang mungkin telah ditetapkan oleh klien. Inilah sebabnya mengapa @Der_Meister disarankan untuk menggunakannya set-header. Saya sarankan mengedit jawaban Anda untuk digunakan set-headersebagai gantinya.
pistache

0

Jawaban yang disarankan di atas yang tidak berfungsi untuk KacproSo hanya perlu membaca nilai dengan menambahkan &[...], jadi ini akan berfungsi dengan baik:

http-request set-header X-Client-IP %[req.hdr_ip([X-Forwarded-For])]

0

Mencoba pada HAproxy 1.7 ini adalah sintaks yang benar yang membuat ini bekerja, tanpa tanda kurung siku di sekitar X-Forwarded-For

   http-request set-header X-Client-IP %[req.hdr_ip(X-Forwarded-For)]

-2

Anda dapat menginstal modul bernama mod_rpaf di server backend Anda. Ini menyalin X-FORWARDED-FOR IP ke X-CLIENT-IP. Untuk informasi lebih lanjut, lihat ini . Pada Windows Anda harus memiliki modul yang serupa, seperti filter X-Forwarded-For ASAPI.


Dia tidak dapat menginstal modul apa pun ..
neutrinus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.