Tuyến VPN hay quy tắc tường lửa: cái nào đang làm rơi gói tin?
Tuyến chọn đường đi và bộ lọc quyết định quyền cho phép. Hãy kiểm tra cả hai cho cùng nguồn, đích và hướng trước khi mở rộng một quy tắc tường lửa.
Hai quyết định độc lập xảy ra với cùng một gói tin, và bất kỳ quyết định nào cũng có thể kết thúc yêu cầu trong im lặng. Việc tra cứu tuyến chọn một giao diện và bước nhảy tiếp theo, sau đó bộ lọc gói quyết định liệu tổ hợp đó có được phép hay không. Hết thời gian cho bạn biết rằng một trong hai đã từ chối, không phải cái nào. Đi qua các giai đoạn theo thứ tự và việc sửa chữa thường không còn là phỏng đoán.
Hai quyết định, một gói tin, hai chủ sở hữu
Việc tra cứu tuyến tham vấn các quy tắc chính sách trước, sau đó là bảng mà chúng trỏ tới, và chọn tiền tố cụ thể nhất khớp với đích. Một máy khách đã cài tuyến đường hầm sở hữu quyết định đó, và không gì trong quy tắc tường lửa có thể thay thế nó. Khi tra cứu trỏ đến một nơi bất ngờ, mọi giai đoạn sau đều làm việc trên gói tin sai.
Việc lọc là riêng biệt. Trên máy chủ Linux, các móc netfilter chia lưu lượng theo việc gói tin dành cho ai: đầu ra rời khỏi máy, đầu vào kết thúc trên đó, chuyển tiếp đi xuyên qua. Một cổng nhận máy khách VPN và định tuyến chúng vào LAN cần đường chuyển tiếp, và đó chính là chuỗi mà hầu hết cấu hình mặc định để trống.
Việc chọn nguồn thuộc cùng quyết định đó, và đây là nơi ẩn giấu phần lớn sự không khớp. Nhân chọn địa chỉ nguồn từ giao diện ra ngoài trừ khi tuyến chỉ định một địa chỉ, vì vậy một quy tắc lọc viết cho mạng con LAN không bao giờ khớp với gói tin đi ra với địa chỉ đường hầm.
Đọc xem việc tra cứu thực sự đã chọn gì
In quyết định thay vì suy đoán. Lệnh dưới đây phân giải tuyến mà nhân sẽ dùng cho đích đó, bao gồm giao diện và nguồn mà nó sẽ chọn:
ip route get 10.8.0.5 ip route get 10.8.0.5 from 192.0.2.44 ip rule show ip route show table all | sed -n '1,40p'
Máy khách VPN thường cài quy tắc chính sách ở các mức ưu tiên dưới bảng chính, vì vậy một bảng chính sạch tự nó không chứng minh được gì. So sánh mức ưu tiên của quy tắc với các bảng mà chúng chọn, và kiểm tra xem tuyến đường hầm có tồn tại sau khi kết nối lại thay vì được thêm thủ công một lần hay không.
IPsec dựa trên chính sách thêm giai đoạn khớp thứ ba mà định tuyến không bao phủ, như ghi chú chuyển tiếp của strongSwan mô tả cho cấu hình đường hầm và truyền tải. Chính sách bảo mật chọn lưu lượng theo tiền tố và giao thức, trong khi tuyến chỉ quyết định gói tin không được bảo vệ sẽ đi đâu. Một mạng con được định tuyến nhưng không có bộ chọn khớp hoặc vẫn không được bảo vệ hoặc bị loại bỏ, tùy theo cấu hình, và không kết quả nào trông giống vấn đề tường lửa. In chính sách và so sánh các bộ chọn của nó với các tiền tố mà bạn mong đường hầm sẽ mang.
Việc lọc áp dụng tại một móc, không phải tại một tuyến
Một quy tắc cho phép trình lắng nghe VPN là quy tắc về lưu lượng hướng đến chính cổng. Nó không nói gì về các máy khách đến các máy chủ phía sau cổng đó, bởi vì lưu lượng được chuyển tiếp đi qua một chuỗi khác. Đọc tập quy tắc như một danh sách phẳng là lý do thông thường khiến một quy tắc trông đúng không bao giờ kích hoạt.
Các bộ đếm giải quyết câu hỏi nhanh chóng. Một quy tắc có số đếm gói bằng không chưa bao giờ được đạt tới, điều này chỉ ra chuỗi sai, giao diện sai hoặc một lần loại bỏ trước đó. Một quy tắc có số đếm tăng dần dưới chính sách loại bỏ là ranh giới bạn đang tìm, và gói tin đang bị loại bỏ thay vì bị định tuyến sai.
Gửi một phép thử qua đường mà máy khách sử dụng
Các bài kiểm tra chạy trên chính cổng đi qua đầu ra và đầu vào, với địa chỉ nguồn của chính cổng. Đó là một đường khác với yêu cầu được chuyển tiếp của máy khách, vì vậy một curl cục bộ thành công chứng minh ít hơn vẻ ngoài của nó. Kiểm tra từ máy bị lỗi, hoặc ghim rõ ràng giao diện và nguồn.
nc -vz -w 3 10.8.0.5 443 ping -c 3 -W 1 10.8.0.5 tcpdump -ni any host 10.8.0.5 and port 443 iptables -vnL FORWARD --line-numbers nft list ruleset | sed -n '1,60p'
Bắt gói ở cả hai đầu tách các trường hợp còn lại. Một SYN rời máy khách và không bao giờ đến nghĩa là định tuyến, mã hóa hoặc một danh sách truy cập phía trên. Một SYN đến mà không nhận được trả lời nghĩa là dịch vụ hoặc bộ lọc máy chủ của nó, và đường hầm chưa bao giờ là vấn đề.
Lưu lượng quay về đáng được xem riêng. Định tuyến không đối xứng cộng với lọc đường ngược loại bỏ các trả lời đến trên giao diện sai, điều này xuất hiện như một kết nối một chiều thay vì một cổng bị chặn. Kiểm tra giá trị sysctl trước khi đổ lỗi cho tường lửa về một triệu chứng mà nó không gây ra.
Ghi nhật ký hoạt động như ý kiến thứ hai, không phải bước đầu tiên. Một câu lệnh nhật ký tạm thời trên chuỗi chuyển tiếp nêu tên giao diện và các địa chỉ đã chạm vào nó, và dễ dàng gỡ bỏ sau đó. Để nó vĩnh viễn và bạn đã xây dựng một vấn đề khối lượng nhật ký thay vì một câu trả lời.
Đặt mỗi thay đổi ở nơi nó tồn tại qua lần kết nối lại
Một tuyến được thêm bằng ip route add sống cho đến khi giao diện xuống. Hãy lưu nó vào hồ sơ kết nối thay vì thế: NetworkManager chấp nhận các tuyến bổ sung trên kết nối, và netplan giữ chúng qua các lần khởi động. Quy tắc tương tự áp dụng cho một ngoại lệ tường lửa phía máy khách, thứ biến mất sau lần nạp lại tiếp theo.
Các quy tắc phía máy chủ thuộc về tệp cấu hình mà dịch vụ nạp khi khởi động, không phải một phiên tương tác kết thúc khi bạn đóng nó. Viết quy tắc, nạp lại và xác nhận bộ đếm đã di chuyển, bởi vì một lần nạp lại từ chối cú pháp sẽ lặng lẽ để lại tập quy tắc cũ tại chỗ.
Sau đó lặp lại yêu cầu ứng dụng ban đầu từ đầu đến cuối và ghi lại lớp nào đã thay đổi. Một bản sửa tuyến cũng cần thay đổi bộ lọc vẫn sẽ thất bại, và lần thất bại thứ hai dễ đọc hơn nhiều khi bạn biết lần đầu đã biến mất. Ghi ngày tháng và phiên bản máy khách bên cạnh kết quả, vì mặc định định tuyến và lọc đều thay đổi giữa các bản phát hành. Giữ ghi chú đó trên phiếu để người tiếp theo bắt đầu từ nơi bạn dừng lại thay vì lặp lại hành trình hai giai đoạn.