Thứ sáu, 20/09/2013 | 00:00 GMT+7

Cách thiết lập SSH Tunneling trên VPS


Giới thiệu

Trong bài viết này, bạn sẽ học cách tạo một tunnel an toàn, được mã hóa giữa máy tính và VPS của bạn cùng với cách vượt qua giới hạn trong mạng công ty, cách vượt qua NAT, v.v.

Bài viết này sẽ đề cập đến một số lý thuyết cơ bản, bạn có thể bỏ qua nếu thích bằng cách đi thẳng vào các ví dụ ở phía dưới.

Giao tiếp trên Internet, Giao thức mạng và Cổng giao tiếp

Mọi phần mềm được cài đặt trong máy tính của bạn, muốn gửi hoặc nhận dữ liệu qua Internet, phải sử dụng một giao thức của lớp ứng dụng từ ngăn xếp TCP / IP. Các giao thức đó xác định cách giao tiếp và định dạng của thông báo được gửi giữa các server qua Internet, v.v. Ví dụ:

  • HTTP - được sử dụng để download các trang web và file từ trình duyệt web
  • FTP - được sử dụng để gửi file giữa client và server
  • DNS - được sử dụng để thay đổi tên server thành địa chỉ IP và ngược lại
  • POP3 và (hoặc) IMAP - được sử dụng để download / duyệt e-mail của bạn
  • SMTP - dùng để gửi e-mail
  • telnet - được sử dụng để kết nối từ xa với server
  • SSH - tương tự như telnet, nhưng ở version bảo mật , được mã hóa, vì vậy không ai có thể thấy những gì ta gửi đến một server và những gì server gửi cho ta .

Tiếp theo, các thông điệp của giao thức đã cho phải được đóng gói vào một phân đoạn TCP hoặc sơ đồ dữ liệu UDP (trong lớp truyền tải). Các giao thức đó được sử dụng để vận chuyển dữ liệu qua Internet - chúng đang hoạt động trong lớp truyền tải. Giao thức TCP là hướng kết nối, nghĩa là trước khi gửi dữ liệu, cần phải tạo kết nối giữa các máy từ xa. TCP luôn cung cấp dữ liệu theo đúng thứ tự. Nếu bất kỳ phân đoạn nào sẽ bị mất trong mạng, nó sẽ được gửi lại nếu không nhận được xác nhận kịp thời. TCP được coi là khá tin cậy .

Giao thức UDP không hướng kết nối. Nó không cung cấp truyền lại cho các biểu đồ dữ liệu bị mất. Nếu các gói không được nhận theo đúng thứ tự, UDP vẫn sẽ cung cấp chúng cho một ứng dụng theo thứ tự mà chúng đã được nhận. Do đó, UDP chủ yếu được sử dụng để truyền dữ liệu đa phương tiện theo thời gian thực - đàm thoại VoIP, hội nghị truyền hình, âm thanh và video. Đôi khi UDP được sử dụng bởi các giao thức khác trong lớp ứng dụng - ví dụ như trong trường hợp DNS.

Trong trường hợp này, một giao thức của lớp cao hơn phải gửi lại một truy vấn sau khi không nhận được câu trả lời trong một khoảng thời gian nhất định. UDP được sử dụng chủ yếu ở đây vì nó có chi phí thấp: gửi 1 truy vấn nhỏ trong 1 sơ đồ và nhận câu trả lời mất ít thời gian hơn và cần truyền ít dữ liệu hơn so với tạo kết nối TCP (trao đổi 3 đoạn giữa các server ): gửi truy vấn từ một client , gửi xác nhận từ server , gửi câu trả lời từ server , sau đó gửi xác nhận từ client và ngắt kết nối (4 đoạn).

