Trang chủHướng dẫnCách sử dụng SOCKS proxy để lướt web an toàn mà không cần VPN
Networking

Cách sử dụng SOCKS proxy để lướt web an toàn mà không cần VPN

CyStack blog 12 phút để đọc
CyStack blog25/08/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 12 minutes

Ở một thời điểm nào đó, bạn có thể sẽ phải sử dụng một mạng không an toàn hoặc có tường lửa quá khắt khe, và bạn muốn đảm bảo rằng không ai có thể theo dõi lưu lượng truy cập của mình. Một giải pháp là thiết lập VPN trên Ubuntu 22.04 / 20.04 / 18.04, nhưng nhiều dịch vụ VPN yêu cầu phần mềm khách chuyên dụng trên máy của bạn, điều mà bạn có thể không có quyền cài đặt.

sử dụng SOCKS proxy để lướt web

Tuy nhiên, nếu tất cả những gì bạn cần bảo mật chỉ là trình duyệt web, thì có một lựa chọn nhanh chóng, miễn phí và hữu ích: SOCKS 5 proxy. SOCKS proxy là một đường hầm SSH được mã hóa, trong đó các ứng dụng đã được cấu hình sẽ gửi lưu lượng của chúng qua đó. Ở phía máy chủ, proxy sẽ tiếp tục chuyển lưu lượng đó ra Internet công cộng.

Không giống VPN, SOCKS proxy cần được cấu hình riêng cho từng ứng dụng trên máy khách. Nhưng bạn có thể cấu hình nhiều ứng dụng mà không cần cài đặt phần mềm chuyên dụng, miễn là ứng dụng đó hỗ trợ sử dụng SOCKS proxy. Ở phía máy chủ, tất cả những gì bạn cần cấu hình là SSH.

Trong hướng dẫn này, bạn sẽ sử dụng một máy chủ chạy Ubuntu 22.04 (mặc dù bất kỳ bản phân phối Linux nào có thể truy cập qua SSH đều được) và trình duyệt Firefox làm ứng dụng phía máy khách. Kết thúc hướng dẫn, bạn sẽ có thể duyệt web một cách an toàn thông qua đường hầm SSH được mã hóa.

Điều kiện tiên quyết

Nếu bạn đang sử dụng Ubuntu phiên bản 16.04 hoặc thấp hơn, chúng tôi khuyến nghị bạn nên nâng cấp lên phiên bản mới hơn vì Ubuntu hiện không còn hỗ trợ các phiên bản này nữa.

  • Một máy chủ Linux đang chạy Ubuntu (các bản phân phối khác cũng có thể sử dụng) với người dùng có quyền sudo và quyền truy cập SSH.
  • Một ứng dụng để cấu hình với proxy SOCKS, ví dụ như trình duyệt web Firefox.
  • Đối với người dùng Windows, bạn cũng sẽ cần một trong hai công cụ: PuTTY hoặc Windows Subsystem for Linux (WSL).

PuTTY được dùng để thiết lập tunnel proxy cho người dùng Windows. Người dùng macOS hoặc Linux đã có sẵn các công cụ cần thiết để thiết lập tunnel này.

Cách sử dụng SOCKS proxy để lướt web an toàn mà không cần VPN

  1. Thiết lập Tunnel – MacOS/Linux hoặc Windows
  2. Cấu hình Firefox để sử dụng Tunnel
  3. Hoàn tác Proxy trong Firefox
  4. Tạo phím tắt để sử dụng lặp lại (MacOS/Linux)

Bước 1 (macOS/Linux) – Thiết lập Tunnel

Trên máy tính cục bộ của bạn, hãy tạo một SSH key nếu bạn chưa tạo Droplet kèm theo SSH key. Sau khi key được tạo, đảm bảo rằng phần public đã được thêm vào file ‘authorized_keys’ trên Droplet SSH của bạn. Sau đó, mở ứng dụng terminal để tạo một SSH tunnel với SOCKS proxy được bật.

Thiết lập tunnel bằng lệnh sau:

$ ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

Giải thích các đối số

  • i: Đường dẫn đến SSH key sẽ được sử dụng để kết nối với máy chủ
  • D: Thông báo cho SSH rằng chúng ta muốn một SOCKS tunnel trên số cổng được chỉ định (bạn có thể chọn một số từ 1025 đến 65536)
  • f: Tách tiến trình ra chạy nền
  • C: Nén dữ liệu trước khi gửi
  • q: Sử dụng chế độ im lặng
  • N: Thông báo cho SSH rằng sẽ không gửi bất kỳ lệnh nào sau khi tunnel được thiết lập

