Hai quy tắc riêng quyết định một đường hầm VPN có vượt qua tường lửa hay không: cổng mà máy khách gọi tới và giao thức mang tải trọng. Chỉ mở quy tắc đầu thì đường hầm xác thực được, nhưng sau đó không có dữ liệu nào chuyển đi. Mức tối thiểu là một cổng TCP cùng GRE cho PPTP, hai cổng UDP cùng ESP cho L2TP/IPsec và IKEv2, và một cổng duy nhất cho SSTP, OpenVPN và WireGuard. Hướng, theo dõi trạng thái và NAT quyết định phần còn lại.

Bắt đầu từ cổng mà máy khách gọi tới

Mỗi họ đều có một điểm vào mà máy khách liên hệ trước tiên, và chính điểm vào đó là thứ mà quy tắc cho phép của bạn phải nêu tên. Máy khách PPTP kết nối tới TCP 1723. L2TP/IPsec khởi động IKE trên UDP 500 và chuyển sang UDP 4500 khi dùng xuyên NAT, còn bản thân khung L2TP nằm trên UDP 1701 bên trong đường hầm. SSTP bọc phiên trong TLS trên TCP 443, IKEv2 thương lượng trên UDP 500 và 4500, OpenVPN mặc định dùng UDP 1194 nhưng thường được chuyển sang TCP 443, và WireGuard lắng nghe trên UDP 51820.

FamilyRule to add on the gatewayTypical mistake
WireGuardUDP port from ListenPort, for the peer addressAssuming 51820 when the config says otherwise
OpenVPNThe configured UDP or TCP port, often 443Opening 1194 after the server moved
SSTPTCP 443 limited to the gateway IPAllowing 443 to any destination
IKEv2UDP 500 and UDP 4500, plus ESPAllowing only 500 and losing NAT-T
L2TP/IPsecUDP 500, 4500, ESP, and 1701 inside the tunnelExposing 1701 to the internet
PPTPTCP 1723 and IP protocol 47Writing a rule for TCP 47

Hãy coi những con số đó là giá trị mặc định chứ không phải thuộc tính cố định. Một giao diện WireGuard dùng bất kỳ cổng lắng nghe nào mà cấu hình của nó khai báo, và một máy chủ OpenVPN có thể nằm trên bất kỳ cổng nào mà quản trị viên đã chọn. Hãy đọc cấu hình máy chủ trước khi viết quy tắc, vì một tường lửa mở cho 1194 không giúp gì cho máy chủ đã được chuyển sang 443.

Cột thứ ba là nơi phần lớn phiếu thay đổi đi sai. Quy tắc có tồn tại, nhưng nó trỏ tới đích sai, hướng sai hoặc phương thức vận chuyển sai.

GRE và ESP là số giao thức, không phải cổng

GRE và ESP hoàn toàn không có cổng, nên một biểu mẫu tường lửa chỉ nhận số cổng không thể biểu diễn chúng. GRE là giao thức IP 47 và ESP là giao thức IP 50, cả hai được khớp qua trường giao thức trong tiêu đề IP. Một quy tắc viết như cổng TCP 47 không khớp với gì cả, và đó là cách một chính sách PPTP trông có vẻ đúng mà vẫn bỏ mọi gói tin sau khi bắt tay.

Router gia đình giấu điều này sau một ô chọn chuyển tiếp, ô này cài quy tắc giao thức và với GRE là trình trợ giúp NAT cần thiết để ánh xạ luồng. Trên tường lửa thật, bạn tự thêm giao thức: cho phép giao thức IP 47 tới máy chủ PPTP, cho phép giao thức IP 50 tới cổng IPsec. Ở nơi nền tảng không có trường giao thức, đóng gói là lối ra, vì thế IKEv2 có thể lùi về UDP 4500 và vì thế OpenVPN cùng WireGuard không bao giờ gặp vấn đề này.

Hãy kiểm tra quy tắc thực sự khớp với gì trước khi đổ lỗi cho máy khách. Một bộ đếm gói tin đứng ở mức không trên cổng cho biết quy tắc chưa bao giờ kích hoạt, và cài lại bao nhiêu lần ở phía máy khách cũng không thay đổi điều đó.

