Nhóm ngang hàng WireGuard trên hub: quyền sở hữu nguồn và chính sách
Giữ các nhóm ngang hàng tách biệt bằng địa chỉ nguồn hẹp cho từng ngang hàng và chính sách chuyển tiếp, không cần giao diện đường hầm riêng cho mỗi nhóm.
Một hub chạy WireGuard có thể giữ các nhóm ngang hàng tách biệt mà không cần giao diện hay bảng định tuyến riêng cho mỗi nhóm. Hai cơ chế làm công việc này, và nhầm lẫn giữa chúng là lý do thường gặp khiến một chính sách trông đúng mà không làm gì. Một lớp quyết định ai được yêu cầu địa chỉ nguồn. Lớp kia quyết định gói đó được phép đi đâu.
Hai công việc, được tách riêng
Lớp đường hầm trả lời một câu hỏi hẹp: khóa của ngang hàng này có cho phép địa chỉ nguồn bên trong này không. Lớp chuyển tiếp trả lời một câu hỏi rộng hơn: gói này có được rời đi về phía đích đó không. Không lớp nào trả lời câu hỏi của lớp kia, và không lớp nào tự nó là một chính sách truy cập đầy đủ.
Chính sự tách biệt đó là lý do một ngang hàng có thể đã được xác thực, được gán địa chỉ đúng mà vẫn không thể tới một máy chủ mà nó không nên tới. Điều này cũng giải thích trường hợp ngược lại: một quy tắc tường lửa cho phép mọi thứ không chứng minh được gì về việc ai được yêu cầu địa chỉ nào.
Thiết kế cả hai lớp cùng nhau, rồi kiểm tra cả hai. Một cấu hình đúng ở lớp này và chưa được kiểm tra ở lớp kia sẽ thất bại theo hướng mở hoặc đóng tùy theo giá trị mặc định.
Chỉ cho mỗi ngang hàng địa chỉ của chính nó
Các ngang hàng nhiều máy chủ khiến bạn muốn cấp toàn bộ dải của nhóm ở phía máy chủ. Quyền đó là một yêu cầu về địa chỉ nguồn, nên một máy khách bị xâm nhập hoặc cấu hình sai có thể trình ra bất kỳ địa chỉ nào trong dải và đường hầm sẽ chấp nhận nó. Gán một /32 cho mỗi ngang hàng cho địa chỉ bên trong của chính nó. Chỉ đặt dải nhóm trên các máy khách, nơi chúng mô tả những đích mà máy khách đó được tới chứ không phải những nguồn mà nó được dùng.
Sau đó tường lửa so khớp một nguồn mà nó có thể tin cậy. Một quy tắc viết cho dải của nhóm vẫn là một cách nhóm hữu ích, và nó chỉ có ý nghĩa khi không một ngang hàng riêng lẻ nào có thể yêu cầu địa chỉ thuộc về một thành viên khác.
Viết chính sách chuyển tiếp tách các nhóm
Lưu lượng đáng quan tâm ở đây đi vào và đi ra qua cùng một giao diện đường hầm, nên nó đi qua đường chuyển tiếp chứ không phải đường đầu vào của máy chủ. Các quy tắc thuộc chuỗi chuyển tiếp hiện có của trình quản lý tường lửa đang sở hữu máy chủ, và chúng là các mảnh chứ không phải một bộ quy tắc đầy đủ.
iifname "wg0" oifname "wg0" ip saddr 10.66.10.0/24 ip daddr 10.66.10.0/24 accept iifname "wg0" oifname "wg0" ip saddr 10.66.20.0/24 ip daddr 10.66.20.0/24 accept iifname "wg0" oifname "wg0" drop
Hai quy tắc đầu cho phép lưu lượng trong mỗi nhóm. Quy tắc cuối chặn mọi thứ khác đi qua giao diện đó, và đó chính là thứ tạo ra sự cách ly giữa các nhóm. Hãy thêm quy tắc rõ ràng cho họ địa chỉ còn lại nếu bạn cần, vì một drop viết cho IPv4 không cấp quyền và cũng không mô tả hành vi của IPv6.
Thứ tự quyết định chính sách có được áp dụng hay không
Thứ tự quy tắc quan trọng hơn chính mảnh đó. Một quy tắc chung chấp nhận các kết nối đã thiết lập và được đặt trước những mục này sẽ để một luồng cũ giữa các nhóm tiếp tục, nên sự cách ly chỉ áp dụng cho các kết nối mới. Hãy quyết định bạn muốn kết quả nào trong hai kết quả đó trước khi nạp lại.
Phán quyết chấp nhận cũng không phải lúc nào cũng cuối cùng giữa các chuỗi trên cùng một móc. Nếu một chuỗi cơ sở khác chạy sau đó, chính sách hiệu lực là sự kết hợp, nên hãy xem các bộ đếm chứ không phải tệp bạn đã sửa. Bộ đếm là bằng chứng rẻ nhất hiện có. Một quy tắc không có số đếm gói là không khớp, và một quy tắc khớp trong khi một chuỗi sau đó chấp nhận sẽ cho bạn biết drop đang ở sai chỗ.
Kiểm tra ma trận, không phải số lượng tệp
Dựng một ma trận nhỏ các kết quả mong đợi và kiểm tra từng ô. Từ nhóm A đến nhóm A phải chạy được, từ nhóm B đến nhóm B phải chạy được, và từ A đến B thì không, theo cả hai chiều và cho cả hai họ địa chỉ nếu bạn hỗ trợ.
nft list ruleset wg show wg0 allowed-ips ping -c 2 10.66.10.5 conntrack -L -s 10.66.20.7 2>/dev/null | head
Hai lệnh đầu cho thấy điều gì đã được cấu hình. Ping từ một thành viên của nhóm sai cho thấy điều gì thực sự xảy ra. Danh sách conntrack cho thấy một luồng cũ hơn có còn được chấp nhận hay không, và đó chính là cách một thay đổi cách ly âm thầm không có hiệu lực.
Các dịch vụ máy chủ trên hub và việc truy cập một LAN phía sau nó là những đường riêng với chính sách riêng. Ghi lại ma trận bao phủ những đường nào, vì một bài kiểm tra chỉ kiểm tra lưu lượng ngang hàng với ngang hàng không nói gì về cả hai.