Biểu mẫu tường lửa hỏi cổng TCP, và câu trả lời hiển nhiên là 50. Câu trả lời đó không cho phép gì cả, vì ESP là giao thức IP số 50 và số hiệu giao thức không phải là cổng. Hai không gian tên chỉ chia sẻ những số nguyên nhỏ và không gì khác, và lỗi vẫn vô hình cho đến khi IKE kết thúc và lưu lượng được bảo vệ không bao giờ đến.

Hai không gian tên chia sẻ những con số nhỏ

Một tiêu đề IP mang trường giao thức nêu tên thứ tiếp theo: 6 cho TCP, 17 cho UDP, 1 cho ICMP, 50 cho ESP, 51 cho AH. Tiêu đề TCP hoặc UDP mang số hiệu cổng, chọn một tiến trình trên máy đích. Giao thức 50 và cổng TCP 50 là những giá trị không liên quan, nhưng một hộp thoại có thể làm chúng trông như có thể hoán đổi.

Đó là lý do một quy tắc chuyển tiếp cổng không thể diễn đạt ESP nguyên bản. Không có cổng đích ESP nào để chuyển tiếp, và một thiết bị chỉ hiểu quy tắc cổng hoàn toàn không có từ vựng cho gói đó. Quy tắc đúng nêu tên giao thức IP. Bất kỳ hộp thoại cổng nào cũng là công cụ sai cho gói đó.

Sự nhầm lẫn còn có nửa thứ hai. Khi gói được mã hóa, mọi thứ bên trong đều mờ đục, kể cả tiêu đề TCP của kết nối ban đầu. Tường lửa kiểm tra cổng trên gói đó đang nhìn tiêu đề ngoài, mà trong trường hợp nguyên bản không có cổng nào để kiểm tra.

ESP nguyên bản, rồi đến lựa chọn đóng gói

ESP nguyên bản được truyền trực tiếp như một giao thức IP, vừa hiệu quả vừa bất tiện như nhau. Hiệu quả vì không có tiêu đề thêm, và bất tiện vì không thiết bị nào thực hiện dịch địa chỉ và cổng có thể theo dõi nó. NAT traversal tồn tại để giải quyết điều đó, bằng cách bọc gói ESP trong UDP để bộ dịch có cổng để ghi lại.

Form on the wireHow it is identifiedWhat the firewall must permit
IKE negotiationUDP with a destination portUDP 500, and 4500 once traversal is detected
Native ESPIP protocol 50 in the outer headerThe protocol itself, with no port to name
ESP inside UDPUDP 4500 carrying an ESP payloadThe UDP port pair, which translation devices can track

Hai hình thức là những cách triển khai thay thế của cùng một kênh dữ liệu, không phải các lớp của một kênh. Cho phép ESP nguyên bản không cho phép hình thức đóng gói, và cho phép UDP 4500 không cho phép lưu lượng nguyên bản, nên bộ quy tắc phải khớp với cách triển khai thay vì vô tình bao trùm cả hai.

Việc phát hiện cũng quan trọng ở đây. Các điểm cuối quyết định giữa hai hình thức trong quá trình thương lượng, và việc chuyển đổi thường xảy ra khi phát hiện NAT giữa chúng. Vì vậy một đường đi thay đổi sau khi đường hầm được thiết lập có thể chuyển lưu lượng sang một không gian tên mà quy tắc của bạn chưa bao giờ bao phủ.

Đọc xem kết nối thực sự dùng hình thức nào

Hãy hỏi điểm cuối thay vì đoán từ tường lửa. Trên Linux, mục trạng thái cho biết liên kết có dùng đóng gói UDP hay không và cổng nào liên quan. Bắt gói trả lời cùng câu hỏi đó từ dây, và cả hai đều nhanh hơn việc đọc bộ quy tắc rồi hy vọng.

ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'

Lệnh đầu tiên hiển thị loại đóng gói khi NAT traversal được dùng và không hiển thị gì khi không dùng. Lệnh thứ hai cho thấy hình thức nào thực sự đi qua giao diện, và điều đó kết thúc các tranh luận về một cấu hình trông đúng trên giấy.

Bằng chứng ngược lại thuộc cùng bước đó. Một quy tắc báo không có kết quả khớp nào cho bạn biết gói chưa bao giờ đến nó, và đó là câu hỏi định tuyến hoặc bộ chọn, không phải tường lửa.

Sau đó xác nhận kênh điều khiển riêng. IKE có cổng riêng và nhật ký riêng, và một cuộc thương lượng hoàn tất mà không có dữ liệu chính là sự tách biệt mà bài viết này nói đến.

Viết quy tắc trong đúng không gian tên

Quy tắc giao thức và quy tắc cổng là những chỉ dẫn khác nhau, nên công cụ phải diễn đạt đúng cái bạn muốn. Trong nftables, việc khớp giao thức là tường minh, và lựa chọn đóng gói có quy tắc UDP riêng. Giữ hai quy tắc cạnh nhau để cặp đôi hiện rõ khi xem xét.

nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept

Đừng mở rộng bất kỳ quy tắc nào để bù cho một chẩn đoán sai. Cho phép tất cả cho giao thức ESP trên mọi giao diện, hoặc cho phép UDP từ bất kỳ đâu đến bất kỳ đâu, sửa được triệu chứng và loại bỏ kiểm soát mà bạn đang cố thiết lập. Dòng chảy hẹp được hỗ trợ gần như luôn đủ khi đã biết hình thức.

Cuối cùng, giữ các tầng đúng khi đường hầm hoạt động mà ứng dụng thì không. Các gói đến cổng vẫn cần chuyển tiếp, tuyến quay về và một chính sách chấp nhận chúng, và không điều nào trong số đó được diễn đạt bằng quy tắc ESP. Cổng thiếu giải thích một lỗi cụ thể, không phải mọi lỗi IPsec. Giữ việc sửa quy tắc và việc kiểm tra định tuyến như hai kết luận riêng.

Ghi lại hình thức bạn quan sát, quy tắc giao thức bạn đã thêm và bộ đếm bạn thấy sau đó. Ba dòng, và người tiếp theo có thể phân biệt lỗi không gian tên với lỗi định tuyến trong một phút thay vì một buổi chiều.

Bài viết liên quan