Một dịch vụ lắng nghe trên 127.0.0.1:1080. Một quy tắc DNAT chuyển lưu lượng đến tới địa chỉ đó, nhưng kết nối vẫn thất bại. Dịch vụ có thể khỏe mạnh và quy tắc NAT có thể khớp: các địa chỉ loopback của IPv4 được xử lý định tuyến đặc biệt.

route_localnet của Linux quyết định liệu các địa chỉ 127/8 có bị coi là địa chỉ Sao Hỏa trong quá trình định tuyến hay không. Giá trị mặc định giữ nguyên ranh giới loopback thông thường. Một ngoại lệ riêng cho giao diện cụ thể có thể liên quan tới thiết kế chuyển hướng cục bộ có chủ đích.

Điều đó giải thích vì sao một quy tắc chạy được trên máy khác lại có thể phụ thuộc vào sysctl mà bạn không sao chép. Nhưng nó không biện minh cho việc bật tùy chọn này ở mọi nơi.

Giả định bảo mật thay đổi theo tuyến đường

Việc gắn với loopback thường được dùng vì một thành phần phụ trợ không có xác thực máy khách độc lập. Nếu lưu lượng đến từ giao diện khác có thể được định tuyến tới đó, chỉ địa chỉ gắn kết không còn mô tả đối tượng có thể tiếp cận. Hãy giới hạn nguồn vào, đích và cổng trong bộ quy tắc thực tế, kể cả lưu lượng tự nhận là địa chỉ nguồn hoặc đích loopback khi có liên quan.

Hãy xem lại không gian tên mạng chứa dịch vụ. Loopback của container không phải loopback của máy chủ, và việc thay đổi thiết lập giao diện máy chủ không tự động tạo ra trình lắng nghe trong container.

rp_filter trả lời một câu hỏi khác về kiểm chứng đường nguồn. Tắt nó trên toàn cục không phải là thay thế chung cho việc hiểu định tuyến loopback. Tương tự, ip_nonlocal_bind liên quan tới việc gắn socket với địa chỉ không cục bộ, không phải làm cho đường DNAT này đúng.

Cuối cùng, giao thức được chuyển hướng phải phù hợp với trình lắng nghe. Gửi lưu lượng HTTP hoặc TLS thô tới cổng SOCKS vẫn cần bộ chuyển đổi; một ngoại lệ định tuyến không thể cung cấp phần thương lượng còn thiếu.

Bài viết liên quan