Nếu SSTP và IKEv2 là những phương thức sử dụng chỉ một kỹ thuật kết nối thì OpenVPN có thể kết nối đồng thời bằng một trong những kỹ thuật kết nối mạng ảo hóa mà được ưa chuộng hiện nay.
OpenVPN là tiêu chuẩn hay giao thức mà bản thân nó thiết lập một hệ thống mạng riêng ảo riêng (VPN) với mã nguồn mở thực hiện các kỹ thuật để tạo kết nối bảo mật điểm đến điểm hoặc đa điểm an toàn. Nó được phát triển để tương thích với các hệ điều hành được sử dụng phổ biến nhất và cung cấp các tùy chọn cấu hình tối đa hóa tính linh hoạt, bao gồm sử dụng giao tiếp Giao thức điều khiển truyền (TCP) hoặc Giao thức dữ liệu người dùng (UDP). Ứng dụng VPN được xuất bản dưới Giấy phép Công cộng GNU (GNU General Public License (GNU GPL)) để thúc đẩy việc áp dụng rộng rãi hơn.
Tổng quan về OpenVPN
Mục đích của OpenVPN là cho phép người dùng thiết lập kết nối điểm đến điểm hoặc đa điểm an toàn bằng cách tạo kết nối VPN an toàn. OpenVPN đã được phát triển dưới dạng một dự án đầu tư thương mại có quy mô toàn cầu, mặc dù phiên bản đầu tiên dạng tiêu chuẩn là từ năm 2001 nhưng đến nay phiên bản được giới thiệu ổn định là 2.5.7 vào tháng 5 năm 2022. Phiên bản hiện nay tương thích với phần lớn hệ điều hành phổ biến như Window, OS, Linux, Android và iOS. OpenVPN hiện nay hiện đang sử dụng Giấy phép Cộng đồng GNU phiên bản 2.
Điểm chung với giao thức đường hầm bảo mật (SSTP), OpenVPN dựa vào bảo mật lớp cổng bảo mật lớp truyền tải (SSL/TLS) để xác thực và trao đổi khóa mã hóa. OpenVPN sử dụng cổng 443 để gửi dữ liệu đóng gói qua kênh SSL/TLS. OpenVPN sử dụng giao thức bảo mật đóng gói dữ liệu riêng dựa trên SSL và TLS, thay vì sử dụng giao thức điểm đến điểm (PPP) hoặc giao thức đường hầm lớp hai (L2TP) như SSTP. OpenVPN sử dụng thư viện OpenSSL để triển khai mã hóa dữ liệu và điều khiển, cho phép sử dụng tất cả các mật mã có sẵn trong gói này, bao gồm cả thuật toán AES cấp quân sự với khóa 256 bit. Chính bởi việc sử dụng mã nguồn mở mà OpenVPN được đánh giá cao hơn SSTP bởi yếu tố thiếu tính minh bạch của mã nguồn và khả năng chiếm quyền kiểm soát của nhà phát hành tiêu chuẩn. Bên cạnh đó việc sử dụng thư viện mã nguồn mở OpenSSL cũng mang lại những tiện ích trong tạo khóa và bảo mật tốt hơn cho cả người dùng và hệ thống.

