Table of Contents

No table of contents
Join CloudFly's Telegram channel to receive more offers and never miss any promotions from CloudFly

Cách thiết lập Dante Proxy cho các Private Connection trên Ubuntu 20.04

Posted on: 26 tháng 10 năm 2022

Ubuntu

Giới thiệu

Máy chủ proxy là một loại ứng dụng máy chủ có chức năng như một cổng kết nối giữa người dùng cuối và tài nguyên internet. Thông qua máy chủ proxy, người dùng cuối có thể kiểm soát và giám sát lưu lượng truy cập web của họ cho nhiều mục đích khác nhau, bao gồm quyền riêng tư, bảo mật và bộ nhớ đệm. Ví dụ: bạn có thể sử dụng máy chủ proxy để thực hiện các yêu cầu web từ một địa chỉ IP khác với địa chỉ IP của riêng bạn. Bạn cũng có thể sử dụng máy chủ proxy để nghiên cứu cách trang web được phục vụ khác nhau giữa các khu vực pháp lý này sang khu vực pháp lý khác, hoặc tránh một số phương pháp giám sát hoặc điều tiết lưu lượng truy cập web.

Dante là một SOCKS proxy mã nguồn mở, phổ biến, ổn định. Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Dante để cung cấp SOCKS proxy trên máy chủ Ubuntu 20.04.

Điều kiện

Để hoàn thành hướng dẫn này, bạn sẽ cần:

  • Máy chủ Ubuntu 20.04 với non-root user có đặc quyền sudo. Bạn có thể tìm hiểu thêm về cách thiết lập user có các đặc quyền này trong hướng dẫn Thiết lập máy chủ ban đầu với Ubuntu 20.04 của chúng tôi.

Bạn sẽ sử dụng tên miền your_domain trong hướng dẫn này, nhưng bạn nên thay thế tên miền này bằng tên miền hoặc địa chỉ IP của riêng bạn.

Bước 1: Cài đặt Dante

Dante là một máy chủ SOCKS proxy mã nguồn mở. SOCKS là một giao thức ít được sử dụng rộng rãi, nhưng nó hiệu quả hơn đối với một số ứng dụng ngang hàng và được ưu tiên HTTP đối với một số loại lưu lượng. Bắt đầu bằng cách chạy các lệnh sau với tư cách là non-root user để cập nhật danh sách gói của bạn và cài đặt Dante:

  1. sudo apt update
  2. sudo apt install dante-server

Dante cũng sẽ tự động thiết lập một dịch vụ nền và bắt đầu sau khi được cài đặt. Tuy nhiên, nó được thiết kế để thoát một cách dễ dàng với thông báo lỗi trong lần đầu tiên chạy, vì nó xuất xưởng với tất cả các tính năng của nó đã bị vô hiệu hóa. Bạn có thể xác minh điều này bằng cách sử dụng lệnh systemctl:

  1. systemctl status danted.service
Output
● danted.service - SOCKS (v4 and v5) proxy daemon (danted) Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2021-12-15 21:48:22 UTC; 1min 45s ago Docs: man:danted(8) man:danted.conf(5) Main PID: 14496 (code=exited, status=1/FAILURE) Dec 15 21:48:21 proxies systemd[1]: Starting SOCKS (v4 and v5) proxy daemon (danted)... Dec 15 21:48:22 proxies systemd[1]: Started SOCKS (v4 and v5) proxy daemon (danted). Dec 15 21:48:22 proxies danted[14496]: Dec 15 21:48:22 (1639604902.102601) danted[14496]: warning: checkconfig(): no socks authentication methods enabled. This means all socks requests will be blocked after negotiation. Perhaps this is not intended?

Để khởi động thành công các dịch vụ của Dante, bạn cần bật chúng trong tệp cấu hình.

