IPsec ESP: nó mang gì và cách chứng minh nó đang chảy
ESP bọc một gói IP bên trong ở chế độ đường hầm và nhận diện hiệp hội của nó qua SPI. Hãy đọc trạng thái, rồi xem một luồng duy nhất làm các bộ đếm nhúc nhích.
ESP mang lưu lượng trong một VPN IPsec, và runbook của nó bắt đầu bằng một quy tắc: đọc hiệp hội bảo mật trước khi thay đổi chính sách. Phần lớn hành vi ESP không giải thích được đều quay về một bộ chọn không khớp, một chế độ được giả định thay vì đọc, hoặc một bộ đếm không ai kiểm tra trong khi một luồng duy nhất đang được gửi. Ba bước dưới đây xác lập cái gì mang cái gì, chứng minh rằng một luồng dùng nó, và để lại một cách hoàn tác không phụ thuộc vào trí nhớ. Mỗi bước tạo ra một quan sát đáng ghi lại.
Biết các trường trước khi đọc chúng
ESP đặt một tiêu đề phía trước dữ liệu được bảo vệ và một trailer phía sau. Tiêu đề mang một chỉ số tham số bảo mật xác định hiệp hội mà bên nhận phải dùng, một số thứ tự để phát hiện phát lại, và trong trailer phần đệm giữ tải trọng thẳng hàng cho thuật toán mã hóa. Trường tiêu đề tiếp theo trong trailer cho biết nội dung được bảo vệ là gì, và đó là cách bên nhận biết mình đã giải gói cái gì.
Chế độ thay đổi thứ nằm bên trong lớp bảo vệ đó. Ở chế độ đường hầm, vật liệu được bảo vệ là một gói IP bên trong hoàn chỉnh, và một tiêu đề ngoài mới mang nó giữa hai đầu. Ở chế độ vận chuyển, lớp bảo vệ bọc tải trọng của tầng trên của một gói đã có, nên không có tiêu đề IP thứ hai để mở. Chế độ nào đang được dùng là một sự thật cấu hình, không phải vấn đề diễn giải. Hãy đọc nó từ mục trạng thái thay vì suy ra từ sơ đồ.
Không chế độ nào giấu địa chỉ bên ngoài phải chuyển gói. Đó là đặc tính của thiết kế chứ không phải khiếm khuyết, và đó là lý do một quan sát viên trung gian vẫn thấy hai địa chỉ nào đang nói chuyện ngay cả khi tải trọng không trong suốt.
Bước một: đọc trạng thái, rồi đến chính sách
Các mục trạng thái giữ khóa và bộ đếm; các mục chính sách giữ bộ chọn quyết định cái gì được phép dùng chúng. Trên Linux cả hai đều hiển thị mà không cần bắt gói, và đọc chúng theo thứ tự đó giữ hai câu hỏi tách biệt.
ip xfrm state
ip xfrm policy
Trong đầu ra trạng thái, hãy kiểm tra nguồn và đích của hiệp hội, chế độ, và việc đóng gói có hiển thị cổng UDP hay không. Những cổng đó nghĩa là đang dùng xuyên NAT, điều này thay đổi thứ một tường lửa trung gian phải cho phép, nhưng không thay đổi bộ chọn hay khóa nào áp dụng ở hai đầu.
Sau đó đọc các bộ chọn trong chính sách. Một bộ chọn nêu tiền tố hẹp hơn lưu lượng bạn đang thử là lý do phổ biến nhất khiến một đường hầm đang hoạt động có vẻ bỏ qua một luồng, và một bộ chọn cho giao thức sai tạo ra sự im lặng như vậy.
| Field | Where it appears | What it decides |
|---|---|---|
| Security parameter index | ESP header, and the receiving state entry | Which association and keys the receiver applies |
| Sequence number | ESP header | Replay detection for that association |
| Next header | ESP trailer | What the decapsulated payload contains |
| Inner IP header | Inside tunnel-mode payload only | The original source and destination the endpoints act on |
| Traffic selectors | Policy, not the packet | Which local traffic is allowed to use the association |
Công cụ của nhà cung cấp in cùng thông tin ở dạng dễ dùng hơn. ipsec statusall trên strongSwan nó liệt kê các hiệp hội con, bộ chọn của chúng và bộ đếm byte của chúng, thường nhanh hơn việc đọc đầu ra xfrm thô khi bạn đã biết nên xem hiệp hội con nào.
Bước hai: chứng minh một luồng làm các bộ đếm nhúc nhích
Bộ đếm chỉ có ý nghĩa nếu bạn biết cái gì lẽ ra phải làm chúng nhúc nhích, nên hãy chọn nguồn và đích mà bộ chọn chắc chắn bao phủ rồi gửi một yêu cầu vô hại. Sau đó đọc lại mục đó và so sánh.
ip -s xfrm state
tcpdump -ni any esp
Hai lần đọc kể hai câu chuyện khác nhau. Các gói tăng ở phía đi ra nhưng không bao giờ tăng ở phía đi vào chỉ ra vấn đề chuyển tiếp hoặc đường về chứ không phải vấn đề khóa, vì gói đã được đóng gói và rời đi. Nếu không bộ đếm nào nhúc nhích thì lưu lượng chưa bao giờ khớp chính sách, và bộ chọn là nơi cần xem.
Bản bắt gói trong cùng bước xác nhận việc đóng gói trên dây, kể cả việc các gói bên ngoài là ESP hay ESP được đóng gói trong UDP. Nó cũng cho bạn thấy các địa chỉ thực sự mang luồng, và đôi khi chúng khác với các địa chỉ trong cấu hình bạn đang đọc.
Bước ba: đổi một thứ và giữ một cách hoàn tác
Ghi lại nguồn, đích, chế độ, bộ chọn và bộ đếm của hiệp hội trước khi sửa bất cứ thứ gì. Nếu một thay đổi làm mọi thứ tệ hơn, chính bản ghi đó cho phép bạn khôi phục trạng thái trước đó thay vì dựng lại một cấu hình đang chạy từ một phỏng đoán. Bản ghi đó mất một phút để viết và tiết kiệm một giờ về sau. Nó cũng là artefact duy nhất sống sót sau người đã thực hiện thay đổi.
Đổi một bộ chọn hoặc một tham số, nạp lại nó, và lặp lại bước hai trên cùng luồng đó. Xóa một hiệp hội sẽ đánh sập mọi luồng dùng nó, nên sửa có mục tiêu và nạp lại hiệp hội con gần như luôn tốt hơn việc xả trạng thái để xem điều gì xảy ra.
Hoàn tác một sửa đổi bộ chọn là khôi phục chính sách trước đó và nạp lại nó, kèm lưu ý rằng bên kia có thể cần một thay đổi tương ứng nếu bộ chọn được thương lượng chứ không phải cục bộ. Hãy ghi lại sự phụ thuộc đó khi nó còn mới, vì một cặp khôi phục nửa vời khó lý giải hơn cả hai trạng thái cuối.
Cuối cùng, giữ phạm vi trung thực. Một hiệp hội ESP đang chảy chứng minh hai cổng đang bảo vệ và chuyển giao phân đoạn, và nó không nói gì về việc ứng dụng bên trên có xác thực người dùng hay mã hóa thứ nó lưu trữ. Đó là những kiểm soát riêng với bằng chứng riêng, và runbook chỉ hoàn tất khi người tiếp theo có thể lặp lại nó từ ghi chú.