Bạn đã khôi phục bản sao lưu, dịch vụ khởi động và một máy khách kết nối ngay lần đầu. Thành công đó chính là cái bẫy. Khôi phục trả lại các tệp máy chủ có tại thời điểm ảnh chụp, không phải trạng thái truy cập đã thay đổi từ đó, và nếu điểm cuối cũ vẫn truy cập được thì nay bạn có hai máy cùng trả lời một danh tính. Giải pháp không phải bản sao lưu tốt hơn; mà là quyết định máy chủ được khôi phục được phép là gì trước khi nó trả lời dù chỉ một bắt tay.

Bản sao lưu trả lại tệp, không phải thẩm quyền

Ảnh chụp chứa cấu hình máy chủ, khóa riêng, cơ quan chứng nhận, danh sách ngang hàng và quy tắc tường lửa đúng như khi bản sao lưu chạy. Nó không thể chứa những gì đã thay đổi sau đó: thiết bị bạn đã thu hồi, khóa bạn cấp lại, ngang hàng bạn đã xóa khi bán laptop, mạng con bạn đã di chuyển. Khôi phục tua tệp về thời điểm đó. Nó không tua lại các quyết định mà con người đã đưa ra từ đó.

Thiệt hại đến đúng từ khoảng trống đó. Một laptop bị đánh cắp bị thu hồi hai tuần sau bản sao lưu vẫn trình một chứng chỉ còn hợp lệ với CRL cũ trong cây được khôi phục, và máy chủ chấp nhận thiết bị bạn đã cho nghỉ. WireGuard trực diện hơn: ngang hàng được cấp quyền nhờ có trong danh sách, nên ngang hàng bị xóa sau ảnh chụp đơn giản là lại hiện diện. Không ai phê duyệt lại quyền truy cập đó. Tệp cũ đã làm điều đó.

Danh tính máy chủ và danh tính máy khách hỏng theo những cách khác nhau

Trên WireGuard, danh tính máy chủ là khóa riêng trong wg0.conf, nên sao chép tệp đó sang máy chủ thứ hai truy cập được tạo ra hai máy chủ cùng danh tính và không biết nhau. Mỗi bên giữ danh sách ngang hàng riêng. Xóa một ngang hàng trên máy chủ mới và máy cũ vẫn chấp nhận nó; kiểm tra wg show trên một máy và bạn thấy nửa sự thật. Máy khách cũng không tự chuyển: hồ sơ mang một Endpoint, nên thiết bị tiếp tục nói với địa chỉ đã cấu hình, có thể chính là máy chủ bạn muốn cho nghỉ.

OpenVPN bị nhân đôi ở cùng lớp bằng chứng chỉ máy chủ, khóa riêng của nó và khóa tĩnh tls-auth hoặc tls-crypt. Sao chép cả ba và máy khách không phân biệt được các phiên bản; nếu cả hai đều truy cập được, kết nối lại có thể rơi vào bất kỳ bên nào, và mỗi tệp nhật ký kể nửa câu chuyện. Cơ quan chứng nhận là bản sao sâu hơn. Cây easy-rsa được khôi phục là nguồn sự thật thứ hai có thể cấp chứng chỉ hợp lệ cho bất kỳ tên nào bạn đưa cho nó.

Máy khách cũng bị nhân đôi, thường ngay trong quá trình di chuyển. Sao chép hồ sơ sang thiết bị dự phòng «chỉ để thử» tạo ra thiết bị thứ hai cùng khóa và cùng tên chung. Với duplicate-cn cả hai phiên có thể cùng hoạt động, và việc gán địa chỉ tĩnh trong ccd hoặc ifconfig-pool-persist có thể xung đột với thiết bị gốc. Đó là hai máy mặc một danh tính, và không gì trong cấu hình máy chủ phân biệt chúng.

Chọn một trong ba trạng thái cho điểm cuối cũ

Khôi phục chỉ an toàn khi số phận của điểm cuối cũ đã được quyết. Cho nghỉ: dịch vụ cũ phải ngừng nhận cổng VPN trước khi máy chủ mới khởi động, và nếu không tiếp cận được máy, hãy chặn cổng đó ở biên mạng cho mọi thứ trừ nguồn quản trị của bạn. Sửa chữa cùng máy chủ: dùng lại danh tính là ổn vì một máy giữ nó, nhưng sau đó hãy phá bản sao đĩa hoặc ảnh chụp VM của khóa cũ để nó không thể trở về. Xây một cặp sẵn sàng: hai máy chủ cần danh tính máy chủ khác nhau cộng một điểm cuối chung, như địa chỉ nổi, bộ cân bằng tải hoặc DNS bạn có thể di chuyển. Sao chép khóa riêng không phải thiết kế failover; đó là hai máy chủ cùng đòi một tên.

