Đặt hai nhóm máy khách trên các subnet khác nhau trông giống như cô lập, và không phải vậy. Địa chỉ mô tả gói tin dường như đến từ đâu, còn quyền là quyết định của thứ chuyển tiếp nó. Câu hỏi đó được cấu hình trả lời chứ không phải mặt nạ, vì vậy hãy quyết định thành phần nào chuyển tiếp lưu lượng giữa các máy ngang hàng trước khi viết bất kỳ quy tắc nào.

Subnet là một nhãn, không phải quy tắc

Giao một nhóm địa chỉ cho mỗi nhóm mang lại địa chỉ dễ đọc và không gì khác. Máy khách chấp nhận thêm một tuyến đã có được khả năng tiếp cận, và khả năng tiếp cận không phải là cấp quyền. Quyền nói chuyện nằm trong quyết định chuyển tiếp, thứ có thể sống trong daemon hoặc trong nhân tùy theo cách máy chủ được cấu hình.

Quyền sở hữu địa chỉ là thứ khiến một tiền tố dùng được làm bộ chọn nhóm. Mỗi danh tính đã xác thực phải ánh xạ tới một địa chỉ hoặc dải dự đoán được, và ánh xạ đó hỏng ngay khi nhiều thiết bị dùng chung một thông tin đăng nhập và một phép gán. Giải quyết danh tính và tính đồng thời trước khi dựa vào tiền tố nguồn, vì chính sách đoán máy nào đang gọi sẽ cấp quyền cho máy sai vào thời điểm tồi tệ nhất.

Chọn đường mang lưu lượng giữa các máy ngang hàng

Khi daemon chuyển tiếp gói giữa các máy ngang hàng bên trong tiến trình của nó, những gói đó không bao giờ tới móc chuyển tiếp của máy chủ, nên quy tắc của nhân không thể thấy chúng. Tắt chuyển tiếp nội bộ đó và nhân trở thành điểm chuyển tiếp, nơi các quy tắc chuyển tiếp thông thường áp dụng.

# peer forwarding inside the daemon: enforce with per-group policy instead of FORWARD rules
client-to-client
# kernel forwarding path: remove the line above, then filter in the forward chain

Các kênh dữ liệu được giảm tải và máy chủ do sản phẩm quản lý công bố mô hình thực thi riêng, vì vậy hãy xác nhận bạn đang chạy loại nào thay vì giả định hành vi của cộng đồng. Lỗi đáng tránh là một quy tắc trông đúng khi xem xét và không bao giờ được hỏi tới khi chạy.

Viết ma trận trước khi viết quy tắc

Một ma trận ngắn dễ xem xét hơn một bộ quy tắc, và đó là hợp đồng mà phần triển khai phải đáp ứng: máy ngang hàng cùng nhóm được phép, máy ngang hàng khác nhóm bị từ chối, cả hai nhóm được phép tới một dịch vụ chia sẻ có tên, mọi thứ khác bị từ chối. Viết bốn dòng đó trước khi mở trình soạn thảo tường lửa. Người xem xét không đọc cú pháp quy tắc vẫn có thể kiểm tra ma trận. Sau đó phần triển khai chỉ cần khớp với các dòng.

SourceDestinationDecision
Group A addressAnother Group A addressAllow
Group A addressA Group B addressDeny
Either groupThe shared internal serviceAllow
Either groupAnything not listedDeny

Giữ ba lớp đích tách biệt trong khi viết. Một dịch vụ trên máy chủ VPN là đầu vào cục bộ, máy khách khác là trung chuyển ngang hàng, và một máy sau cổng là đường chuyển tiếp khác. Một quy tắc hào phóng có thể vô tình cấp cả ba, và đó là cách một chính sách nhóm biến thành mạng phẳng với các bước thừa. Viết lớp bên cạnh mỗi dòng để ý định sống sót qua lần sửa tiếp theo.

Đặt quy tắc ở nơi chúng tồn tại

Thêm các quyết định vào cùng nơi duy trì phần còn lại của tường lửa, trước bất kỳ quy tắc cho phép nào nếu không sẽ nuốt chúng. Thứ tự quy tắc là một phần của chính sách, và một quy tắc đúng đặt sau một chấp nhận rộng sẽ không thực thi gì cả. Ghi lại số quy tắc trước và sau thay đổi. Một chính sách tồn tại trong trình soạn thảo nhưng không có trong bộ quy tắc đang chạy là kế hoạch, không phải kiểm soát.

Quyết định điều gì xảy ra với các luồng đã tồn tại khi chính sách thay đổi, vì một phiên mở trước thay đổi có thể tiếp tục sau đó. Nếu thành viên rời đi phải mất quyền truy cập ngay lập tức, bộ quy tắc cần cách chấm dứt trạng thái đó thay vì chờ kết nối tự đóng.

Làm cho các quy tắc bền vững qua cơ chế sở hữu phần còn lại của tường lửa, và ghi lại ma trận bên cạnh chúng. Một chính sách không được ghi lại sẽ được suy ra lại từ trí nhớ trong sự cố tiếp theo, thường là bởi một người đang vội.

Chứng minh từ cả hai phía

Kiểm tra khả năng tiếp cận trong cùng nhóm, lỗi giữa các nhóm và dịch vụ chia sẻ từ một máy khách trong mỗi nhóm. Một lần kiểm tra từ một máy khách chứng minh một nửa ma trận, và nửa bị bỏ lại thường là nửa sai. Lặp lại hướng từ chối hai lần, vì một phiên được lưu trong bộ nhớ đệm có thể che giấu lỗi thực thi. Ghi lại cặp nào bạn đã kiểm tra để người tiếp theo không lặp lại.

Lặp lại kiểm tra trên IPv6 nếu đường hầm mang nó, và giữ nguyên xác thực ứng dụng thông thường. Tiền tố nguồn không phải tài khoản, nên vượt qua chính sách mạng không có nghĩa là dịch vụ nên tin người gọi.

Bài viết liên quan