Theo mặc định, tệp cấu hình của Dante được cung cấp trong /etc/danted.conf. Nếu bạn mở tệp này bằng nano hoặc trình soạn thảo văn bản yêu thích của mình, bạn sẽ thấy một danh sách dài các tùy chọn cấu hình, tất cả chúng đều bị vô hiệu hóa. Bạn có thể cố gắng điều hướng qua tệp này và bật một số tùy chọn theo từng dòng, nhưng trên thực tế, việc xóa tệp này và thay thế nó từ đầu sẽ hiệu quả hơn và dễ đọc hơn. Đừng lo lắng về việc này. Bạn luôn có thể xem lại cấu hình mặc định của Dante bằng cách điều hướng đến hướng dẫn trực tuyến của nó, và thậm chí bạn có thể tải lại gói theo cách thủ công từ danh sách gói của Ubuntu để lấy lại tệp cấu hình có sẵn nếu bạn muốn. Trong thời gian chờ đợi, hãy tiếp tục và xóa nó:

  1. sudo rm /etc/danted.conf

Bây giờ bạn có thể thay thế nó bằng một cái gì đó ngắn gọn hơn. Mở tệp bằng trình chỉnh sửa văn bản sẽ tự động tạo tệp nếu tệp đó không tồn tại, vì vậy bằng cách sử dụng nano hoặc trình chỉnh sửa văn bản yêu thích của bạn, bây giờ bạn sẽ nhận được tệp cấu hình trống:

  1. sudo nano /etc/danted.conf

Thêm các nội dung sau:

/etc/danted.conf
logoutput: syslog
user.privileged: root
user.unprivileged: nobody

# The listening network interface or address.
internal: 0.0.0.0 port=1080

# The proxying network interface or address.
external: eth0

# socks-rules determine what is proxied through the external interface.
socksmethod: username

# client-rules determine who can connect to the internal interface.
clientmethod: none

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

Bây giờ bạn có cấu hình máy chủ SOCKS có thể sử dụng, chạy trên cổng 1080, đây là quy ước chung cho SOCKS. Bạn cũng có thể chia nhỏ phần còn lại của tệp cấu hình này theo từng dòng:

  • logoutput đề cập đến cách Dante sẽ ghi nhật ký các kết nối, trong trường hợp này là sử dụng ghi nhật ký hệ thống thông thường
  • user.privileged cho phép dante có quyền root để kiểm tra quyền
  • user.unprivileged không cấp cho máy chủ bất kỳ quyền nào để chạy với tư cách unprivileged user (người dùng không có đặc quyền), vì điều này là không cần thiết khi không cấp các quyền chi tiết hơn
  • internal chi tiết kết nối này chỉ định cổng mà dịch vụ đang chạy và địa chỉ IP nào có thể kết nối
  • external chi tiết kết nối này chỉ định giao diện mạng được sử dụng cho các kết nối đi, eth0 theo mặc định trên hầu hết các máy chủ

Phần còn lại của chi tiết cấu hình liên quan đến các phương pháp xác thực, sẽ được thảo luận trong phần tiếp theo. Đừng quên mở cổng 1080 trong tường lửa của bạn nếu bạn đang sử dụng ufw:

  1. sudo ufw allow 1080

Tại thời điểm này, bạn có thể khởi động lại Dante và kết nối với nó, nhưng bạn sẽ có một máy chủ SOCKS mở cho toàn thế giới, điều mà bạn có thể không muốn, vì vậy trước tiên bạn sẽ học cách bảo mật nó.

Bước 2: Bảo mật Dante

Nếu bạn đã làm theo hướng dẫn này cho đến giờ, Dante sẽ sử dụng các tài khoản Linux user thông thường để xác thực. Điều này rất hữu ích, nhưng mật khẩu được sử dụng cho kết nối đó sẽ được gửi qua văn bản thuần túy, vì vậy điều quan trọng là phải tạo một SOCKS user chuyên dụng, không có bất kỳ đặc quyền đăng nhập nào khác. Để làm điều đó, bạn sẽ sử dụng useradd với các cờ sẽ không chỉ định login shell cho user, sau đó đặt mật khẩu:

  1. sudo useradd -r -s /bin/false your_dante_user
  2. sudo passwd your_dante_user

Bạn cũng sẽ tránh đăng nhập vào tài khoản này qua kết nối không dây không an toàn hoặc chia sẻ máy chủ quá rộng rãi. Nếu không, các tác nhân độc hại có thể và sẽ nỗ lực nhiều lần để đăng nhập.

