Tài liệu

Tùy chọn Proxy Protocol

Thời gian đọc 3 phút Gói: Nalix.Network / Nalix.Runtime
Trên trang này

ProxyProtocolOptions cấu hình việc phân tích header PROXY Protocol v1/v2 để lấy IP client thật khi máy chủ nằm sau bộ cân bằng tải (HAProxy, AWS NLB, v.v.).

Ánh xạ mã nguồn

  • src/Nalix.Network/Options/ProxyProtocolOptions.cs
  • src/Nalix.Network/Internal/Protocol/ProxyProtocolParser.cs
  • src/Nalix.Network/Listeners/TcpListener/TcpListener.ProxyProtocol.cs

Giá trị mặc định và kiểm tra hợp lệ

Thuộc tínhMặc địnhPhạm vi hợp lệMô tả
EnabledfalseBooleanBật phân tích header PROXY Protocol v1/v2 để lấy IP client thật.
RequireTrustedProxyfalseBooleanChỉ chấp nhận header PROXY từ các IP có trong danh sách Trusted Proxies; loại bỏ mọi nguồn khác.
HeaderTimeoutMs2000100..30000Thời gian tối đa tính bằng mili giây để chờ header PROXY sau khi TCP accept.
MaxPendingProxyConnections10241..100_000Số kết nối đồng thời tối đa đang chờ header PROXY (chống DDoS).

Validate() chạy kiểm tra DataAnnotation.

Khi nào nên bật

Bật ProxyProtocolOptions.Enabled khi máy chủ được triển khai sau một bộ cân bằng tải TCP có chèn header PROXY. Nếu không, ConnectionGuard và giới hạn tốc độ sẽ thấy IP của bộ cân bằng tải thay vì IP client thật.

Các tình huống thường gặp:

  • HAProxy ở chế độ TCP
  • AWS Network Load Balancer (NLB)
  • nginx được cấu hình với proxy_protocol on
  • Bất kỳ proxy nào gửi header PROXY v1 (văn bản) hoặc v2 (nhị phân)

Cách hoạt động

  1. Sau khi TCP accept, listener đọc những byte đầu tiên của kết nối.
  2. Nếu các byte khớp với header PROXY v1 (PROXY TCP4 ...) hoặc v2 (magic nhị phân \x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A), parser trích xuất IP và cổng client thật.
  3. Nếu RequireTrustedProxy là true, IP remote của kết nối được kiểm tra với danh sách Trusted Proxies trước khi chấp nhận header PROXY.
  4. Nếu không có header PROXY nào đến trong HeaderTimeoutMs, kết nối bị hủy.
  5. IP đã trích xuất thay thế remote endpoint của socket cho mọi kiểm soát truy cập, giới hạn tốc độ và theo dõi kết nối ở các thành phần phía sau.

Ghi chú bảo mật

  • MaxPendingProxyConnections ngăn việc cạn kiệt bộ nhớ do tấn công slow-loris, khi kẻ tấn công giữ kết nối mở mà không gửi header PROXY.
  • Parser kiểm tra độ dài header v2 và từ chối các header bị lỗi hoặc quá kích thước.

API liên quan