Việc cho phép TCP 873 trên giao diện đường hầm không đẩy rsync đi qua OpenVPN, và cũng không khiến đầu kia chấp nhận mô-đun. Đường hầm mang một kết nối bên trong mà các quy tắc giao thức và đích của nó vẫn giữ nguyên như cũ. Vì vậy câu hỏi đầu tiên không phải là mở cổng nào, mà là rsync tạo ra kiểu kết nối gì. Mọi điều dưới đây giả định đường hầm đã hoạt động và chỉ còn dịch vụ bên trong là còn nghi vấn.

Xác định rsync thực sự tạo ra kết nối nào

Đối số từ xa trong lệnh thường trả lời câu hỏi đó trước mọi thay đổi tường lửa. Hai dấu hai chấm hoặc một lược đồ URL chọn daemon, trong khi một dấu hai chấm sau tên máy chủ chọn một shell từ xa. Hãy đọc đối số bạn thực sự chạy, không phải đối số trong ví dụ của tài liệu.

Một tùy chọn shell từ xa rõ ràng có thể lại thay đổi câu trả lời, vì nó nói cho rsync biết chương trình nào cần khởi chạy cho việc truyền tải. Hãy đọc toàn bộ dòng lệnh, kể cả các script bao bọc được kế thừa, không chỉ phần máy chủ.

Remote argumentWhat it opens
rsync://vault.corp.internal/archive/rsync daemon, normally TCP 873
vault.corp.internal::archive/rsync daemon, normally TCP 873
[email protected]:/srv/archive/Remote shell, normally SSH on its configured port

Chế độ daemon: địa chỉ ràng buộc, mô-đun và cổng

Trong cú pháp daemon, đoạn đường dẫn đặt tên cho một mô-đun đã cấu hình, không phải một thư mục trên đĩa. Mật khẩu mô-đun chỉ được kiểm tra sau khi kết nối đã được chấp nhận, và mô-đun còn có thể chỉ đọc hoặc bị ẩn khỏi danh sách. Thứ tự đó quan trọng khi bạn đọc một lỗi, vì kết nối bị từ chối và mô-đun bị từ chối là những thất bại ở hai giai đoạn khác nhau. Không thông điệp nào cho bạn biết điều gì về bản thân đường hầm.

Một daemon độc lập có thể được ghim vào địa chỉ đường hầm trong tệp cấu hình của nó, điều này giữ nó tránh xa giao diện công cộng mà không cần bất kỳ quy tắc tường lửa nào. Giá trị phải tồn tại khi daemon ràng buộc, và một trình lắng nghe được kích hoạt bằng socket hoặc do inetd quản lý có thể bỏ qua nó hoàn toàn.

address = 10.44.0.1
port = 873
[archive]
    path = /srv/archive
    read only = yes

Sau đó hãy thử với địa chỉ riêng thay vì tên công cộng. Một tên máy chủ công cộng phân giải thành địa chỉ WAN và đi theo đường khác, ngay cả khi một máy trả lời cả hai.

rsync --list-only rsync://10.44.0.1/archive/

Chế độ shell từ xa: SSH mang việc truyền tải

Với một dấu hai chấm, rsync khởi chạy một chương trình shell từ xa và nói giao thức của nó trên kênh đó, vì vậy dịch vụ duy nhất có thể tiếp cận là SSH trên bất kỳ cổng nào máy chủ lắng nghe. Daemon của rsync không bao giờ chạy, cổng 873 không liên quan, và quyết định truy cập trở thành quyết định tài khoản SSH. Đường dẫn từ xa khi đó là một đường dẫn thực của hệ thống tệp do shell ở phía bên kia diễn giải. Đó là lý do một thay đổi tường lửa nhắm vào 873 không làm gì cả cho chế độ này.

Thiết kế đó cần một tài khoản được ủy quyền và việc xác minh khóa máy chủ, và nó kế thừa chính sách xác thực của SSH. Thường đây là lựa chọn tốt hơn khi việc truyền tải phải đi qua một mạng không đáng tin cậy, vì mã hóa thuộc về một giao thức được xây dựng cho việc đó. Một daemon hỏi mật khẩu không phải là điều tương tự.

Chỉ mở đường đi bạn đã chọn

Khi chế độ đã được xác định, hãy cho phép dịch vụ bên trong duy nhất trên giao diện duy nhất mang đường hầm. Thu hẹp quy tắc theo giao diện, nhóm nguồn và địa chỉ đích để một thay đổi từ chối mặc định về sau không thể âm thầm mở rộng nó. Sau đó xem lại thứ tự quy tắc, vì một quy tắc cho phép đứng trước trong chuỗi khiến quy tắc hẹp chỉ còn là trang trí.

Nếu daemon chạy trên một máy phía sau cổng VPN chứ không phải trên chính cổng, thì cổng cũng cần một đường chuyển tiếp và mục tiêu cần quyền riêng cùng tuyến quay về. Chỉ mở cổng trên cổng thì tạo ra một kết nối được chấp nhận rồi không đi đến đâu.

Hãy kiểm chứng từ máy khách với đúng chế độ và đích mà bạn định dùng trong môi trường thật. Một danh sách thành công chứng minh trình lắng nghe, tuyến và quy tắc cùng lúc; hết thời gian chỉ vào đường đi, và bị từ chối chỉ vào trình lắng nghe.

ufw allow in on tun0 from 10.44.0.0/24 to 10.44.0.1 port 873 proto tcp
ss -ltnp | grep 873

Bài viết liên quan