| ]

Một trong những vấn đề nan giải mà các nhà quản trị Microsoft đang đương đầu là làm sao quản lý hệ thống từ xa theo cách an toàn hơn? Trong thế giới UNIX thì câu trả lời khá đơn giản: dùng giao thức SSH. Nhờ có SSH, chúng ta có thể quản lý những hệ thống từ xa không những trong chế độ văn bản (text mode), mà còn có thể chạy những trình ứng dụng X-Window từ xa bằng cách dùng kỹ thuật đường hầm giao thức (protocol tunneling). Và tất cả những cái đó đều dùng mật mã vững chắc để bảo vệ việc truyền dữ liệu đi từ việc truy cập trái phép.

Không may, để bảo vệ an toàn việc truy cập từ xa đến hệ thống MS Windows thì không dễ dàng một chút nào. Tại sao? Thứ nhất, chỉ có NT Terminal Server, 2000 Server và XP được trang bị những dịch vụ quản lý từ xa (Terminal Services). Thứ hai, giải pháp quản lý hệ thống MS Windows có khả năng là không mã hoá dữ liệu truyền đi (giống như VNC), hoặc là sự bổ sung của họ thường đi liền với những chi phí thêm vào khá đáng kể.

Bài viết này sẽ mô tả phương pháp chung cho việc quản lý từ xa mà có thể được dùng để quản lý hầu hết tất cả hệ thống của MS Windows: từ Windows 95 lên đến XP. Phương pháp này không những chỉ dùng chí phí thấp nhất, mà còn có sự bảo mật tương đối cao hơn.

Giải Pháp
=======
Những đặc điểm nào mà giải pháp quản lý mạng từ xa nên có? Thứ nhất, là phải thiết thực. Mặc dầu trong trường hợp của hệ thống Unix, việc sử dụng phương pháp này để quản lý MS Windows khá xa vời ý tưởng trên. Bởi vì MS Windows là một hệ thống dựa trên môi trường đồ hoạ, việc quản lý từ xa cũng nên thực hiện trong một chế độ đồ hoạ. Bên cạnh đó cũng phải an toàn hơn. Giải pháp này không những cung cấp sự thẩm quyền cho người sử dụng, mà còn phải đảm bảo tính cẩn mật và toàn vẹn hơn cho việc truyền dữ liệu.

Trong giải pháp này, tất cả những yêu cầu trên sẽ được gặp ở đây bằng cách dùng phần mềm có mã nguồn mở sau:

+ VNC - VNC (Virtual Network Computing) cung cấp sự quản lý đồ họa cho những hệ thống từ xa. Ở trường hợp của chúng ta, phần mềm VNC sẽ là phần "cốt lõi" của toàn bộ giải pháp này. Nó sẽ cũng cấp một bàn giao tiếp đồ họa (graphic console) đến hệ thống MS Windows từ xa.

+ Stunnel - Mục đích chính của tiện ích Stunnel là tạo ra những đường hầm SSL để truyền dữ liệu, thường là những giao thức không mã hoá. Ở giải pháp đang miêu tả ở đây, công cụ này sẽ được dùng để bảo vệ giao thức VNC. Nhờ có Stunnel, nó không những bảo đảm được tính cẩn mật và toàn vẹn trong việc truyền dữ liệu, mà còn xác thực máy khách của và máy chủ VNC.

+ OpenSSL - OpenSSL là một thư viện mã hoá mà có thể được dùng để nâng cao những ứng dụng bởi chức năng mã hoá dữ liệu. Dùng OpenSSL chúng ta cũng có thể tạo ra, ký hiệu và huỷ bỏ chứng nhận mà có thể được dùng trong giải pháp dựa trên kiến trúc khóa công cộng (public key infrastructure). Ở phương pháp bên dưới công cụ này sẽ được dùng để tạo và ký hiệu chứng nhận cần thiết để xác thực cả máy khách lẫn máy chủ của VNC.

Hình sau đây cho thấy cách mà phần mềm đề cập ở trên được dùng để cung cấp sự quản lý vững chắc mạng từ xa:

Bây giờ, hãy thực hành giải pháp được miêu tả ở đây.

Cài đặt phần mềm

Giai đoạn đầu tiên của việc quản lý an toàn từ xa là phải cài đặt phần mềm.

VNC

Để dùng VNC, ta phải tải về (www.uk.research.att.com/vnc/ ) và cài đặt nó trên máy chủ mà ta muốn quản lý ở xa mà sẽ được đề cập dưới đây. Tiếp theo, ta phải đăng ký dịch vụ VNC (Start Menu ® RealVNC ® VNC Server ® Register VNC Server Service) và khởi động lại hệ thống.

