Ai đó hỏi tại sao người dùng VPN lại xuất hiện trong nhật ký ứng dụng với địa chỉ thuộc về cổng, hoặc với địa chỉ đã thay đổi sau bữa trưa. Câu trả lời bắt đầu từ việc giá trị này là gì: một mục do máy chủ web đặt vào môi trường yêu cầu. Nó không phải truy vấn vào đường hầm, không phải danh tính chứng chỉ, và không phải lời hứa rằng con số thuộc về một người. Đọc nó như bất kỳ điều nào trong ba điều đó sẽ tạo ra những câu trả lời tự tin sai theo nhiều cách khác nhau.

Giá trị đến từ máy chủ, không từ đường hầm

PHP nhận môi trường yêu cầu từ thứ đã thực thi tập lệnh. Tài liệu tham chiếu biến máy chủ của PHP mô tả các mục này do máy chủ web tạo ra, với khả năng sẵn có phụ thuộc vào cách yêu cầu đến.

Một tập lệnh chạy như hook dòng lệnh của VPN là bối cảnh thực thi hoàn toàn khác. Nó không có yêu cầu web, không có socket máy khách và không có REMOTE_ADDR, đó là lý do mã web được sao chép vào hook cho ra giá trị rỗng thay vì sai. Hook có môi trường riêng do daemon lấp đầy và được ghi chép riêng. Với tay tới REMOTE_ADDR ở đó là với tay tới một biến chưa bao giờ được đặt.

Hãy giữ sự khác biệt đó trong đầu trước khi so sánh hai nhật ký. Có thể bạn đang so sánh một yêu cầu trang với một hook, và đó hoàn toàn không phải so sánh. Hãy kiểm tra bối cảnh thực thi trước và địa chỉ sau.

Đi hết đường đi của yêu cầu trước khi tin con số

Địa chỉ được báo cáo là đối tác của kết nối mà máy chủ web đã thấy. Chen bất cứ thứ gì giữa máy khách và máy chủ đó và đối tác thay đổi. Dịch địa chỉ, kết thúc kết nối và cân bằng tải mỗi thứ đều đẩy quan sát xa người dùng thêm một chặng.

Bốn đường đi phổ biến tạo ra bốn quan sát khác nhau.

Path to the listenerWhat can be reported
Client routed straight to the private listener, no translationThe client's tunnel address
Gateway translates the source before forwardingThe gateway's translated address
Reverse proxy terminates the client and opens its own backend connectionThe proxy's backend address
Load balancer in front of two proxiesWhichever hop the server treats as its peer

Hãy ghi lại đường đi kèm tên đích, họ địa chỉ và từng điểm dịch. Không có bản đồ đó, một giá trị đúng và một giá trị sai trông giống hệt nhau trên một dòng nhật ký. Hai dòng sơ đồ tiết kiệm cả buổi chiều tranh luận.

Việc thay thế chỉ xảy ra ở nơi được cấu hình

Máy chủ hoặc khung có thể cố ý thay thế địa chỉ của máy khách. Mô-đun remote-IP của Apache và mô-đun real-IP của NGINX đều làm việc này, và giá trị mà PHP nhận được phụ thuộc vào cấu hình đó cùng các tham số truyền cho trình xử lý tập lệnh.

Vì vậy REMOTE_ADDR không phải lúc nào cũng là đối tác TCP nguyên vẹn. Đó là đối tác theo cách máy chủ chọn báo cáo sau khi áp dụng chính sách của mình. Sự khác biệt đó quyết định giá trị là bằng chứng hay chỉ là trang trí.

Hỏi chủ máy chủ trường nào là có thẩm quyền trong triển khai này và đối tác gốc được giữ lại thế nào khi việc thay thế xảy ra. Nếu không ai trả lời được, nhật ký vẫn chưa chứng minh được gì.

Đừng đọc các tiêu đề chuyển tiếp một cách tin tưởng

Bên gọi có thể tự gửi tiêu đề chuyển tiếp. Coi mục đầu tiên phân tách bằng dấu phẩy là địa chỉ người dùng đã xác minh là quyết định tin bất kỳ ai kết nối, đúng ngược lại mục đích của tiêu đề. Tiêu đề mô tả một chuỗi, và chỉ một tầng đáng tin mới bảo lãnh được chuỗi đó.

Hãy dùng hỗ trợ proxy tin cậy của máy chủ hoặc khung với chuỗi proxy thực được cấu hình, và để nó loại bỏ các giá trị từ nguồn ngoài chuỗi đó. Việc phân tích viết tay là nơi phần lớn các lỗi thú vị trú ngụ.

Địa chỉ do proxy báo cáo cũng không thay đổi nguồn gói tin mà một tường lửa phía trên nhìn thấy. Hãy giữ siêu dữ liệu HTTP và lọc mạng như hai quan sát riêng, vì chúng trả lời hai câu hỏi khác nhau.

Dùng danh tính ứng dụng để ra quyết định

Đối với quyền truy cập hồ sơ người dùng, hãy dựa vào chủ thể đã xác thực và các quy tắc phân quyền của ứng dụng. Địa chỉ nội bộ có thể được cấp lại, và một địa chỉ đã dịch có thể đại diện cho hàng trăm người dùng đồng thời. Không thuộc tính nào trong số đó là thứ một phép kiểm tra địa chỉ có thể sửa được.

Nếu vận hành cần gắn một yêu cầu với một phiên VPN, hãy nối địa chỉ quan sát được và dấu thời gian với hồ sơ phiên có thẩm quyền theo mô hình dịch mà bạn đã ghi chép. Điều đó tạo ra một liên kết bạn có thể bảo vệ; chỉ một địa chỉ thì không.

Để chẩn đoán, hãy ghi lại vài trường cần thiết thay vì toàn bộ mảng máy chủ, vì mảng có thể mang tiêu đề và tài liệu xác thực. Kết luận hữu ích nói giá trị này có nghĩa gì trong triển khai này, chứ không phải giá trị nào trông giống máy khách nhất.

Bài viết liên quan