Để xác định các kết nối khác nhau đến và từ cùng một địa chỉ IP, ta sử dụng số cổng. Mỗi server của một giao thức lớp ứng dụng nhất định liên kết với một số cổng nhất định và chờ kết nối đến.Máy khách kết nối với cổng này (trong trường hợp kết nối TCP) hoặc gửi một sơ đồ đến cổng đó (trong trường hợp UDP). Đối với các giao thức nổi tiếng, được sử dụng nhiều nhất, có số cổng dành riêng. Ví dụ: server HTTP thường lắng nghe trên cổng 80 TCP (cách khác, client sẽ phải kết nối với nó bằng cách chỉ định chính số cổng trong một địa chỉ - http://example.org:1234/), server DNS thường lắng nghe trên cổng 53 UDP (đôi khi cả cổng 53 TCP). Máy khách cũng cần sử dụng một cổng bên cạnh nó. Chúng là "cổng cao" như 52044 và được tạo ngẫu nhiên.

Tại đây , bạn có thể xem thêm các cổng dành riêng mà ta sử dụng hàng ngày.

Các phân đoạn và biểu đồ dữ liệu sau đó được đóng gói thành các gói IP, trong lớp mạng. Trong các gói, nguồn và máy tính đích được xác định bằng địa chỉ IP. Chúng là global - chỉ 1 server lưu trữ có thể sử dụng cùng một địa chỉ tại một thời điểm (ngoại trừ phép thuật như NAT được sử dụng trong bộ định tuyến gia đình có địa chỉ IP riêng: 192.168.xx, 10.xxx, 172.16-31.xx; x là một số giữa 1 và 255). Dựa trên các địa chỉ đó, các bộ định tuyến có thể quyết định cách gửi gói tin đến máy tính mục tiêu.

Sau đó, các gói tin được đóng gói thành các khung / ô trong lớp liên kết dữ liệu và sau đó được truyền trong cáp hoặc dưới dạng sóng vô tuyến trên mạng local . Trong lớp liên kết dữ liệu, trong khung, các máy tính được xác định bằng địa chỉ MAC của chúng. Khung có địa chỉ MAC hoàn toàn bị xóa khỏi bộ định tuyến extract gói tin từ chúng. Họ quyết định mạng nào sẽ gửi các gói tin, đóng gói chúng vào các khung mới và gửi chúng theo cách của họ. Nếu một mạng giữa cả hai bộ định tuyến sử dụng địa chỉ MAC, địa chỉ của các bộ định tuyến đó sẽ được đưa vào khung - khung nguồn và khung đích. Không thể giao tiếp giữa hai máy tính trong các mạng khác nhau chỉ sử dụng địa chỉ MAC, ngay cả khi chúng không bị trùng lặp - nhà production chỉ liên kết một địa chỉ với một thẻ, vì vậy bất kỳ xe hàng nào được production đều có thể có cùng địa chỉ MAC với thẻ do nhà production khác production .

Mô hình TCP / IP (DoD)Đóng gói

Giới thiệu về SSH. Lý thuyết, Phần 1

SSH là một giao thức trong lớp ứng dụng. Nó là sự kế thừa của telnet và được sử dụng để kết nối với VPS của bạn từ xa ở chế độ văn bản. Không giống như telnet, SSH được mã hóa. Nó sử dụng cổng 22 TCP, nhưng bạn có thể dễ dàng thay đổi cổng trong cấu hình server của bạn . SSH cho phép user tự xác thực theo nhiều cách khác nhau.

Ví dụ:

  • sử dụng tên user và password
  • sử dụng một cặp khóa - thứ nhất, private key (tối mật) và thứ hai - public key (trên server ): chương trình mà bạn sử dụng để kết nối với SSH phải giải toán bằng private key và gửi lời giải đến server . Vấn đề mỗi lần khác nhau, vì vậy rất khó để phá khóa bằng phương pháp xác thực đó.

Ngày nay ta sử dụng version 2 của SSH.

Việc triển khai server SSH phổ biến nhất là OpenSSH. Các ứng dụng client phổ biến nhất là PuTTY (dành cho Windows) và OpenSSH (dành cho Linux). Cả PuTTY và OpenSHH đều cho phép user tạo tunnel .

SSH cho phép user tạo một tunnel TCP giữa server và client và gửi dữ liệu qua tunnel đó. SSH chỉ hỗ trợ tunnel TCP, nhưng bạn có thể làm việc xung quanh đó, tức là thông qua proxy SOCKS. Một tunnel như vậy được cài đặt giữa một cổng TCP đã chọn trên server và một cổng local đã chọn. Tất nhiên, nó không được mã hóa nên ai cũng có thể kiểm tra xem ta sử dụng nó để làm gì.

Các khái niệm sẽ được sử dụng

Giao diện Loopback - một card mạng ảo được cài đặt trong hệ thống với địa chỉ IP 127.0.0.1 . Chỉ những ứng dụng được cài đặt trên hệ thống mới có quyền truy cập vào địa chỉ đó. Không thể truy cập từ xa. Bạn có thể khởi động VPS trên giao diện đó và chỉ có quyền truy cập từ xa từ cùng hệ thống hoặc qua tunnel .

SMTP - một giao thức lớp ứng dụng cho phép bạn gửi e-mail. Nó được sử dụng cho cả giao tiếp giữa các server thư và giao tiếp giữa server và ứng dụng thư khách. SMTP sử dụng cổng 25 TCP cho giao tiếp không được mã hóa và cổng 587 TCP hoặc 465 TCP (không dùng nữa - không được khuyến khích ) cho kết nối được mã hóa (SSL).

POP3 - giao thức trong lớp ứng dụng được sử dụng để tải các e-mail mới từ server đến ứng dụng thư local . Nó hiếm khi được sử dụng ngày nay vì nó đã được thay thế bởi IMAP. Đối với các kết nối không được mã hóa, nó sử dụng cổng 110 TCP, đối với các kết nối được mã hóa - cổng 995 TCP.

IMAP - một giao thức tương tự như POP3, nhưng hỗ trợ các folder , nhãn, đọc và quản lý thư và folder trên server mà không cần tải mọi thứ về PC local và xóa nó khỏi server . IMAP sử dụng cổng 143 TCP cho các kết nối không được mã hóa và cổng 993 TCP cho các kết nối được mã hóa.

Ví dụ 1: Đường hầm tới server IMAP

Một tunnel giữa cổng local 143 trên giao diện loopback - 127.0.0.1 - và server IMAP để nhận thư (kết nối không được mã hóa) trên cùng một máy từ xa.

Unix và OpenSSH:

ssh abc@def -L 110:127.0.0.1:110     abc - username on server  def - server address  110: - local port that will be opened on loopback interface (127.0.0.1) on local machine  127.0.0.1 - IP address of computer that we creating a tunnel to via our SSH tunnel  :110 - port number of target machine we'll get to via tunnel

Windows và PuTTY:

Tại đây, bạn có thể đọc cách tạo kết nối với VPS của bạn bằng PuTTY. Kết nối đó là bắt buộc để tạo tunnel .

  • Chọn kết nối của bạn, tải dữ liệu và đi tới Kết nối-> SSH-> Đường hầm và đặt nó như sau:

    Yay!
  • Nhấp vào Thêm. Sau đó, mọi giao thức sẽ trông như thế này:

    Yay!
  • Đến đây bạn có thể lưu phiên và kết nối bằng cách sử dụng nó.

Đến đây bạn có thể chỉ cần cấu hình ứng dụng thư của bạn để kết nối với VPS không trực tiếp mà sử dụng cổng 110 của giao diện loopback - 127.0.0.1. Bạn có thể làm điều tương tự với các giao thức khác nhau - SMTP (25), IMAP (143), v.v.

Ví dụ 2. Đường hầm đến Server Web

Một tunnel giữa cổng local 8080 trên giao diện local (127.0.0.1) và server WWW, được liên kết với cổng 80 của máy từ xa. Lần này ta sẽ kết nối với nó bằng giao diện loopback.

Như tôi đã nói trước đó, giao thức HTTP được sử dụng để tải các trang web WWW xuống trình duyệt.

Unix và OpenSSH:

ssh abc@def -L 8080:11.22.33.44:80         abc - username on server      def - server address      8080: - port on the local machine that will be opened on loopback interface (127.0.0.1)      11.22.33.44 - IP address of the server that we'll create a tunnel to using SSH

Windows và PuTTY:

  • Chọn kết nối và tải cài đặt.
  • Đi tới Kết nối-> SSH-> Đường hầm
  • Đặt nó như thế này:

    nó trông như thế này
  • Nhấp vào Thêm:

    nó trông như thế
  • Đến đây bạn có thể lưu phiên và kết nối.

Về mặt lý thuyết, sau khi truy cập 127.0.0.1:8080 trong trình duyệt của bạn, bạn sẽ thấy một trang web nằm trên server từ xa mà ta đã kết nối.

Nói một cách thực tế, HTTP 1.1 đã giới thiệu tham số Host cho các truy vấn. Tham số này được sử dụng để gửi domain DNS của VPS mà ta đang kết nối. Nếu nó sử dụng cơ chế Server ảo, trang bạn sẽ nhận được sẽ là trang lỗi hoặc trang chính của server , nhưng không qua tunnel .

Trong trường hợp này, ta phải làm một việc nữa: trong file server lưu trữ trên PC local , hãy thêm địa chỉ VPS và giao diện lặp lại của bạn:

127.0.0.1 website

trang web là địa chỉ đến trang web bạn muốn kết nối ( không có http: // ở đầu và / ở cuối).

Tệp Hosts được đặt tại / etc / hosts (Linux) hoặc C: \ Windows \ system32 \ drivers \ etc \ hosts (Windows). Để chỉnh sửa file này, bạn phải là administrator hoặc có quyền quản trị.

Quan trọng! Nếu bạn muốn tạo một tunnel trên một cổng local được đánh số dưới 1024 trên hệ thống Unix, bạn phải có quyền root.

Ví dụ 3. SOCKS proxy

Một proxy SOCKS cho phép bạn gửi lưu lượng truy cập từ bất kỳ giao thức nào thông qua một tunnel . Nhìn từ bên ngoài, nó giống như một kết nối TCP duy nhất.

Trong ví dụ này, ta sẽ tạo một tunnel giữa server SSH và client trên cổng 5555 trên giao diện loopback. Tiếp theo, ta sẽ đặt trình duyệt của bạn sử dụng server SOCKS của ta làm server proxy cho mọi kết nối gửi đi.

Giải pháp này có thể hữu ích để bỏ qua các hạn chế trên mạng công ty. Nếu cổng mà SSH của ta sử dụng bị khóa, ta có thể yêu cầu server lắng nghe trên cổng 443 bằng tùy chọn Nghe trong file cấu hình OpenSSH (/ etc / ssh / sshd_config hoặc / etc / openssh / sshd_config).

Unix và OpenSSH:

ssh abc@def -D 5555         abc - username      def - server address      5555 - local port number, where the tunnel will be created

Windows và PuTTY:

  • Chọn kết nối và tải cài đặt.
  • Đi tới Kết nối-> SSH-> Đường hầm
  • Đặt nó như thế này:

    noname1
  • Nhấp vào Thêm:

    noname2
  • Lưu phiên và kết nối với nó.

Trong cài đặt trình duyệt của bạn, hãy cài đặt proxy SOCKS chạy trên 127.0.0.1:5555, từ bây giờ cho đến khi bạn đóng kết nối trong PuTTY hoặc OpenSSH.

Ví dụ 4. Bỏ qua NAT

NAT (cụ thể là PAT, là dạng NAT được sử dụng trong các bộ định tuyến gia đình) là một cơ chế cho phép nhiều người sử dụng một kết nối internet. Một bộ định tuyến sử dụng NAT có một địa chỉ công cộng và sửa đổi tất cả các địa chỉ riêng trong các gói nhận được từ mạng nội bộ thành địa chỉ công cộng của chính nó và gửi chúng đến Internet. Khi nhận lại các gói, nó làm ngược lại - nó nhớ địa chỉ IP và số cổng trong một bảng NAT đặc biệt.

Kết nối từ bên ngoài chỉ khả thi khi ta đặt chuyển tiếp cổng thích hợp trên bộ định tuyến. Tuy nhiên, ta có thể bỏ qua vấn đề đó và tạo một tunnel giữa máy tính của ta và server để kết nối trực tiếp máy tính và server của ta .

Phần 1.

Trong phần thứ hai, ta sẽ tạo một tunnel giữa cổng local 80 (trên máy tính của ta - server HTTP local ) và cổng 8080 trên server từ xa. Tuy nhiên, vì lý do bảo mật, cổng từ xa 8080 sẽ chỉ được mở trên giao diện loopback của VPS - 127.0.0.1 . Do đó, ta phải cấu hình lại server của bạn để mở kết nối trên mọi cổng. Ta sẽ làm điều đó ngay bây giờ.

  1. Trong trình soạn thảo yêu thích của bạn, hãy mở file / etc / ssh / sshd_config (hoặc / etc / openssh / sshd_config) dưới dạng folder root .
    nano /etc/ssh/sshd_config
  2. Tìm thấy:
    #GatewayPorts no
  3. Thay đổi dòng đó thành:
    GatewayPorts yes
  4. Lưu file và đóng editor .
  5. Khởi động lại server SSHD:
    Debian/Ubuntu:  service ssh restart    CentOS:  /etc/init.d/sshd restart

Phần 2.

Trong phần này, ta sẽ tạo tunnel .

Unix và OpenSSH:

ssh abc@def -R 8080:127.0.0.1:80         abc - username      def - server address      8080 - port number that will be opened on remote server - our proxy server      127.0.0.1 - IP address we open tunnel to      80 - port number we open tunnel to

Lần này, tunnel của ta là local , nhưng ta có thể tạo kết nối tunnel với các máy tính khác trong cùng mạng bằng cách sử dụng NAT.

Windows và PuTTY:

  • Chọn kết nối và tải cài đặt.
  • Đi tới Kết nối-> SSH-> Đường hầm
  • Đặt nó như vậy:

    Nó trông như thế
  • Nhấp vào Thêm:

    noname3
  • Lưu phiên và kết nối.

Sau khi đăng nhập, ta có thể truy cập server HTTP local từ bên ngoài mạng của ta thông qua server proxy OpenSSH có địa chỉ IP công cộng. Mở phần sau trong trình duyệt:

  http://IP-address-or-domain-of-our-server-change-that-for-your-name:8080/  

Lý thuyết tiếp tục

Như bạn thấy , có ba loại tunnel SSH:

  • Tùy chọn Local - -L - một tunnel được mở trên cổng local của ta và lắng nghe các kết nối được chuyển hướng đầu tiên đến kết nối đã lưu của ta tới server SSH và bên cạnh server đích.
  • Tùy chọn Remote - -R - một tunnel được mở trên server SSH. Sau khi server nhận được kết nối, tất cả các đường truyền sẽ được chuyển hướng ra ngoài tunnel local của ta .
  • Tùy chọn Dynamic - -D - một tunnel được mở trên giao diện loopback local . Quá trình truyền diễn ra thông qua giao thức SOCKS. Bạn có thể tạo tunnel cho bất kỳ gói nào qua đường này - TCP, UDP. Có thể kết nối với bất kỳ server nào trên Internet thông qua server SSH proxy. Để chuyển hướng tất cả lưu lượng hệ thống thông qua proxy SOCKS, bạn có thể sử dụng một chương trình như proxifier .

Tags:

Các tin liên quan