VPN qua UDP im lặng khi quét cổng? Vì sao điều đó xảy ra
WireGuard và OpenVPN được gia cố loại bỏ các datagram không qua được xác thực mà không trả lời. Sự im lặng từ một trình quét là hành vi được mong đợi, không phải cổng bị đóng.
Bạn quét cổng VPN, không nhận được phản hồi và kết luận rằng dịch vụ đã ngừng hoạt động hoặc tường lửa đã đóng. Với WireGuard, và với các kênh điều khiển OpenVPN mang xác thực riêng của chúng, kết luận đó không đúng. Một datagram không có vật liệu xác thực hợp lệ bị loại bỏ mà không phản hồi, nên sự im lặng chính là diện mạo của một dịch vụ khỏe mạnh nhìn từ bên ngoài. Phép thử đã sai trước cả khi đường hầm sai.
Sự im lặng là giao thức, không phải lỗi
UDP không có thiết lập kết nối, nên không có SYN và không có xác nhận nào cho phép trình quét phân biệt cổng mở với cổng bị lọc. Phép thử đến như một datagram riêng lẻ, và dịch vụ kiểm tra xem nó có khớp với giao thức mà dịch vụ mong đợi hay không. Khi không khớp, gói tin bị loại bỏ, và việc loại bỏ là hành vi đã được ghi nhận chứ không phải trục trặc.
WireGuard xác thực bằng mật mã các thông điệp bắt tay của mình và bỏ qua mọi thứ không đạt. OpenVPN với tls-auth hoặc tls-crypt làm điều tương tự cho kênh điều khiển của nó. Trong cả hai trường hợp, một tải trọng tùy ý không bao giờ chạm tới giai đoạn hướng tới người dùng, nên không có gì để trả lời và không có lỗi để trả về.
TCP hẳn đã cho bạn một tín hiệu đặt lại từ cổng đóng. UDP để bạn trong sự mơ hồ, và các trình quét giải quyết bằng cách in ra mở hoặc bị lọc thay vì đoán.
Trình quét có thể và không thể kết luận điều gì
Kết quả quét chỉ chứa nhiều thông tin bằng tải trọng mà nó đã gửi. Hãy sắp xếp các quan sát khả dĩ theo điều mà mỗi quan sát thực sự chứng minh:
| Probe | Observed result | What it supports |
|---|---|---|
| Empty datagram | No reply | Nothing beyond the fact that UDP was used |
| Random payload | No reply | Consistent with an authenticated service |
| Valid handshake from a real client | A protocol reply | The service is alive and reachable |
| ICMP port unreachable | Unreachable message | The host answered, usually because nothing listens |
Hãy đọc hàng thứ ba như phép thử khẳng định duy nhất trong danh sách. Nó đòi hỏi hồ sơ thật, khóa thật và điểm cuối chính xác, và đó đúng là thứ một trình quét phổ thông không có.
Hãy nhìn cả hai đầu của đường đi
Với một máy chủ bạn quản trị, hãy bắt gói trên giao diện trước khi đưa ra bất kỳ kết luận nào, rồi hỏi dịch vụ xem nó đã thấy gì. Cả hai lệnh đều cần root trên gateway:
tcpdump -ni any udp port 51820
tcpdump -ni any udp port 1194
wg show
Nếu không có gói nào xuất hiện trên giao diện, đường đi đã loại bỏ nó trước khi dịch vụ thấy bất cứ điều gì, và điểm dừng tiếp theo là định tuyến và lọc. Nếu các gói đến nhưng không có bắt tay nào hoàn tất, dịch vụ vẫn tiếp cận được và sự không khớp nằm ở khóa, cấu hình điểm cuối hoặc phiên bản giao thức. Phép so sánh đó trả lời câu hỏi mà trình quét không thể. Hãy chạy nó khi một máy khách thật đang cố kết nối, không phải khi trình quét lặp lại chính nó.
Hãy thay đổi phép thử, không phải biện pháp bảo vệ
Lối tắt hấp dẫn là tắt bảo vệ kênh điều khiển để một phép chẩn đoán nhận được phản hồi. Điều đó đánh đổi một thuộc tính bảo mật thực sự lấy một kết quả quét đẹp hơn, và đó là hướng sai. Thay vào đó hãy dùng một hồ sơ hợp lệ từ mạng đã được phê duyệt, và ghi lại điểm cuối cùng thời điểm để phép so sánh có thể lặp lại.
Phép thử hữu ích nhất là phép thử vi phân: cùng một hồ sơ trên một đường đi hoạt động và trên đường đi không hoạt động. Nếu đường đi hoạt động tạo ra một bắt tay còn đường đi thất bại không tạo ra gì trên giao diện, bạn đã định vị được chỗ đứt mà không làm suy yếu bất cứ điều gì.
Vì vậy một gói UDP không được trả lời không chứng minh rằng máy chủ đang ngoại tuyến cũng không chứng minh rằng nó an toàn. Nó chỉ chứng minh rằng phép thử này, trên đường đi này, vào lúc này, đã không được chấp nhận.