Xác nhận bạn thực sự đang ở trạng thái nào trước khi chạm vào máy khách. Máy chủ cũ trả lời trên cổng VPN chính là bên sẽ chấp nhận thiết bị bị thu hồi, kể cả khi DNS đã di chuyển. Kiểm tra bộ lắng nghe và khóa công khai:

ss -lunp | grep -E ':51820|:1194'
wg show wg0
wg pubkey < /etc/wireguard/server.key

Trước hết đối soát ngang hàng, thu hồi và địa chỉ

Liệt kê những gì khôi phục tuyên bố so với những gì hiện được cấp quyền. Trên WireGuard, wg show wg0 cho khóa, điểm cuối, bắt tay gần nhất và bộ đếm truyền của từng ngang hàng, đủ để nhận ra thiết bị bạn không còn sở hữu. Xóa nó khi đang chạy bằng wg set wg0 peer <key> remove, rồi sửa cả cấu hình, nếu không ngang hàng sẽ trở lại ở lần khởi động sau. wg show wg0 allowed-ips phơi ra vấn đề thứ hai: hai ngang hàng trên một địa chỉ, hoặc một địa chỉ bạn đã gán lại.

Trên OpenVPN, danh sách thu hồi là một tệp có ngày tháng, và khôi phục có thể mang về bản cũ. Kiểm tra trước khi máy khách kết nối:

openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate
grep -E 'crl-verify|reneg-sec' /etc/openvpn/server.conf

Nếu lần cập nhật cuối trước việc thu hồi, máy chủ vẫn đang tôn trọng một chứng chỉ bạn đã thu hồi. OpenVPN 2.4 trở đi đọc lại tệp CRL cho mỗi kết nối mới, nên thay tệp sẽ dừng phiên mới, nhưng đường hầm đã lập vẫn tồn tại đến khi đàm phán lại; giá trị mặc định của reneg-sec là 3600 giây, và hạ nó hoặc khởi động lại dịch vụ là điều cho bạn thay đổi ngay. Các bản dựng cũ có thể không đọc tệp đáng tin như vậy, nên khởi động lại khi không xác nhận được hành vi của phiên bản. Hướng dẫn wg(8) bao gồm việc xóa ngang hàng và cú pháp allowed-ips dùng ở trên.

Cũng dọn các gán tĩnh cho thiết bị không còn tồn tại. Dùng lại địa chỉ của thiết bị đã nghỉ cho thiết bị mới trong khi hồ sơ cũ vẫn được cài đặt tạo ra đúng bản trùng bạn đang cố tránh.

Xác minh bằng máy khách bạn đã thu hồi

Chạy các kiểm tra theo thứ tự, từ mạng ngoài đường hầm. Đầu tiên thiết bị được cấp quyền kết nối, phân giải DNS qua bộ phân giải được đẩy và chạm tới tài nguyên riêng. Sau đó thiết bị bị thu hồi phải thất bại, dùng hồ sơ hiện có chứ không phải hồ sơ mới. Rồi thử điểm cuối cũ từ bên ngoài: nếu cổng VPN vẫn hoàn tất một bắt tay, máy chủ cũ còn sống và việc nhân đôi là thật, không phải lý thuyết.

Khởi động lại máy chủ đã khôi phục và lặp lại kiểm tra cấp quyền và thu hồi, vì đó là lúc tệp cấu hình thắng những gì bạn đã đổi khi đang chạy. So sánh khóa công khai hoặc dấu vân tay chứng chỉ của máy chủ với cái mà máy đã nghỉ dùng. Dấu vân tay trùng nhau trên hai máy đang sống nghĩa là khôi phục đã nhân bản danh tính; dấu vân tay trùng trên một máy là bình thường. Ghi lại các phiên bản đã khôi phục, dấu vân tay khóa và số sê-ri hoặc khóa ngang hàng đã thu hồi, rồi lấy bản sao lưu tiếp theo sau lần đối soát này, để nó đại diện dịch vụ như hiện tại. Bài kiểm tra hiệu quả không phải là máy khách kết nối được. Mà là máy khách bạn đã xóa ở lại bên ngoài trong khi điểm cuối cũ vẫn đóng.

Bài viết liên quan