Hầu hết mọi người đọc tệp .ovpn như cách họ đọc trang cài đặt của bộ định tuyến: địa chỉ, tuyến, danh sách mật mã. Phần thực thi mã nằm gần cuối tệp, bên cạnh các chỉ thị trông như công việc ống nước, và nó chạy với bất kỳ đặc quyền nào mà ứng dụng khách đã có. Đó là khe hở mà một hồ sơ cẩu thả hoặc độc hại khai thác, và cũng là khe hở biến một trình trợ giúp DNS hữu ích thành vấn đề hỗ trợ ba tuần sau đó. Chỉ thị sự kiện, mức bảo mật và quyền sở hữu tệp quyết định điều gì có thể xảy ra; nội dung script quyết định điều gì thực sự xảy ra. Hãy đọc cả bốn trước khi kết nối.

Một hồ sơ chạy trình trợ giúp là một chương trình, không phải tệp cài đặt

Các chỉ thị như route và dhcp-option mô tả trạng thái mà ứng dụng khách nên thiết lập, và ứng dụng khách coi chúng là dữ liệu. Một script up thì khác: ứng dụng khách khởi chạy nó như một tiến trình và trao cho nó môi trường đầy chi tiết kết nối, nên bất cứ điều gì tác giả viết đều chạy với quyền của tài khoản bạn. Trên một máy tính xách tay nơi người dùng là quản trị viên, đó là cánh cửa rộng cho một tệp đến dưới dạng tệp đính kèm hoặc dán từ một chủ đề diễn đàn. Sự phân biệt không phải về phong cách, đó là sự khác biệt giữa cấu hình và mã.

Niềm tin sai lầm cần gạt bỏ là một hồ sơ chỉ có thể chuyển hướng lưu lượng. Một trình trợ giúp chạy ip route add và một trình chạy curl tới một máy chủ từ xa là cùng một cơ chế, và hồ sơ trông giống hệt nhau từ bên ngoài. Không có gì trong hình thức tệp cho bạn biết mình có loại nào, vì vậy việc xem xét phải chạm tới chính script.

Điều gì thực sự quyết định việc thực thi, và các dòng cho phép trông như thế nào

Ba thứ chi phối một trình trợ giúp: chỉ thị sự kiện đặt tên cho nó, mức script-security cho phép nó và cách triển khai của chính nền tảng ứng dụng khách. Một hồ sơ có thể yêu cầu một móc nối và vẫn không thấy gì xảy ra, vì ứng dụng khách di động hoặc bản dựng máy tính để bàn bị rút gọn có thể không triển khai sự kiện đó chút nào. Tương tự, một hồ sơ yêu cầu nhiều quyền hơn mức chức năng của nó cần cho bạn biết điều gì đó về nguồn gốc của nó. Mức quyền là một khả năng, không phải một sự chấp thuận. Các dòng cho phép trông như thế này, với một đường dẫn thay cho đường dẫn của bạn.

script-security 2
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.sh

Mức 0 từ chối các chương trình bên ngoài và mức 1, mặc định, chỉ cho phép các tệp thực thi tích hợp của ứng dụng khách, nên một móc nối cần 2 trở lên; mức 3 chủ yếu dành cho việc truyền mật khẩu cũ và tốt hơn nên tránh. Một hồ sơ được cung cấp kèm móc nối cần cả chỉ thị lẫn mức đó, vì vậy một dòng gần cuối tệp đáng được xem xét như khối chứng chỉ. Sách hướng dẫn OpenVPN liệt kê các mức quyền, và cách diễn đạt của nó đáng đọc bên cạnh những gì hồ sơ thực sự yêu cầu.

Quyền sở hữu, đường dẫn và những gì được đưa cho trình trợ giúp