Dante hỗ trợ các phương pháp xác thực khác, nhưng nhiều máy khách (tức là ứng dụng) sẽ kết nối với SOCKS proxy chỉ hỗ trợ xác thực username và password cơ bản, vì vậy bạn có thể muốn giữ nguyên phần đó. Những gì bạn có thể làm thay thế là hạn chế quyền truy cập chỉ vào các địa chỉ IP cụ thể. Đây không phải là lựa chọn phức tạp nhất, nhưng với sự kết hợp của các công nghệ đang được sử dụng ở đây, đó là một lựa chọn hợp lý. Bạn có thể đã học cách hạn chế quyền truy cập vào các địa chỉ IP cụ thể với ufw từ các hướng dẫn của chúng tôi, nhưng bạn cũng có thể làm điều đó trực tiếp trong Dante. Chỉnh sửa /etc/danted.conf của bạn:

  1. sudo nano /etc/danted.conf
/etc/danted.conf
client pass {
    from: your_ip_address/0 to: 0.0.0.0/0
}

Để hỗ trợ nhiều địa chỉ IP, bạn có thể sử dụng ký hiệu CIDR hoặc chỉ cần thêm một khối cấu hình client pass {} khác:

/etc/danted.conf
client pass {
    from: your_ip_address/0 to: 0.0.0.0/0
}

client pass {
    from: another_ip_address/0 to: 0.0.0.0/0
}

Sau đó, cuối cùng bạn có thể khởi động lại Dante với các thay đổi cấu hình của mình.

  1. sudo systemctl restart danted.service

Lần này, khi bạn kiểm tra trạng thái dịch vụ, bạn sẽ thấy nó chạy mà không có bất kỳ lỗi nào:

  1. systemctl status danted.service
Output
● danted.service - SOCKS (v4 and v5) proxy daemon (danted) Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enable> Active: active (running) since Thu 2021-12-16 18:06:26 UTC; 24h ago

Trong bước tiếp theo, cuối cùng bạn sẽ kết nối với proxy của mình.

Bước 3: Kết nối thông qua Dante

Để chứng minh máy chủ Dante của mình, bạn sẽ sử dụng một chương trình dòng lệnh được gọi là curl, chương trình này phổ biến để thực hiện các loại yêu cầu web khác nhau. Nói chung, nếu bạn muốn xác minh xem liệu một kết nối nhất định có hoạt động trong một trình duyệt trong những trường hợp lý tưởng hay không, trước tiên bạn nên kiểm tra bằng curl. Bạn sẽ sử dụng curl trên máy local của mình để thực hiện việc này - nó được cài đặt theo mặc định trên tất cả các môi trường Windows, Mac và Linux hiện đại, vì vậy bạn có thể mở bất kỳ local shell nào để chạy lệnh này:

  1. curl -v -x socks5://your_dante_user:your_dante_password@your_server_ip:1080 http://www.google.com/
Output
* Trying 138.197.103.77... * TCP_NODELAY set * SOCKS5 communication to www.google.com:80 * SOCKS5 connect to IPv4 142.250.189.228 (locally resolved) * SOCKS5 request granted. * Connected to 138.197.103.77 (138.197.103.77) port 1080 (#0) > GET / HTTP/1.1 …

Thông tin đăng nhập mà bạn đã sử dụng cho curl giờ sẽ hoạt động ở bất kỳ nơi nào khác mà bạn muốn sử dụng máy chủ proxy mới của mình.

Kết luận

Trong hướng dẫn này, bạn đã học cách triển khai một điểm cuối API nguồn mở, phổ biến cho lưu lượng truy cập ủy quyền với chi phí thấp hoặc không tốn phí. Nhiều ứng dụng có hỗ trợ proxy tích hợp (thường ở cấp hệ điều hành) từ nhiều thập kỷ trước, làm cho proxy stack này có khả năng tái sử dụng cao.

Bạn có thể tìm hiểu cách triển khai Squid, một proxy HTTP có thể chạy cùng với Dante để proxy các loại lưu lượng web khác nhau.

Vì một trong những trường hợp sử dụng phổ biến nhất đối với máy chủ proxy là ủy quyền lưu lượng truy cập đến và đi từ các khu vực toàn cầu khác nhau, bạn có thể muốn xem lại cách sử dụng Ansible để tự động triển khai máy chủ tiếp theo, trong trường hợp bạn muốn sao chép cấu hình này trong các trung tâm dữ liệu khác .

Join CloudFly's Telegram channel to receive more offers and never miss any promotions from CloudFly
Share

0 replies