Sau khi khởi động lại hệ thống, ta phải đặt vài tham số cơ bản của dịch vụ VNC. Quan trọng nhất là gõ một mật khẩu phù hợp để bảo vệ dịch vụ VNC chống lại sự truy cập trái phép. Bước tiếp theo là tắt tuỳ chọn "Enable Java Viewer" (nó không được sử dụng kể từ khi tuỳ chọn này yêu cầu hai đường hầm SSL riêng biệt), theo như hình bên dưới.

Sau khi định xong cấu hình cho máy chủ VNC, ta nên tải phần mềm máy khách VNC (vncviewer.exe) và đặt nó ở máy chủ mà nó sẽ là máy khách của VNC.

Ở điểm này ta nên kiểm tra nếu máy khách VNC có thể thiết lập một nối kết đến máy chủ VNC. Nếu những chương trình có thể liên lạc lẫn nhau được, thì ta hoàn thành việc định cấu hình.

Bởi vì máy chủ VNC chỉ có khả năng truy cập bởi một Stunnel cục bộ, những mục nhập theo sau nên được thêm vào Windows Registry trên máy chủ VNC:
CODE
Key: HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3Name: LoopbackOnly
Type: REG_DWORD
Value: 1


Những mục nhập ở trên làm cho nó có khả năng dùng kết nối loopback, và chỉ giới hạn listen ở cổng 5900/tcp đến localhost (127.0.0.1). Nhờ đó, máy chủ VNC sẽ không bị truy cập trực tiếp từ mạng máy tính. Nếu ta không muốn người sử dụng tắt dịch vụ VNC trên host của máy chủ VNC, thì nhập vào Registry:

CODE
Key: HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\Default
Name: AllowShutdown
Type: REG_DWORD
Value: 0


Để kích hoạt những sự thay đổi ở trên, ta phải khởi động lại dịch vụ VNC.

Stunnel

Bước tiếp theo là cài đặt tiện ích Stunnel. Để cài đặt, ta tải xuống và đặt nó trên máy chủ và máy khách của VNC, trong thư mục: C:\Program Files\Stunnel. Ta cũng nên tải thêm hai thư viện của Stunnel: libeay32.dll, libssl32.dll.

Nếu ta muốn cho Stunnel tự động bắt đầu khi hệ thống khởi động, thì thêm vào Windows Registry mục sau:

CODE
Key: HKEY_LOCAL_MACHINE\SOFTWARE\
Microsoft\Windows\CurrentVersion\Run
Name: Stunnel
Type: REG_SZ
Value: "C:\Program Files\Stunnel\stunnel-4.04.exe"



OpenSSL

Lúc này thư viện OpenSSL phần lớn được cài đặt như mặc định trong hầu hết Linux phân phối, bời vì nó phụ thuộc vào OpenSSH. Tuy nhiên, một vài người biết rằng có phiên bản OpenSSL cho MS Windows có chức năng gần như giống nhau. Bởi vì bài viết dành cho nền tảng MS Windows, nên ta sẽ sử dụng phiên bản OpenSSL này.

Để cài đặt và định cấu hình ch phần mềm OpenSSL, ta phải thực hiện những bước sau:

Phiên bản của OpenSSL (openssl.exe) có thể tải về từ http://www.stunnel.org/download/binaries.html . Giống như chương trình Stunnel, ta cũng phải tải thêm hai thư viện: libeay32.dll và libssl32.dll. Phần mềm tải về phải đặt trong thư mục C:\Program Files\OpenSSL.

