Đuổi một máy khách OpenVPN: kill, deny hay thu hồi chứng chỉ?
Ba thao tác OpenVPN đều gỡ một máy khách, nhưng mỗi thao tác kết thúc một thứ khác nhau: phiên đang chạy, một lần đăng nhập, hoặc quyền kết nối lại. Hãy chọn theo danh tính.
Bạn có một common name và một địa chỉ trong ghi chú, cùng ba lệnh đều trông như gỡ một máy khách. Chỉ một lệnh làm đúng điều bạn muốn, và lựa chọn phụ thuộc vào việc bạn cần kết thúc phiên đang chạy, từ chối lần đăng nhập tiếp theo, hay thu hồi hẳn quyền kết nối. Hãy đọc danh tính bạn thực sự nắm giữ trước khi chạm vào bất cứ thứ gì, vì một pool OpenVPN sẽ giao cùng địa chỉ đường hầm cho một phiên khác về sau.
Bạn thực sự có danh tính nào
Tệp trạng thái phiên bản 3 là điểm khởi đầu quen thuộc. Phần CLIENT_LIST mang common name, địa chỉ thật, bộ đếm byte và thời gian kết nối; phần ROUTING TABLE ánh xạ một địa chỉ ảo sang common name kèm dấu thời gian tham chiếu cuối. Common name là danh tính ổn định. Địa chỉ ảo là một sự cấp phát, và địa chỉ thật sau NAT có thể đổi giữa các phiên mà không có gì trên máy chủ thay đổi.
Giao diện quản lý hiển thị một góc nhìn tương tự qua lệnh status và thêm ID máy khách cho mỗi phiên. Chính ID đó là thứ client-kill chờ đợi, và nó không phải địa chỉ đường hầm. Nếu cần biết common name nào nhận địa chỉ nào tại thời điểm kết nối, môi trường của một script client-connect có cả hai, cùng với địa chỉ bên ngoài đáng tin cậy, nhưng script đó chạy dưới người dùng OpenVPN và cần một đường dẫn nhật ký ghi được.
| What you hold | Where it came from | What it can act on |
|---|---|---|
| Common name | CLIENT_LIST, or the auth hook | kill, and credential revocation |
| Client ID | status on the management socket | client-kill, that one session |
| Tunnel address | ROUTING TABLE, client-connect environment | Nothing durable, the address is recycled |
Giết ngay, từ chối khi đăng nhập, thu hồi vĩnh viễn
Cả hai lệnh gỡ trong giao diện quản lý đều là thao tác phiên. kill nhận một common name hoặc địa chỉ thật và cổng; client-kill nhận ID máy khách và kết thúc ngay thực thể đó. Không lệnh nào là chặn: một máy khách bị đuổi với chứng chỉ và mật khẩu hợp lệ sẽ kết nối lại trong vài giây, điều này tốt khi bạn tái sử dụng một peer thử nghiệm và vô dụng khi một laptop bị đánh cắp.
client-deny là một loại quyết định khác. Nó thường được phát ra từ một hook xác thực hoặc client-connect và từ chối phiên kèm lý do, nên nó hợp với chính sách từ chối đăng nhập hơn là chính sách ngắt kết nối. Tài liệu cũng cảnh báo rằng một lời từ chối phát ra trong lúc tái thương lượng TLS sẽ vô hiệu hóa khóa đã tái thương lượng trong khi phiên hiện có vẫn có thể chạy cho đến khi cửa sổ chuyển tiếp đóng lại. Nếu yêu cầu là máy khách phải biến mất ngay, câu trả lời được ghi trong tài liệu là client-kill.
Việc gỡ bỏ lâu dài nằm dưới tất cả những điều này. Hãy thu hồi chứng chỉ và bảo đảm crl-verify trỏ tới một danh sách mà máy chủ thực sự nạp lại, vô hiệu hóa tệp cấu hình riêng của máy khách trong thư mục ccd, hoặc vô hiệu hóa tài khoản ở backend mà hook xác thực truy vấn. Việc thu hồi cũng không tức thì: với cài đặt reneg-sec mặc định, một phiên đã thiết lập có thể tiếp tục cho đến khi tái thương lượng, nên thao tác phiên và thao tác thông tin xác thực bổ sung cho nhau, không phải phương án thay thế.
Socket quản lý có trống không?
Giao diện quản lý phục vụ một máy khách tại một thời điểm. Nếu một GUI hoặc daemon giám sát đã giữ kết nối, script của bạn không thể gắn vào bên cạnh, và tùy máy khách, bạn có thể đẩy máy khách hiện có ra ngoài thay vì thất bại gọn gàng. Mật khẩu của nó đi dưới dạng văn bản rõ trên socket đó, nên nó thuộc về một địa chỉ cục bộ hoặc một unix socket, không bao giờ thuộc về một giao diện công cộng.
Khi không lấy được socket, bạn vẫn có các lựa chọn, và tất cả đều chậm hơn. Hãy nhả phiên của GUI trước nếu bạn kiểm soát nó, hoặc chấp nhận con đường qua tầng thông tin xác thực và chờ lần tái thương lượng tiếp theo. Điều bạn không nên làm là khởi động lại dịch vụ để tống khứ một máy khách, vì việc đó cũng kết thúc mọi phiên khác và phá hủy bằng chứng trong tệp trạng thái cho phiên này.
Trình tự tôi chạy trên máy chủ đang hoạt động
Gắn vào, đọc trạng thái hiện tại, hành động trên ID bạn vừa đọc, rồi đọc lại. Các giá trị sao chép từ tài liệu là cách phổ biến nhất để giết nhầm người.
status # note the client ID and common name
client-kill 3 # end that session now
kill Test-Client # alternative: by common name
status # confirm the session is goneTên và con số ở trên là chỗ giữ chỗ, và các ID được dùng lại sau khi máy khách khác ngắt kết nối. Hãy xác nhận dòng đó không còn trước khi ghi điều gì là đã xong, và kiểm tra rằng số máy khách đang kết nối đã dịch một chứ không phải vài đơn vị.
Xác nhận nó đã ở lại bên ngoài
Ghi lại common name, địa chỉ đường hầm, địa chỉ bên ngoài và phút gỡ bỏ. Nếu cùng common name đó xuất hiện lại một phút sau, thao tác phiên đã hiệu quả còn tầng thông tin xác thực thì không, và đó là một cách sửa hoàn toàn khác với trường hợp lệnh chưa từng có hiệu lực.
Sau đó hãy thử từ phía máy khách. Một chứng chỉ bị thu hồi phải thất bại ở lần bắt tay tiếp theo; nếu nó vẫn kết nối, CRL hoàn toàn không được đọc, và đó là phát hiện đáng báo cáo. Chọn thao tác theo điều bạn cần kết thúc, xác nhận bằng status thứ hai, và sửa tầng thông tin xác thực khi câu trả lời phải kéo dài hơn phiên.