Hãy chắc chắn thay thế sammy@your_domain bằng tên người dùng có quyền sudo và địa chỉ IP hoặc tên miền của máy chủ bạn.

Sau khi bạn nhập lệnh, bạn sẽ ngay lập tức quay lại dấu nhắc lệnh mà không có dấu hiệu rõ ràng về việc thành công hay thất bại; điều này là bình thường.

Xác minh rằng tunnel đang chạy bằng lệnh sau:

$ ps aux | grep ssh

Bạn sẽ thấy một dòng trong đầu ra như sau:

Output
sammy    14345   0.0  0.0  2462228    452   ??  Ss    6:43AM   0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

Bạn có thể thoát khỏi ứng dụng terminal và tunnel vẫn sẽ tiếp tục hoạt động. Đó là bởi vì chúng ta đã sử dụng đối số -f, giúp đưa phiên SSH vào chế độ chạy nền:

Lưu ý: để chấm dứt tunnel, bạn sẽ cần lấy PID bằng lệnh ps. Trong ví dụ của chúng ta, PID là 14345. Khi đó, bạn sẽ sử dụng lệnh kill 14345. Chúng ta sẽ đi qua cách kết thúc tunnel ở Bước 3.

Windows – Thiết lập Tunnel

Mở PuTTY.

Nếu bạn chưa cài đặt, hãy tải PuTTY và lưu ở vị trí bạn muốn. PuTTY không yêu cầu quyền quản trị để cài đặt; chỉ cần tải file .exe và chạy nó.

Thực hiện các bước sau để thiết lập tunnel:

  1. Từ phần Session, nhập Host Name (hoặc địa chỉ IP) của máy chủ và SSH Port (thường là 22)

sử dụng SOCKS proxy

Ở bên trái, điều hướng đến: Connection > SSH > Tunnels

Nhập một số cổng Source port bất kỳ trong khoảng từ 1025 đến 65536, ví dụ: 1337

sử dụng SOCKS proxy

  1. Chọn nút radio Dynamic
  2. Nhấn nút Add
  3. Quay lại mục Session ở bên trái
  4. Nhập tên vào ô Saved Sessions và nhấn nút Save
  5. Bây giờ nhấn nút Open để tạo kết nối
  6. Nhập tên người dùng có quyền sudo và mật khẩu máy chủ để đăng nhập

Bạn có thể thu nhỏ cửa sổ PuTTY, nhưng không được đóng nó. Kết nối SSH của bạn sẽ vẫn mở:

Lưu ý: Bạn có thể lưu tên người dùng sudo (ví dụ: sammy) và SSH key cho cùng một session bằng cách làm theo hướng dẫn cấu hình SSH Key trong PuTTY. Như vậy bạn sẽ không cần nhập lại tên người dùng và mật khẩu mỗi lần mở kết nối.

Bước 2 – Cấu hình Firefox để sử dụng Tunnel

Bây giờ bạn đã có một SSH tunnel, tiếp theo là cấu hình Firefox để sử dụng tunnel đó. Hãy nhớ rằng để SOCKS 5 tunnel hoạt động, bạn cần sử dụng một ứng dụng cục bộ có thể triển khai tunnel; Firefox có khả năng này:

Bước này giống nhau cho Windows, macOS và Linux.

Hãy đảm bảo bạn nhớ số cổng đã sử dụng trong lệnh SSH; trong ví dụ của chúng tôi, số cổng là 1337.

(Các bước sau được thực hiện với Firefox phiên bản 80, nhưng cũng nên hoạt động với các phiên bản khác, mặc dù vị trí của các tùy chọn có thể khác nhau.)

Mở Firefox.

  1. Ở góc trên bên phải, nhấp vào biểu tượng ba gạch (hamburger icon) để mở menu của Firefox.
  2. Chọn mục Preferences hoặc Options.
  3. Cuộn xuống cuối trang và dưới mục Network Settings, nhấn nút Settings…
  4. Trong phần ‘Configure Proxy Access to the Internet’, chọn Manual proxy configuration.
  5. Ở ô SOCKS Host, nhập localhost hoặc 127.0.0.1, và ở ô Port, nhập số cổng tùy chỉnh bạn đã dùng khi thiết lập tunnel, ví dụ: 1337.
  6. Ở gần cuối cửa sổ, đánh dấu chọn ô ‘Proxy DNS when using SOCKS v5’
  7. Nhấn nút OK để lưu và đóng phần cấu hình.