Hai file khác cũng phải được tải về là: file cấu hình, openssl.conf (http://www.securityfocus.com/data/tools/openssl.conf) và script ca.bat (http://www.securityfocus.com/data/tools/ca.bat), mà sẽ được dùng để cấp sự chứng nhận. Hai file đó đặt trong thư mục C:\Program Files\OpenSSL. Nội dung cuối cùng của thư mục phải tương tự như sau:

Bước tiếp theo cấp sự chứng nhận, mà được dùng để xác thực máy chủ và máy khách của VNC.

Chìa khóa và việc tạo ra Bằng chứng nhận (Certificates)

Certification Authority

Quy trình cấp chứng nhận nên bắt đầu bằng việc tạo một cặp khoá private/public và chứng nhận cho nhóm thứ ba, hay CA (Certification Authority). Chìa khóa private của CA sẽ được dùng sau này để ký hiệu chứng nhận cho máy chủ và máy khách VNC. Sự chứng nhận CA sẽ được thay thế trên tất cả máy chủ và máy khách VNC. Bởi vì chìa khóa private của CA là một trong những yếu tố quan trọng của mọi sự thi hành PKI, chìa khoá phải được bảo vệ bằng cụm mật khẩu tốt và tránh xa những người dùng bình thường.

Để tạo ra một cặp chìa khoá private/public và chứng nhận cho CA, ta chạy script ca.bat như sau:

C:\progra~1\OpenSSL\ca genca

Sau khi thực hiện những bước trên, văn bằng CA sẽ được bảo quản ở file C:\CA\CAcert.pem, và cặp chìa khoá private/public sẽ được bảo quản ở file C:\CA\private\CAkey.pem.

Máy chủ VNC

Bước tiếp theo là generate cặp chìa khóa private/public và chứng nhận cho máy chủ VNC:

C:\progra~1\OpenSSL\ca server

Theo kết quả, những file sau sẽ được tạo ra trong thư mục C:\CA\temp\vnc_server:

server.key - cặp chìa khoá private/public

server.crt - chứng nhận máy chủ

server.pem - server.key + server.crt (yêu cầu bởi Stunnel)

Máy khách VNC

Bước cuối cùng là tạo ra cặp chìa khóa private/public và chứng nhận cho máy khách VNC:

C:\progra~1\OpenSSL\ca client

Giống như ở bước trước, những file sau sẽ được tạo trong thư mục C:\CA\temp\vnc_client:

+ client.key - cặp chìa khóa private/public
+ client.crt - chứng nhận máy khách (client's certificate)
+ client.pem - client.key + client.crt (yêu cầu bởi Stunnel)

Cấu hình Stunnel

VNC Server

Trước khi thử thiết lập một sự kết nối an toàn giữa máy chủ và máy khách của VNC, ta phải định cấu hình cho tiện ích Stunnel, và trang bị với tất cả những chìa khoá và chứng nhận mà nó đòi hỏi.

Để làm điều đó, ta nên tạo một file "C:\Program Files\Stunnel\stunnel.conf" với nội dung sau:

CODE
CAfile = CAcert.pem
CApath = certificates
cert = server.pem
client = no
verify = 3

[vnc]
accept = 443
connect = 127.0.0.1:5900


Cấu hình ở trên sẽ làm cho tất cả những kết nối vào cổng 443/tcp sẽ được chuyển tiếp đến cổng cục bộ 5900/tcp.

Bước tiếp theo là thay thể cả CA's certificate (C:\CA\CAcert.pem) và cặp chìa khoá private/public của máy chủ VNC, chứng nhận (C:\CA\temp\vnc_server\server.pem) vào thư mục C:\Program Files\Stunnel.

Cuối cùng ta phải nhập chứng nhận của máy khách VNC vào. Để cho Stunnel tìm certificate trong suốt quá trình thẩm định, ta phải thay đổi tên của nó như sau (lệnh theo sau phải chạy trên máy chủ mà certificates đã generate; value phải được thay thế bằng kết quả của lệnh "openssl x509" ):

cd C:\CA\temp\vnc_client
C:\progra~1\openssl\openssl x509 -hash -noout -in client.crt
value
copy client.crt value.0

File value.0 nên đặt vào thư mục C:\Program Files\Stunnel\certificates.

VNC Client

Đầu tiên, ta phải tạo một file "C:\Program Files\Stunnel\stunnel.conf" với nội dụng sau:
CODE
CAfile = CAcert.pem
CApath = certificates
cert = client.pem
client = yes
verify = 3

[vnc]
accept = 127.0.0.1:5900
connect = VNC_server_IP_address:443



Bước tiếp theo là cất giữ CA's Certificate (C:\CA\CAcert.pem) và cặp chìa khoá private/public và chứng nhận của máy khách VNC (C:\CA\temp\vnc_client\client.pem) trong thư mục C:\Program Files\Stunnel.

Cuối cùng, ta phải đổi tên của file chứng nhận máy chủ VNC theo cách sau:

cd C:\CA\temp\vnc_server
C:\progra~1\openssl\openssl x509 -hash -noout -in server.crt
value
copy server.crt value.0

và cất nó vào thư mục C:\program files\Stunnel\certificates.

Nội dung cuối cùng của thư mục C:\Program Files\Stunnel phải tương tự như sau:


Kiểm tra việc kết nối

Lúc này tất cả các phần mềm đã sẵn sàng được dùng. Để kiểm tra nó, ta phải chạy Stunnel trên cả máy chủ, máy khách, và chạy dịch vụ VNC.

Sau đó, ở host máy khách VNC ta chạy vncviewer.exe. Ta nhập vào địa chỉ: 127.0.0.1. Nếu mọi thứ được định hình chính xác, việc kết nối với máy chủ VNC sẽ được thiết lập, và Stunnel sẽ hiển thị những thông tin sau:

Ở máy chủ VNC:

Ở máy khách VNC:

Nếu vì một vài lý do nào đó mà sự kết nối bị hỏng, ta nên tăng mức độ log của Stunnel, và cố gắng thử tìm ra nguyên nhân. Để làm điều đó ta thêm vào file stunnel.conf:

debug = 7

Sau đó khởi động Stunnel và thử thiết lập kết nối một lần nữa.

Kết nối đảo ngược

Phương pháp trên hoạt động tốt, nhưng chỉ khi máy chủ VNC hợp lệ, địa chỉ IP ở bên ngoài hay nó được đặt trong cùng mạng LAN, giống như máy khách VNC. Nhưng điều gì sẽ xảy ra nếu máy chủ VNC được đặt trong NAT hay những kết nối vào host này bị drop bởi firewall?

Như tôi đã đề cập ở trước, VNC có khả năng thiết lập sự kết nối đảo ngược. Để dùng tuỳ chọn đó, những thay đổi sau phải được áp dụng cho file stunnel.conf trên máy chủ VNC:

CODE
CAfile = CAcert.pem
CApath = certificates
cert = server.pem
client = yes
verify = 3

[vnc]
accept = 127.0.0.1:5500
connect = VNC_client_IP_address:443

và ở máy khách VNC:

CAfile = CAcert.pem
CApath = certificates
cert = client.pem
client = no
verify = 3

[vnc]
accept = 443
connect = 127.0.0.1:5500


Lưu ý rằng vài trò của tiện ích Stunnel bây giờ đã đảo ngược. Stunnel ở máy chủ trở thành máy khách SSL, và Stunnel ở máy khách lại thành máy chủ SSL.

Cũng có một sự thay đổi trong cách thiết lập kết nối bằng phần mềm VNC. Ở phương pháp này, nên chạy vncviewer.exe đầu tiên, ở chế độ listen (Start Menu ® RealVNC ® VNC Viewer ® Run Listening VNC Viewer). Sau đó, ở máy chủ VNC, ta phải dùng tuỳ chọn "Add New Client" theo sau:

Sau khi thực hiện xong những bước trên, ta thiết lập sự kết nối giữa máy chủ và máy khách VNC.

Giải pháp trên là một cách rất hiệu quả để hạn chế việc bỏ xót NAT; tuy nhiên nó cũng có một cái bất lợi rất quan trọng: để thiết lập một sự kết nối đảo ngược, sự can thiệp thủ công lên máy chủ được đòi hỏi. Câu hỏi phát sinh là có cách nào thiết lập sự kết nối mà không cần đến sự can thiệp bằng thủ công?

Để hiển thị, nó phải được dùng trong hệ điều hành MS Windows "Task Scheduler Service", để giải quyết vấn đề can thiệp bằng thủ công. Hình ảnh bên dưới là một ví dụ của "Task Scheduler", mà máy chủ VNC cố gắng thiết lập một kết nối với máy khách VNC hàng ngày giữa 9 giờ sáng và 9 giờ chiều, trong khoảng 10 phút. Nếu muốn thiết lập một kết nối với máy chủ VNC, tất cả những gì ta cần làm là chạy VNC ở chế độ listen và chờ đến khi máy chủ kết nối. Phần lớn trong 10 phút đó, bàn giao tiếp hình ảnh (graphics console) sẽ được "gửi" đến chúng ta.

Phương pháp mô tả ở trên có nhiều giới hạn và bất lợi. Tuy nhiên, đây cũng là một cách hay để quản lý một host mà ta không thể thiết lập kết nối trực tiếp.

Tóm tắt

Có nhiều chương trình quản lý từ xa MS Windows. Không may, một số lượng lớn trong đó không bảo vệ an toàn việc truyền dữ liệu hoặc việc thực hiện chúng thì tốn rất nhiều. Phương pháp phác thảo ở trên là một giải pháp không mất tiền cho việc quản lý MS Windows từ xa một cách an toàn hơn. Nhờ có giao thức SSL và sự thẩm quyền dựa trên việc chứng nhận, giải pháp này không những đủ sức có cơ hội cạnh tranh với những giải pháp thương mại, mà còn trong cả việc bảo mật hoàn hảo hơn.