Hướng, trạng thái và NAT thay đổi câu trả lời

Máy khách gọi ra ngoài và cổng lắng nghe vào trong là hai yêu cầu khác nhau, và cùng một danh sách cổng có thể đúng ở hướng này và sai ở hướng kia. Tường lửa có theo dõi trạng thái bám luồng UDP trên 500 và 4500 và cho phản hồi quay về mà không cần quy tắc thứ hai. ESP và GRE không mang cổng, nên thiết bị NAT không có gì để bám vào và cần trình trợ giúp hoặc đóng gói để theo dõi phiên.

Xuyên NAT là phần thường bị bỏ sót. IKEv2 bắt đầu trên UDP 500, phát hiện thiết bị NAT và tiếp tục trên UDP 4500, nên một chính sách chỉ cho phép 500 sẽ tạo ra đường hầm thiết lập được rồi im lặng. L2TP/IPsec cũng thực hiện động tác tương tự. Nếu bản bắt gói của bạn cho thấy lần trao đổi đầu nhưng không có lưu lượng liên tục, hãy tìm một quy tắc dừng ở 500.

Ghi lại hướng với từng quy tắc. «Cho phép UDP 4500» không có nghĩa gì cho tới khi bạn nói từ đâu tới đâu, và một quy tắc đúng cho máy khách di động thường sai với đối tác site-to-site.

Kiểm tra từng đường đi bằng bản bắt gói

Chạy bản bắt gói trên cổng chứ không phải trên máy khách: máy khách chỉ ghi lại những gì đã tới. Các bộ lọc này bao quát những họ nêu trên và chỉ ra giai đoạn nào còn thiếu:

sudo tcpdump -ni any tcp port 1723
sudo tcpdump -ni any udp port 500 or udp port 4500
sudo tcpdump -ni any proto gre
sudo tcpdump -ni any proto 50

Đọc kết quả như một chuỗi. Khi thương lượng xuất hiện mà giao thức tải trọng không có, việc rơi gói xảy ra ở đâu đó giữa máy khách và cổng. Khi cả hai cùng xuất hiện mà trang vẫn hỏng, tường lửa không còn là nghi phạm; hãy xem định tuyến, DNS hoặc bể địa chỉ cấp cho máy khách.

Trên máy không có tcpdump, cùng bằng chứng đó đến từ bộ đếm giao diện và quy tắc. Byte vào mà không ra trên giao diện đường hầm chỉ về đường quay lại chứ không phải quy tắc cho phép ban đầu.

Để lại một bộ quy tắc bạn có thể bảo vệ

SSTP trên TCP 443 không thể phân biệt với HTTPS thường đối với bất kỳ bộ lọc dựa trên cổng nào, và đó chính là mục đích khi một mạng chỉ cho phép lưu lượng web. Đó cũng là lý do quy tắc cho 443 nên nêu cổng làm đích thay vì toàn bộ internet. Hãy xóa các quy tắc tạm thời từ-bất-kỳ-đến-bất-kỳ ngay khi đường hầm hoạt động. Ghi lại quy tắc nào đã khớp, số giao thức nếu có và hướng, để người tiếp theo bắt đầu từ bằng chứng.

Cổng đám mây điểm-tới-site làm cho lựa chọn trở nên hữu hình: hồ sơ tải về dùng hoặc SSTP trên 443 hoặc IKEv2 trên 500 và 4500, và bạn chỉ nên mở đúng thứ mà hồ sơ thực sự chọn. PPTP không đáng để tạo ngoại lệ GRE trên một mạng hiện đại, vì các nhà mạng di động thường bỏ giao thức 47 bất kể tường lửa của bạn. Trước khi đóng phiếu, hãy xác nhận quy tắc khớp với cổng trong cấu hình máy chủ, trường giao thức được đặt ở nơi họ đó cần, và đích là cổng chứ không phải một địa chỉ bất kỳ.

Bài viết liên quan