Bây giờ, hãy mở một tab mới trong Firefox và bắt đầu duyệt web. Bạn đã sẵn sàng để duyệt web an toàn thông qua SSH tunnel. Dữ liệu bạn nhận được từ website sẽ được mã hóa. Ngoài ra, vì bạn đã chọn tùy chọn Proxy DNS, các truy vấn DNS của bạn cũng sẽ được mã hóa, nên nhà cung cấp dịch vụ Internet (ISP) của bạn không thể thấy nội dung bạn truy cập hoặc bạn truy cập từ đâu.

Để xác minh rằng bạn đang sử dụng proxy, quay lại phần Network Settings trong Firefox và nhập một số cổng khác, sau đó lưu lại cài đặt. Giờ nếu bạn thử duyệt web, bạn sẽ thấy thông báo lỗi: ‘The proxy server is refusing connections’. Điều này chứng minh rằng Firefox đang sử dụng proxy chứ không phải kết nối mặc định. Ngoài ra, bạn có thể truy cập một trang hiển thị IP công khai, như ipecho.net, và địa chỉ IP được hiển thị sẽ là IP của SSH Droplet của bạn, vì nó đang hoạt động như một proxy.

Bước 3 – Hoàn tác Proxy trong Firefox

Khi bạn không còn cần sự riêng tư từ SSH tunnel nữa, hãy quay lại phần cài đặt proxy mạng trong Firefox. Nhấp vào nút radio ‘Use system proxy settings’ và nhấn OK. Giờ Firefox không còn sử dụng SOCKS tunnel nữa, bạn có thể tắt tunnel. Bạn cũng có thể để tunnel tiếp tục chạy để bật/tắt proxy trong Firefox bất cứ lúc nào, nhưng nếu để tunnel không hoạt động quá lâu, nó có thể tự động đóng.

Đóng Tunnel (macOS/Linux)

Tunnel mà chúng ta đã tạo trước đó trên máy cục bộ đang chạy nền, vì vậy việc đóng cửa sổ terminal đã dùng để khởi chạy tunnel sẽ không kết thúc nó. Để kết thúc tunnel, chúng ta cần xác định Process ID (PID) bằng lệnh ps, rồi kết thúc tiến trình bằng lệnh kill.

Hãy tìm tất cả các tiến trình ssh đang hoạt động trên máy:

$ ps aux |grep ssh

Tìm dòng giống với lệnh bạn đã nhập trước đó để tạo tunnel. Dưới đây là ví dụ về đầu ra mẫu:

Output
sammy    14345   0.0  0.0  2462228    452   ??  Ss    6:43AM   0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

Từ đầu dòng, ở một trong hai cột đầu tiên, bạn sẽ thấy một số có 3 đến 5 chữ số. Đây chính là PID. Trong ví dụ trên, 14345 là PID được làm nổi bật.

Giờ bạn đã biết PID, bạn có thể sử dụng lệnh kill để tắt tunnel. Hãy thay thế bằng PID thực tế của bạn khi chạy lệnh:

$ kill 14345

Đóng Tunnel (Windows)

Đóng cửa sổ PuTTY mà bạn đã sử dụng để tạo tunnel. Vậy là xong.

Bước 4 (macOS/Linux) – Tạo phím tắt để sử dụng lặp lại

Đối với hệ thống macOS hoặc Linux, chúng ta có thể tạo một alias hoặc script để nhanh chóng thiết lập tunnel. Dưới đây là hai cách để tự động hóa quá trình tạo tunnel:

Lưu ý: Cả hai phương pháp đều yêu cầu xác thực SSH bằng key không có mật khẩu/passphrase.

Script BASH có thể nhấn để chạy

Nếu bạn muốn có một biểu tượng mà khi nhấn vào sẽ khởi động tunnel, bạn có thể tạo một script BASH nhỏ để thực hiện việc này. Script sẽ thiết lập tunnel và sau đó mở Firefox. Tuy nhiên, bạn vẫn cần cấu hình proxy trong Firefox thủ công lần đầu tiên. Trên macOS, tệp thực thi của Firefox mà chúng ta có thể chạy từ dòng lệnh nằm bên trong Firefox.app. Giả sử ứng dụng được đặt trong thư mục Applications, thì đường dẫn đến tệp thực thi sẽ là: /Applications/Firefox.app/Contents/MacOS/firefox

Trên hệ thống Linux, nếu bạn cài đặt Firefox thông qua kho phần mềm (repo) hoặc nếu nó được cài sẵn, thì vị trí của nó thường sẽ là: /usr/bin/firefox Bạn có thể dùng lệnh which firefox để kiểm tra vị trí cụ thể của Firefox trên hệ thống.