Một hồ sơ bạn tin tưởng nhưng trỏ tới một script mà tài khoản khác có thể ghi đè không phải là một thỏa thuận đáng tin cậy, vì lần xem xét hôm qua không còn mô tả điều gì đang chạy hôm nay. Hãy kiểm tra chủ sở hữu và chế độ của trình trợ giúp, và kiểm tra rằng đường dẫn đã cấu hình dẫn tới tệp bạn đã kiểm tra chứ không phải một cái tên mà thứ khác có thể che khuất. Các đối số và môi trường cũng đáng được nhìn như vậy: ứng dụng khách chuyển chi tiết kết nối cho móc nối, và một trình trợ giúp ghi lại toàn bộ môi trường của nó có thể đang ghi thông tin xác thực vào một phiếu hỗ trợ. Ưu tiên một tích hợp được ghi chép từ nhà vận hành hoặc nền tảng hơn là một script DNS sao chép từ một bài viết không liên quan, vì hai trình quản lý trình phân giải tranh nhau cùng một tệp sẽ tạo ra một sự cố trông như VPN bị hỏng.

Khi bạn báo cáo một móc nối bị lỗi, hãy che môi trường trước khi dán nó ở bất cứ đâu. Bản kết xuất giúp bạn gỡ lỗi cũng có thể mang theo mã thông báo xác thực bạn.

Lỗi dọn dẹp xuất hiện sau khi đường hầm đã biến mất

Một trình trợ giúp up thêm tuyến và cài đặt trình phân giải, và trình trợ giúp down được cho là sẽ gỡ bỏ chúng lần nữa. Khi móc nối down bị thiếu, thất bại trong im lặng hoặc không bao giờ chạy vì ứng dụng khách bị giết, phần còn lại sẽ sống lâu hơn phiên. Lưu lượng khi đó đi theo một đường mà không ai lên kế hoạch và các tên được phân giải qua một trình phân giải lẽ ra phải bị gỡ bỏ, trong khi bản thân đường hầm có vẻ khỏe mạnh. Những triệu chứng đó đến sau khi ngắt kết nối, vì vậy mạng bị đổ lỗi thay vì hồ sơ.

Hãy kiểm tra việc tháo dỡ như một bước riêng: dựng đường hầm lên, ghi lại các tuyến và trình phân giải, hạ nó xuống, rồi xác nhận cả hai đã biến mất. Một hồ sơ kết nối sạch vẫn có thể để lại trạng thái, và mã thoát bằng không của trình trợ giúp không chứng minh rằng trình phân giải đã kết thúc ở nơi bạn nghĩ.

Xem xét trình trợ giúp và giữ một lối ra

Đọc script từ đầu đến cuối để tìm ba điều: các lệnh cần đặc quyền, các đường dẫn được mã hóa cứng có thể không tồn tại trên hệ thống của bạn và mọi lệnh gọi mạng mà nó thực hiện. Sau đó xem nó thất bại thế nào, vì một trình trợ giúp nuốt lỗi biến một sai sót cấu hình thành một bí ẩn. Nếu bạn không thể nói trong một câu script làm gì và ai có thể sửa nó, bạn chưa sẵn sàng bật nó. Một hồ sơ yêu cầu nhiều đặc quyền hơn mức câu đó cần là dấu hiệu dừng lại.

Giữ hồ sơ hoạt động cuối cùng và trình trợ giúp mà nó tham chiếu trong kho lưu trữ được bảo vệ, với cả hai phiên bản được ghi lại, để việc khôi phục là một bản sao chứ không phải một lần dựng lại vào thời điểm tồi tệ nhất. Nếu trình trợ giúp chỉ tồn tại cho một bản phân phối hoặc phiên bản ứng dụng khách không còn cần nó, hãy cho nó nghỉ hưu trong cấu hình sở hữu cài đặt thay vì nâng đặc quyền cho tới khi lỗi dừng lại. Đó là lối ra: ít bộ phận chuyển động hơn, không phải nhiều quyền hơn.

Bài viết liên quan