HAProxy - làm thế nào để nối ip máy khách trong các tiêu đề X-Client-IP và X-Forwarded-For?


10

Tôi có một vấn đề với máy chủ HAProxy. Tôi muốn chuyển tiếp trong tiêu đề một IP khách hàng. Tôi gần như đã làm nó, nhưng có một trường hợp thú vị và tôi không thể tìm ra nó. Tôi cần viết IP của khách hàng ở 2 vị trí trong tiêu đề, trong thẻ X-CLIENT-IP và X-FORWARDED-FOR.

Vấn đề là: Khi tôi sử dụng

option http-server-close
option forwardfor

Trên máy chủ mục tiêu tôi thấy trong tiêu đề X-FORWARDED-FOR = xxx.xxx.xxx.xxx (ip máy khách) nhưng không có tiêu đề x-client-ip.

Khi tôi sử dụng:

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

Trên máy chủ mục tiêu, tôi thấy tiêu đề X-CLIENT-IP = xxx.xxx.xxx (IP máy khách) nhưng X-FORWARDED-FOR = xxx.xxx.xxx.xxx (HAProxy ip)

Tôi cần xem trên tiêu đề mục tiêu trong đó X-CLIENT-IP và X-FORWARDED-FOR có giá trị của IP khách hàng.

Tôi cố gắng trộn các cấu hình như

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

Không hoàn hảo. Tôi cũng không thể cài đặt bất kỳ mô-đun. Mục tiêu là IIS.

Có ý kiến ​​gì không? :

Câu trả lời:


12

Bạn có thể thử thiết lập tiêu đề tùy chỉnh, như thế này:

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

Hoặc, bạn thậm chí có thể sao chép nó từ tiêu đề X-Forwarded-For, tôi nghĩ cú pháp sẽ có dạng như sau:

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

Tùy chọn thứ hai cho tôi trong tiêu đề x-client-ip = req.hdr_ip (% 5bX-Forwarded-For% 5d), vì vậy có gì đó không đúng. Nhưng tôi sẽ thử đầu tiên.
KacproSo

Tiêu đề http-request set-title X-Client-IP% [src] hoạt động hoàn hảo.
KacproSo

Ví dụ cuối cùng là sai, quy tắc đúng là: http-request set-header X-Client-IP% [req.hdr_ip (X-Forwarded-For)]
Rfraile

X-Client-IP và X-Forwarded-For có các mục đích khác nhau. Không an toàn khi sao chép X-Forwarded-For, vì HAProxy có thể trả về giá trị được gửi bởi khách hàng.
Der_Meister

5

Nếu bạn muốn sử dụng cả hai, bạn sẽ cần thêm thứ hai với một http-requesttừ khóa.

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

Tôi nghĩ rằng tiêu đề thiết lập là tốt hơn để loại bỏ các tiêu đề độc hại được gửi từ máy khách.
Der_Meister

@Der_Meister Bạn có thể đúng, nhưng tôi không thấy điều đó có liên quan đến câu hỏi hoặc câu trả lời này như thế nào. Quan tâm đến công phu?
GregL

1
Mục đích của tiêu đề X-Client-IP là để cho phụ trợ địa chỉ IP thực của kết nối, không phải là giá trị ngẫu nhiên từ một tiêu đề đến. Nó không được đề cập trong câu hỏi, tôi chỉ muốn cảnh báo những độc giả tương lai.
Der_Meister

Một lần nữa, bạn có thể đúng nhưng trong ví dụ này, máy khách X-CLIENT-IPkhông được đặt, mà là HAProxy dựa trên IP nguồn. Tôi muốn đề nghị để lại những ý kiến về các vấn đề mà nó có liên quan để không làm độc giả nhầm lẫn.
GregL

add-headerkhông loại bỏ X-CLIENT-IPcái có thể đã được thiết lập bởi khách hàng. Đây là lý do tại sao @Der_Meister khuyên bạn nên sử dụng set-headerthay thế. Tôi đề nghị chỉnh sửa câu trả lời của bạn để sử dụng set-headerthay thế.
nhụy hoa

0

Câu trả lời được đề xuất ở trên không hoạt động cho KacproSo chỉ cần đọc giá trị bằng cách thêm &[...], vì vậy điều này sẽ hoạt động tốt:

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

0

Thử trên HAproxy 1.7 đây là cú pháp chính xác để thực hiện công việc này, không có các ô vuông xung quanh X-Forwarded-For

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

-2

Bạn có thể cài đặt một mô-đun gọi là mod_rpaf trên (các) máy chủ phụ trợ của bạn. Điều này sao chép IP X-FORWARDED-FOR sang X-CLIENT-IP. Để biết thêm thông tin xem điều này . Trên Windows, bạn nên có các mô-đun tương tự, giống như các bộ lọc X-Forwarded-For ASAPI.


Anh ta không thể cài đặt bất kỳ mô-đun nào ..
neutrinus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.