Hình 1: Minh họa về kết nối của OpenVPN
OpenVPN bao gồm các tùy chọn xác thực bằng thông tin xác thực truy cập (tên người dùng và mật khẩu), chứng chỉ hoặc khóa bí mật được chia sẻ trước. Điều này mang lại sự linh hoạt đáng kể cho việc quản lý một loạt các ứng dụng và thiết bị, bao gồm khả năng tương thích với các thiết bị NAT (Network Address Translation). Hướng dẫn sau đây cho thấy cách OpenVPN có thể được định cấu hình trên Bộ định tuyến Wi-Fi thông minh Linksys.
OpenVPN có thể được cấu hình để sử dụng UDP (User Datagram Protocol), được thiết kế để giảm thiểu độ trễ với chi phí đáng tin cậy bằng cách không triển khai logic sửa lỗi và xác định lỗi cho đường truyền. Giao thức này phù hợp với các hoạt động mà băng thông cao quan trọng hơn tính toàn vẹn của dữ liệu, chẳng hạn như phát trực tuyến các tệp đa phương tiện và chơi game. Ngoài ra, OpenVPN có thể được cấu hình để sử dụng TCP. Mặc dù không nhanh như UDP, TCP bao gồm logic sửa lỗi và logic truyền lại tự động để cung cấp khả năng truyền dữ liệu đầu cuối đáng tin cậy. Điều này là lý tưởng trong các tình huống mà việc truyền dữ liệu đáng tin cậy quan trọng hơn băng thông, chẳng hạn như truyền thông tin nhạy cảm hoặc thông tin xác thực.
Một nhược điểm của việc sử dụng TCP qua UDP là việc sử dụng đường hầm TCP trong kết nối VPN qua kết nối TCP tiêu chuẩn có thể dễ gặp sự cố kết nối TCP. Giả sử không có đủ băng thông khả dụng trên mạng không đường hầm để đảm bảo rằng bộ định thời TCP có đường hầm không hết hạn trong quá trình truyền. Trong trường hợp đó, quá trình nhắn tin có thể không thành công và độ trễ của kết nối tăng lên rõ rệt. Điều này sau đó có thể gây ra các hạn chế băng thông hơn nữa, làm trầm trọng thêm vấn đề cho đến khi đường hầm TCP ngừng hoạt động chính xác. Đây có thể là một vấn đề nghiêm trọng nếu sự cố gián đoạn TCP xảy ra trong một hoạt động truyền dữ liệu quan trọng.
OpenVPN nắm lấy những lợi thế của việc thiết lập giao thức SSL, bao gồm mã hóa 256-bit, kiểm tra bảo mật lưu lượng và thương lượng khóa. Các tính năng này mang lại những lợi ích đáng kể so với Giao thức đường hầm điểm đến điểm (PPTP) và L2TP/IPSec.
Ưu nhược điểm của OpenVPN
Nhắc đến ưu điểm, OpenVPN là một giao thức mã nguồn mở với một cộng đồng người dùng lớn và tích cực. Điều này làm giảm nguy cơ các lỗ hổng bảo mật đã biết vẫn chưa được vá trong thời gian quan trọng hoặc các cửa hậu được phép tồn tại. Đồng thời so với các phương thức khác đặc biệt như so với SSTP thì cộng đồng người dùng càng tin tưởng OpenVPN sau vụ tấn công NSA.
Thứ hai là OpenVPN tương thích với một loạt các nền tảng bao gồm tất cả các hệ điều hành phổ biến như Windows (hầu như tất cả phiên bản Windows hiện nay), macOS (hỗ trợ từ OS X 10.8), Linux, Android (từ Android 4.0 trở lên), iOS (hỗ trợ từ phiên bản iOS 6 trở lên) và các nền tảng chuyên dụng hơn, bao gồm Solaris (hay được biết đến là nhóm hệ điều hành Unix với giao diện người dùng GNOME) và OpenBSD (một hệ điều hành tương tự Solaris). Điều này tức là OpenVPN đã triển khai mạng ảo hóa tương thích với phần lớn các hệ điều hành và có thể coi là mạng ảo hóa thân thiện nhất hiện nay trên thị trường. Chính bởi vậy mà ngay cả Microsoft cũng có các hướng dẫn cho thấy việc di chuyển từ SSTP sang OpenVPN có thể tương đối đơn giản với kiến thức kỹ thuật phù hợp. Thiết lập cho máy chủ OpenVPN trên Linux cũng tương tự, các hướng dẫn đơn giản và dễ dàng.
Thứ ba là OpenVPN có thể sử dụng nhiều loại mật mã, bao gồm thuật toán AES mạnh mẽ với mã hóa 256-bit, mang lại mức độ bảo mật tuyệt vời. Điều này an toàn hơn đáng kể so với các giao thức phổ biến khác sử dụng cùng độ dài cho khóa mã hóa. Nó có ít lỗ hổng triển khai hơn khiến thuật toán mã hóa bị phá vỡ bằng cách sử dụng các lỗ hổng trong mã thay vì dựa vào một cuộc tấn công bạo lực vào chính khóa. Một lợi ích của việc sử dụng giao thức có thuật toán mã hóa mạnh mẽ là khả năng bảo vệ được cung cấp cho các dạng tài khoản tài chính, thông tin cá nhân nhạy cảm.
Thứ tư là OpenVPN sử dụng kênh SSL/TLS qua cổng TCP 443, lưu lượng truy cập không thể phân biệt được với lưu lượng truy cập Giao thức truyền siêu văn bản An toàn (HTTPS) thông thường. Nó không thể được xác định bởi nhà cung cấp dịch vụ Internet (ISP) hoặc tường lửa đang tìm cách chặn lưu lượng VPN. Không giống như SSTP, dễ dàng kiểm tra lưu lượng đang chuyển tiếp và xác định bất kỳ thông tin tiêu đề nào sẽ cho rằng đó không phải là lưu lượng HTTPS. Điều này làm cho giao thức này trở nên lý tưởng để vượt qua các ISP và tường lửa chặn lưu lượng VPN. Ngoài ra, không giống như SSTP, OpenVPN có thể được định cấu hình để sử dụng các cổng khác nếu cần thiết để bỏ qua bất kỳ khối nào gặp phải. Tính linh hoạt bổ sung này làm cho giao thức này trở nên lý tưởng cho những người dùng đang tìm cách tránh các kiểm soát internet toàn diện và giám sát tích cực, đặc biệt khi ISP đã chặn việc sử dụng VPN vì lý do thương mại.
Bên cạnh đó, OpenVPN cũng có một số nhược điểm:
Thứ nhất là OpenVPN không khả dụng dưới dạng dịch vụ được cài đặt sẵn và vì một ứng dụng phức tạp để cài đặt và cấu hình, đòi hỏi kiến thức kỹ thuật chuyên môn để triển khai chính xác giải pháp an toàn hoàn toàn. Người dùng không có quyền truy cập vào chuyên môn được yêu cầu sẽ cần phải cung cấp một dịch vụ dựa trên OpenVPN được định cấu hình trước như một giải pháp.
Thứ hai là việc sử dụng thuật toán mã hóa mạnh mẽ dẫn đến tốc độ mã hóa tương đối chậm, điều này có thể ảnh hưởng xấu đến băng thông mạng và độ trễ khi yêu cầu thông lượng dữ liệu lớn. Tuy nhiên, giao thức có thể được cấu hình để sử dụng các thuật toán mã hóa nhanh hơn và kém an toàn hơn nếu cần thiết.
Thứ ba là hiện nay người dùng phổ biến sử dụng là phiên bản cho máy tính, phiên bản này được đánh giá cao nhưng phiên bản cho di dộng thì có vẻ chưa được quan tâm nhiều nên chất lượng dịch vụ là kém. Tuy nhiên điều này là dễ hiểu bởi quá trình mã hóa đòi hỏi độ phức tạp cao mà khó tương thích cho thiết bị di dộng.
Giới thiệu lớp mật mã của OpenVPN
Sau đây là tổng quan kỹ thuật về lớp mật mã của OpenVPN và giả định sự hiểu biết trước về các khái niệm mật mã hiện đại.
OpenVPN có hai chế độ xác thực: Static Key (sử dụng khóa tĩnh được chia sẻ trước) và TLS (sử dụng chứng chỉ SSL/TLS để xác thực và trao đổi khóa). Trong chế độ khóa tĩnh, khóa chia sẻ trước được tạo và chia sẻ giữa cả hai đồng nghiệp OpenVPN trước khi đường hầm được bắt đầu. Khóa tĩnh này chứa 4 khóa độc lập: HMAC gửi, HMAC nhận, mã hóa và giải mã. Theo mặc định ở chế độ khóa tĩnh, cả hai máy chủ sẽ sử dụng cùng một khóa HMAC và cùng một khóa bí mật/công khai. Tuy nhiên, sử dụng tham số hướng tới --secret, có thể sử dụng cả 4 phím một cách độc lập.
Trong chế độ SSL/TLS, một phiên SSL được thiết lập với xác thực hai chiều (nghĩa là mỗi bên của kết nối phải xuất trình chứng chỉ của riêng mình). Nếu xác thực SSL/TLS thành công, thì việc mã hóa/giải mã và tài liệu nguồn khóa HMAC sẽ được tạo ngẫu nhiên bởi chức năng RAND_bytes của OpenSSL và được trao đổi qua kết nối SSL/TLS. Cả hai bên của kết nối đều đóng góp tài liệu nguồn ngẫu nhiên. Chế độ này không bao giờ sử dụng bất kỳ khóa nào theo hai chiều, vì vậy mỗi máy ngang hàng có HMAC gửi riêng biệt, HMAC nhận, mã hóa gói và khóa giải mã gói. Nếu --key-method 2 được sử dụng, các khóa thực tế sẽ được tạo từ vật liệu nguồn ngẫu nhiên bằng cách sử dụng chức năng TLS PRF. Nếu --key-method 1 được sử dụng, các khóa được tạo trực tiếp từ hàm OpenSSL RAND_bytes. --key-method 2 đã được giới thiệu với OpenVPN 1.5.0 và sẽ được đặt làm mặc định trong OpenVPN 2.0.
Trong quá trình làm lại SSL/TLS, có một tham số cửa sổ chuyển tiếp cho phép chồng chéo giữa việc sử dụng khóa cũ và mới, do đó không có áp lực về thời gian hoặc tắc nghẽn về độ trễ trong quá trình thương lượng lại SSL/TLS.
Vì SSL/TLS được thiết kế để hoạt động trên một phương tiện truyền tải đáng tin cậy, OpenVPN cung cấp một lớp truyền tải đáng tin cậy trên đầu UDP (xem sơ đồ bên dưới).
Khi mỗi đồng đẳng có bộ khóa của nó, hoạt động chuyển tiếp đường hầm sẽ bắt đầu.
Gói được mã hóa được định dạng như sau:
- HMAC (IV rõ ràng, phong bì được mã hóa).
- Rõ ràng IV.
- Nội dung đã đóng góp được mã hóa
Bản rõ của nội dung đã đóng góp được mã hóa được định dạng như sau:
- Số thứ tự 64 bit
- Dữ liệu tải trọng, tức là gói IP hoặc khung Ethernet
HMAC và IV rõ ràng nằm ngoài nội dung đã đóng gói được mã hóa. IV cho mỗi gói được ngẫu nhiên hóa bằng cách sử dụng một PRNG không dựa trên mà ban đầu được tạo ra từ hàm OpenSSL RAND_bytes.
Các chức năng HMAC, mã hóa và giải mã được cung cấp bởi giao diện OpenSSL EVP và cho phép người dùng chọn một mật mã, kích thước khóa và thông báo tùy ý cho HMAC. BlowFish là mật mã mặc định và SHA1 là thông báo mặc định. Giao diện OpenSSL EVP xử lý phần đệm đến nhiều kích thước khối bằng cách sử dụng phần đệm PKCS#5. Việc sử dụng mật mã chế độ CBC được khuyến khích nhưng không bắt buộc.
Một cải tiến bảo mật đáng chú ý mà OpenVPN cung cấp so với vanilla TLS là nó mang lại cho người dùng cơ hội sử dụng cụm mật khẩu được chia sẻ trước (hoặc khóa tĩnh) kết hợp với chỉ thị --tls-auth để tạo khóa HMAC để xác thực các gói, chúng là một phần của chuỗi bắt tay TLS. Điều này bảo vệ chống lại sự tràn bộ đệm trong quá trình triển khai OpenSSL TLS, bởi vì kẻ tấn công thậm chí không thể bắt đầu bắt tay TLS nếu không có thể tạo các gói với chữ ký HMAC chính xác.
OpenVPN ghép kênh SSL/TLS được sử dụng để xác thực và trao đổi khóa với luồng dữ liệu đường hầm được mã hóa thực tế. OpenVPN cung cấp kết nối SSL/TLS với một lớp truyền tải đáng tin cậy (vì nó được thiết kế để vận hành). Các gói IP thực tế, sau khi được mã hóa và ký bằng HMAC, sẽ được đào qua UDP mà không có bất kỳ lớp độ tin cậy nào. Vì vậy, nếu --proto udp được sử dụng, không có gói IP nào được truyền qua đường truyền đáng tin cậy, loại bỏ vấn đề xung đột lớp độ tin cậy.
Kết luận
Trong bài viết này, tiêu chuẩn mạng ảo hóa OpenVPN được giới thiệu đến bạn đọc một cách cơ bản từ tổng quan, ưu nhược điểm đến tương đối chi tiết lớp bảo mật. Đây là một tiêu chuẩn được sử dụng phổ biến nhất với kết nối mạng ảo hóa và đang là dịch vụ phổ biến đóng góp GDP lớn đối với riêng thị trường kết nối ảo hóa.
Thông qua việc giới thiệu giao thức này, bài đọc đưa ra các cơ sở tri thức từ tổng quan, nhìn nhận các mặt tốt và hạn chế để triển khai OpenVPN. Thực chất hiện nay việc triển khai VPN vô cùng đơn giản trong cài đặt nhưng chỉ đòi hỏi một số yếu tố như độ phức tạp mã hóa.
Lê Nhật
Tài liệu tham khảo
- openvpn.net.