Trong script, hãy thay đường dẫn đến Firefox bằng đường dẫn phù hợp với hệ thống của bạn. Đồng thời, bạn cũng cần điều chỉnh dòng lệnh SSH sao cho đúng với lệnh bạn đã sử dụng trước đó để thiết lập tunnel thành công.

Sử dụng trình soạn thảo văn bản như nano để tạo một tệp mới:

$ nano ~/socks.sh

Thêm các dòng sau vào:

socks.sh
#!/bin/bash -e
ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@`your_domain`
/Applications/Firefox.app/Contents/MacOS/firefox &

  • Thay 1337 bằng số cổng bạn muốn sử dụng (nó phải trùng với số bạn đã cấu hình trong Firefox)
  • Thay sammy@your_domain bằng tên người dùng SSH và hostname hoặc địa chỉ IP của bạn
  • Thay /Applications/Firefox.app/Contents/MacOS/firefox bằng đường dẫn đến tệp thực thi của Firefox trên hệ thống của bạn

Lưu script lại. Nếu bạn đang dùng nano, nhấn CONTROL + o để lưu, sau đó nhấn CONTROL + x để thoát.

Để script có thể chạy khi bạn nhấp đúp vào nó, bạn cần cấp quyền thực thi. Từ dòng lệnh, sử dụng lệnh chmod để thêm quyền thực thi:

$ chmod +x /path/to/socks.sh

Trên macOS, bạn có thể cần thực hiện thêm một bước để thông báo cho hệ thống rằng tệp .sh nên được thực thi như một chương trình, chứ không phải mở bằng trình soạn thảo văn bản. Để thực hiện việc này, hãy nhấp chuột phải vào tệp socks.sh và chọn “Lấy thông tin”. Tìm phần ‘Open with:’ và nếu tam giác điều hướng chưa hướng xuống, hãy nhấp vào nó để mở rộng menu thả xuống. Có thể Xcode đang được đặt làm ứng dụng mặc định.

sử dụng SOCKS proxy

Thay đổi ứng dụng mặc định thành Terminal.app. Nếu Terminal.app không có trong danh sách, chọn ‘Other’, sau đó điều hướng đến: Applications > Utilities > Terminal.app (Bạn có thể cần thay đổi menu kéo xuống ‘Enable’ từ ‘Recommended Applications’ thành ‘All Applications’).

Để khởi chạy SOCKS proxy của bạn, chỉ cần nhấp đúp vào tệp socks.sh. Script sẽ mở một cửa sổ Terminal, thiết lập kết nối SSH, và khởi động Firefox. Lúc này bạn có thể đóng cửa sổ Terminal. Miễn là bạn vẫn giữ nguyên cài đặt proxy trong Firefox, bạn có thể bắt đầu duyệt web qua kết nối bảo mật:

Script này giúp bạn nhanh chóng thiết lập proxy, nhưng bạn vẫn cần thực hiện thủ công các bước như đã đề cập ở trên để tìm process SSH và dùng kill để kết thúc khi không còn cần nữa.

Alias dòng lệnh

Nếu bạn thường xuyên sử dụng dòng lệnh và muốn nhanh chóng bật tunnel, bạn có thể tạo một alias để thực hiện việc đó.

Phần khó nhất là xác định vị trí phù hợp để lưu alias.

Các bản phân phối Linux và phiên bản macOS khác nhau có thể lưu alias ở các vị trí khác nhau. Cách tốt nhất là kiểm tra một trong các file sau và tìm từ khóa alias để xem alias hiện có đang được lưu ở đâu:

  • ~/.bashrc
  • ~/.zshrc
  • ~/.bash_aliases
  • ~/.bash_profile
  • ~/.profile

Khi bạn đã xác định được file phù hợp, hãy thêm alias sau vào cuối file hoặc vào phần alias đang có sẵn. Trong ví dụ dưới đây, chúng ta dùng alias có tên firesox để bật SOCKS tunnel, nhưng bạn có thể dùng bất kỳ tên nào bạn muốn:

.bashrc
alias firesox='ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain && /Applications/Firefox.app/Contents/MacOS/firefox &'
  • Thay 1337 bằng số cổng bạn muốn sử dụng (nó phải khớp với cổng bạn đã cấu hình trong Firefox)
  • Thay sammy@your_domain bằng tên người dùng SSH và hostname hoặc địa chỉ IP của bạn
  • Thay thế /Applications/Firefox.app/Contents/MacOS/firefox bằng đường dẫn đến tệp thực thi (binary) của Firefox trên hệ thống của bạn.

