Hook kết nối là chính sách phiên, không phải bộ lọc gói
Hook kết nối của máy khách chạy một lần mỗi phiên và không bao giờ thấy tải trọng. Đặt việc chấp nhận ở nơi có phiên, và thay đổi nội dung ở nơi có yêu cầu.
Ai đó muốn xem máy khách gửi gì qua đường hầm, tìm thấy hook kết nối trong tài liệu và bắt đầu viết một script sẽ không bao giờ nhận được một gói nào. Hook là có thật và hữu ích, nhưng đơn vị công việc của nó là phiên, không phải byte. Chọn đúng thành phần là so sánh giữa ba nơi công việc có thể diễn ra, và câu hỏi quyết định là mỗi nơi thực sự nhìn thấy đơn vị nào.
Hook nhận được gì, và không bao giờ nhận được gì
Hook kết nối máy khách chạy một lần khi một máy khách đã xác thực thiết lập phiên, trong ngữ cảnh tiến trình của máy chủ, với các đối số được ghi tài liệu và giá trị môi trường như tên chung và địa chỉ được cấp. Nó có thể ghi cấu hình cho từng máy khách, đưa ra quyết định chấp nhận, cấp phát một tài nguyên bên ngoài hoặc ghi nhận rằng kết nối đã xảy ra. Điều nó không thể làm là quan sát lưu lượng, vì khi gói đầu tiên đi qua đường hầm thì hook đã trả về rồi.
Đây không phải là một hạn chế cần lách. Một callback phiên cố xử lý luồng sẽ phải chạy suốt vòng đời kết nối, và hợp đồng script của daemon không được xây cho hình dạng đó. Hãy hỏi hook để làm gì trước khi quyết định rằng nó cản đường.
Việc kết nối lại cũng quan trọng. Máy khách rớt rồi kết nối lại là một phiên mới, nên mọi thứ hook cấp phát phải idempotent hoặc đi kèm một sự kiện ngắt kết nối dọn dẹp. Trạng thái rò rỉ mỗi lần kết nối lại là lỗi đầu tiên thường gặp trong thiết kế dựa trên hook.
Chính sách phiên thuộc về hook
Chấp nhận là công việc tự nhiên của hook. Bạn biết ai đã kết nối, từ đâu và với chứng chỉ nào, và bạn có thể quyết định phiên này nên tiếp tục hay bị từ chối. Quyết định đó rẻ, chỉ xảy ra một lần và không cần nhìn một byte tải trọng nào.
Việc gán cấu hình cũng cùng hình dạng. Hook có thể chọn địa chỉ của máy khách, đẩy các tùy chọn phù hợp với danh tính đó hoặc ghi một đoạn mà máy chủ đọc cho máy khách này. Vì quyết định là theo phiên, nó vẫn dễ hiểu khi có gì đó sai và ai đó phải giải thích tại sao một máy khách cụ thể nhận một địa chỉ cụ thể.
Ghi nhận là sự phù hợp thứ ba. Một mục kiểm toán nói rằng một phiên đã được chấp nhận, cùng danh tính và thời gian, thuộc về đúng chỗ này. Đó không phải nhật ký lưu lượng và không nên giả vờ là như vậy. Nếu sau này ai đó hỏi máy khách đã làm gì bên trong đường hầm, câu trả lời phải đến từ nơi khác.
Công việc gói thuộc về một đường đi của gói
Nếu yêu cầu là xem hoặc sửa byte đang bay, thành phần phải nằm trên đường chuyển tiếp: một quy tắc tường lửa có hàng đợi, một hook điều khiển lưu lượng hoặc một bộ chuyển tiếp trong không gian người dùng. Những cơ chế đó thấy gói, và chúng có trạng thái, chế độ lỗi và hồ sơ hiệu năng riêng.
Sửa tải trọng ở lớp đó khó hơn đọc nó. Đổi một byte có thể làm vô hiệu một trường độ dài, một checksum hoặc một máy trạng thái giao thức, và đường hầm lớp ba không bảo vệ bạn khỏi bất kỳ điều nào trong số đó. Nó chỉ có nghĩa là các tiêu đề bên ngoài không phải là thứ bạn đang sửa. Hãy tính vào ngân sách công việc sửa chữa đó trước khi hứa với ai một bản viết lại nội dung.
Bắt gói trên giao diện là công cụ rẻ nhất trong nhóm này, và đó là quan sát, không phải trình biên tập. Người ta nhầm lẫn hai thứ vì cả hai đều được mô tả là xem lưu lượng, nhưng bắt gói tạo ra một tệp còn đường đi của gói tạo ra một quyết định.
Thay đổi ứng dụng thuộc về ứng dụng
Khi mục tiêu là thay đổi nội dung của một yêu cầu hoặc cách một phản hồi được hình thành, nơi đúng là chính dịch vụ hoặc một proxy cố ý kết thúc giao thức. Những thành phần đó đã hiểu yêu cầu, phản hồi và việc xác thực mà ứng dụng mong đợi, và đó chính là ngữ cảnh mà bộ lọc gói thiếu.
Dịch địa chỉ nằm ở cuối danh sách này vì một lý do. Nó viết lại địa chỉ và cổng và để tải trọng yên, nên nó không phải công cụ nội dung, dù nó xuất hiện thường xuyên đến đâu trong một công thức cũng nhắc đến nội dung.
Giữ các ranh giới này tách biệt là điều làm cho một thiết kế có thể giải thích được. Chính sách phiên trong hook, xử lý gói trên đường đi của gói và thay đổi ứng dụng ở nơi giao thức được kết thúc có chủ đích: ba câu cũng phục vụ như danh sách kiểm tra cho việc rà soát.
Nơi TLS vẫn kết thúc cuộc trò chuyện
Một điều sống sót qua tất cả những điều trên: lưu lượng bên trong đường hầm mang HTTPS giữ mã hóa vận chuyển của riêng nó. Có khóa của VPN cho bạn gói IP bên trong và không cho bạn khóa phiên của trang web ở đầu bên kia.
Đó là lý do một hook không thể kiểm tra nội dung ngay cả về nguyên tắc, và đó là lý do đường đi của gói thấy văn bản mã hóa trừ khi việc triển khai cố ý kết thúc TLS bên trong. hợp đồng script mô tả những gì hook nhận được; nó không nói gì về tải trọng vì không có tải trọng để đưa.