Các alias chỉ được tải khi bạn bắt đầu một shell mới, vì vậy hãy đóng phiên terminal hiện tại và mở một phiên mới. Bây giờ, khi bạn gõ:

$firesox

Alias này sẽ thiết lập tunnel của bạn, sau đó khởi chạy Firefox và trả bạn về dấu nhắc dòng lệnh. Hãy đảm bảo rằng Firefox vẫn được cấu hình để sử dụng proxy. Bây giờ bạn có thể duyệt web một cách an toàn.

Bước 5 (Tuỳ chọn) – Khắc phục sự cố: Vượt qua tường lửa

Nếu kết nối của bạn đang hoạt động tốt, bạn có thể dừng tại đây. Tuy nhiên, nếu bạn phát hiện rằng không thể tạo kết nối SSH do tường lửa quá chặt chẽ, rất có thể cổng 22 (mặc định của SSH) đang bị chặn. Nếu bạn có quyền kiểm soát cài đặt SSH trên máy chủ proxy (với quyền root trên một DigitalOcean Droplet, bạn hoàn toàn có thể làm điều này), bạn có thể cấu hình SSH để lắng nghe trên một cổng khác không phải là 22.

Bạn có thể sử dụng cổng nào không bị chặn?

Các cổng thường được mở bao gồm:

Các cổng thường mở bao gồm 80 (lưu lượng truy cập web chung) và 443 (TLS, lưu lượng truy cập web an toàn).

Nếu máy chủ SSH của bạn không phục vụ nội dung web, bạn có thể yêu cầu SSH sử dụng một trong các cổng này thay cho cổng mặc định 22. Cổng 443 là lựa chọn tốt nhất, vì cổng này vốn được sử dụng cho lưu lượng được mã hóa, nên lưu lượng SSH của bạn sẽ trông hợp lệ và không bị phát hiện là bất thường.

Từ một vị trí không bị tường lửa chặn, hãy SSH vào Droplet của bạn trên DigitalOcean mà bạn đang sử dụng làm proxy, hoặc sử dụng console tích hợp sẵn trong bảng điều khiển của DigitalOcean.

Chỉnh sửa cài đặt SSH của máy chủ:

$ sudo nano /etc/ssh/sshd_config

Tìm dòng Port 22. Bạn có thể thay thế hoàn toàn ‘22’ hoặc thêm một cổng thứ hai để SSH lắng nghe. Chúng tôi sẽ chọn để SSH lắng nghe trên nhiều cổng, vì vậy chúng tôi sẽ thêm một dòng mới bên dưới Port 22 có nội dung là Port 443. Sau đây là một ví dụ:

sshd_config
. . .
Port 22
Port 443
. . .

Khởi động lại dịch vụ SSH để tải lại cấu hình bạn vừa chỉnh sửa. Tùy theo bản phân phối Linux mà tên tiến trình dịch vụ SSH có thể khác nhau, nhưng thường sẽ là ssh hoặc sshd. Nếu một trong hai không hoạt động, hãy thử cái còn lại.

$ sudo service ssh restart

Để kiểm tra xem cổng SSH mới có hoạt động hay không, hãy mở một cửa sổ terminal mới (đừng đóng phiên hiện tại, phòng trường hợp bạn vô tình bị khóa quyền truy cập), và thực hiện kết nối SSH qua cổng mới bằng lệnh:

$ ssh sammy@your_domain -p 443

Nếu bạn kết nối thành công, giờ bạn có thể đăng xuất khỏi cả hai cửa sổ terminal và mở lại SSH tunnel bằng cách sử dụng cổng mới.

$ ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain -p 443

Các thiết lập trong Firefox vẫn giữ nguyên, vì chúng không phụ thuộc vào cổng SSH, mà chỉ phụ thuộc vào cổng của tunnel (ví dụ: 1337 ở trên).

Kết luận

Trong thời đại ngày nay, có rất nhiều cách để duyệt web một cách an toàn khi bạn đang sử dụng một mạng có thể không đáng tin cậy như mạng Wi-Fi công cộng ở quán cà phê.

Trong hầu hết các tình huống, nếu bạn có thể sử dụng VPN để mã hóa và bảo vệ toàn bộ lưu lượng truy cập thì đó là lựa chọn được ưu tiên. Tuy nhiên, nếu bạn không thể sử dụng hoặc không tin tưởng VPN, SOCKS là một lựa chọn thay thế đáng tin cậy, mang lại mức độ bảo mật cần thiết khi duyệt web. Giải pháp này không chỉ dễ thiết lập và sử dụng mà còn cho phép bạn kiểm soát hoàn toàn quá trình kết nối.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất