Proxy là một máy chủ ứng dụng 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 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à lưu vào bộ nhớ đệm. Squid là một Proxy HTTP mã nguồn mở, phổ biến, ổn định. Trong hướng dẫn này, bạn sẽ biết được cách cấu hình và cài đặt Squid Proxy trên Ubuntu 20.04.
Yêu cầu để cài đặt Squid Proxy trên Ubuntu 20.04
Để thực hiện theo hướng dẫn, bạn sẽ cần một máy chủ Ubuntu 20.04 và người dùng không phải tài khoản root
nhưng có quyền sudo
.
Trong hướng dẫn sẽ sử dụng tên miền là vietnixtest
, bạn có thể thay thế bằng tên miền hoặc địa chỉ IP của bạn.
Bước 1: Cài đặt Squid Proxy
Ngoài việc định tuyến lưu lượng truy cập ra của một người dùng riêng lẻ, Squid Proxy còn được sử dụng trong nhiều trường hợp khác nhau. Trong các máy chủ quy mô lớn, Squid Proxy có thể được sử dụng như một cơ chế lưu vào bộ nhớ đệm phân tán (Distributed Caching Mechanism), bộ cân bằng tải (Load Balancing) hoặc một thành phần khác của ngăn xếp định tuyến (Routing Stack).
Hiện nay, phương pháp quản lý lưu lượng truy cập máy chủ có liên quan đến máy chủ proxy đã bị Kubernetes vượt qua nếu so về độ hiệu quả, sự tiện lợi và khả năng phân phối nhiều thành phần hơn.
Song song đó, sử dụng máy chủ proxy để chuyển hướng yêu cầu website quy mô cá nhân càng phổ biến hơn cho việc tăng tính riêng tư, độ an toàn cho người dùng. Điều này khá hữu ích khi tương tác với các máy chủ proxy có mã nguồn mở mà có thể có cả tá tính năng trong kì bảo trì ưu tiên thấp. Việc sử dụng proxy đang thay đổi nhiều theo thời gian nhưng nền tảng công nghệ thì vẫn vậy.
Bắt đầu bằng cách chạy các lệnh sau với tư cách là người dùng non-root
để cập nhật hệ thống package của bạn và cài đặt Squid Proxy:
sudo apt update
sudo apt install squid
Squid sẽ tự động thiết lập một dịch vụ chạy ngầm và bắt đầu chạy sau khi được cài đặt. Để kiểm tra xem dịch vụ có chạy đúng không, bạn thực hiện câu lệnh:
systemctl status squid.service
Output
● squid.service - Squid Web Proxy Server
Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-12-15 21:45:15 UTC; 2min 11s ago
Squid mặc định không cho phép bất kỳ máy khách nào kết nối với dịch vụ từ bên ngoài máy chủ. Để kích hoạt kết nối từ bên ngoài, bạn cần thực hiện một số thay đổi đối trong file cấu hình được lưu trữ trong /etc/squid/squid.conf
. Mở file cấu hình bằng trình soạn thảo nano
hoặc bất kỳ trình soạn thảo văn bản khác mà bạn muốn. Sử dụng trình soạn thảo nano
với câu lệnh sau:
sudo nano /etc/squid/squid.conf
Lưu ý rằng file cấu hình mặc định của Squid cực kỳ dài và chứa một số lượng cực lớn các cấu hình đã tạm thời bị vô hiệu hóa bằng cách đặt dấu #
ở đầu dòng, còn được gọi là comment
. Khi đó, việc bạn muốn tìm kiếm trong dòng lệnh tương ứng để chỉnh sửa cấu hình một cách thủ công sẽ rất khó khăn và mất thời gian.
Tuy nhiên, trong nano
, bằng cách nhấn tổ hợp phím Ctrl+W, sau đó nhập cụm từ muốn tìm kiếm và nhấn Enter. Bạn sẽ tìm được các cụm từ đó, nhấn liên tục tổ hợp phím Alt+W để tìm các kết quả phù hợp tiếp theo.
Đầu tiên, tìm dòng có chứa cụm từ http_access deny all
, bạn sẽ thấy một khối văn bản giải thích các quy tắc truy cập mặc định của Squid như sau:
. . .
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
. . .
Đối chiếu theo file cấu hình, người dùng thấy được hành vi hiện tại: Cho phép máy chủ localhost kết nối, còn lại thì không. Rõ ràng các quy tắc được sắp xếp theo trình tự từ trên xuống dưới, do vậy bạn nên giữ quy tắc từ chối tất cả ở cuối cùng block cấu hình. Dĩ nhiên người dùng vẫn có thể sửa đổi các lệnh trên thành cho phép hoặc hạn chế 1 vài quy tắc tùy ý nhưng lời khuyên là vẫn giữ lại nguyên trạng và thêm một dòng nằm trên “http_access allow localhost” mà có bao gồm IP của người dùng, cụ thể như sau:
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
Trong đó bao gồm:
acl
: Danh sách kiểm soát truy cập (Access Control List), là một thuật ngữ phổ biến cho chính sách quyền truy cập.localnet
: Trong trường hợp này là tên ACL của bạn.src
: Nơi bắt nguồn yêu cầu sẽ từ bên dưới ACL này, tức là địa chỉ IP của bạn.
Nếu người dùng không biết IP cục bộ của mình, trong bản terrminal dùng lệnh “ip a” để xem kết quả.
Sau khi thực hiện thay đổi đó, hãy lưu và đóng file. Trong nano
, bạn hãy nhấn tổ hợp phím Ctrl + X, sau đó khung lời nhắc bạn có đồng ý xác nhận lưu trữ xuất hiện, bạn nhấn phím Y rồi chọn Enter.
Lúc này, bạn có thể thực hiện thể khởi động lại Squid để cập nhật cấu hình và kết nối được rồi. Nhưng bạn cần thực hiện cách thao tác để bảo mật Squid Proxy của bạn trước nhé.
Nếu bạn chưa có máy chủ để triển khai cài đặt Squid Proxy, bạn có thể tham khảo dịch vụ VPS của Vietnix.
Vietnix là nhà cung cấp dịch vụ thuê VPS Việt Nam tốc độ cao uy tín với nhiều gói dịch vụ đa dạng và giá thành hợp lý như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp và VPS NVMe.
Những ưu điểm nổi bật của VPS Vietnix:
- Tốc độ cao, ổn định.
- Tặng miễn phí theme và plugin WordPress trị giá đến 26.000.000 VND.
- Có hỗ trợ backup.
- Hỗ trợ nhiều hệ điều hành, trong đó bao gồm cả Ubuntu 20.04.
- Không giới hạn Data Tranfer.
Liên hệ với Vietnix để được tư vấn chi tiết.
Bước 2: Bảo vệ Squid Proxy của bạn
Hầu hết các Proxy và các ứng dụng phía máy khách (clients) kết nối với Proxy (ví dụ: trình duyệt web) đều hỗ trợ nhiều phương pháp xác thực. Các phương pháp này có thể bao gồm khóa dùng chung (shared keys) hoặc máy chủ xác thực riêng biệt. Nhưng phổ biến nhất vẫn là cách thức bảo mật người dùng thông thường thông qua username/password
. Squid cho phép tạo cặp giá trị username/password
bằng cách sử dụng chức năng tích hợp của Linux như một bước bổ sung hoặc thay thế để hạn chế quyền truy cập vào Proxy theo địa chỉ IP. Để thực hiện xác thực, bạn cần tạo một file có tên /etc/squid/passwords
và thực hiện cấu hình xác thực Squid trong đó.
Trước tiên, cần cài đặt một số tiện ích từ Apache để có quyền truy cập vào trình tạo mật khẩu của Squid bằng câu lệnh sau:
sudo apt install apache2-utils
Package apache2-utils
này cung cấp lệnh htpasswd
, sử dụng để tạo username/password
cho người dùng Squid mới. Các tài khoản này sẽ không ghi đè hay tác động đến bất kỳ người dùng hệ thống nào trùng lặp. Vì vậy bạn có thể sử dụng cùng tên người dùng hệ thống mà bạn đã đăng nhập nếu muốn. Sau khi nhập username
, bạn sẽ được nhắc nhập password
ngay sau đó:
sudo htpasswd -c /etc/squid/passwords your_squid_username
Thao tác này sẽ lưu trữ tên người dùng cùng với mật khẩu mới đã được băm (hash password), thể hiện trong file /etc/squid/passwords
, mật khẩu này sẽ được Squid sử dụng làm nguồn xác thực. Sau đó, bạn có thể sử dụng lệnh cat
để xem mật khẩu sau khi băm sẽ như thế nào bằng câu lệnh:
sudo cat /etc/squid/passwords
Bạn có thể thấy mật khẩu đã được băm thành một chuỗi ký tự ngẫu nhiên, đảm bảo được tính bảo mật.
Output
vietnix:$apr1$Dgl.Mtnd$vdqLYjBGdtoWA47w4q1Td.
Sau khi tên người dùng và mật khẩu của bạn đã được tạo thành công, hãy thực hiện cập nhật cấu hình của Squid và file /etc/squid/passwords
mới để xác thực. Mở lại file cấu hình Squid bằng câu lệnh:
sudo nano /etc/squid/squid.conf
Thêm các dòng cấu hình sau:
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
Lúc này, file cấu hình Squid cơ bản sẽ như sau:
…
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
http_access allow authenticated
# And finally deny all other access to this proxy
http_access deny all
…
Các chỉ thị bổ sung này yêu cầu Squid kiểm tra file mật khẩu mới của bạn để biết các hàm băm mật khẩu có thể được phân tích cú pháp bằng cơ chế basic_ncsa_auth
và yêu cầu xác thực để truy cập vào Proxy.
Thực hiện khởi động lại Squid để áp dụng các cấu hình mới.
sudo systemctl restart squid.service
Mở và cho phép cổng 3128
hoạt động thông qua tường lửa ufw
bằng câu lệnh:
sudo ufw allow 3128
Cuối cùng bạn có thể kết nối với Proxy và thực hiện các tác vụ quản lý cần thiết rồi.
Bước 3: Thiết lập kết nối thông qua Squid Proxy
Để xác định máy chủ Squid đã hoạt động chính xác, thực hiện sử dụng một chương trình dòng lệnh có tên là curl, chương trình phổ biến này dùng để thực hiện các loại yêu cầu tài nguyên web khác nhau. Nói chung, nếu muốn xác minh xem một kết nối tài nguyên web có hoạt động hay không. Thay vì truy cập trực tiếp trên trình duyệt thì có thể sử dụng kiểm tra nhanh chóng bằng curl
.
Công cụ này đượ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, thực hiện mở giao diện dòng lệnh và thực hiện câu lệnh sau để kiểm tra:
curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 http://www.google.com/
Trong đó, đối số -x
chuyển một yêu cầu Proxy tới curl
sử dụng giao thức http
, chỉ định tên người dùng và mật khẩu đăng nhập máy chủ, sau đó kết nối với một trang web ví dụ như google.com
. Câu lệnh truyền thành công sẽ cho đầu ra như sau:
Output
* Trying 138.197.103.77...
* TCP_NODELAY set
* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
* Proxy auth using Basic with user 'vietni'
> GET http://www.google.com/ HTTP/1.1
Bạn cũng có thể truy cập các trang web sử dụng https
bằng Squid Proxy mà không cần thực hiện thêm bất kỳ thay đổi cấu hình nào khác. Những thay đổi này sử dụng một chỉ thị Proxy riêng có tên là CONNECT
để duy trì SSL giữa máy khách và máy chủ như sau:
curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 https://www.google.com/
Output
* Trying 138.197.103.77...
* TCP_NODELAY set
* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user 'vietnix'
> CONNECT www.google.com:443 HTTP/1.1
> Host: www.google.com:443
> Proxy-Authorization: Basic c2FtbXk6c2FtbXk=
> User-Agent: curl/7.55.1
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
<
* Proxy replied OK to CONNECT request
* CONNECT phase completed!
Thông tin đăng nhập mà bạn đã sử dụng cho lệnh curl
sẽ hoạt động đổi với bất kỳ yêu cầu nào khác mà bạn muốn sử dụng máy chủ Proxy.
Sau khi đã nắm rõ các bước thực hiện, bạn hãy liên hệ với Vietnix để được tư vấn về chọn gói VPS có cấu hình và triển khai theo hướng dẫn.
Vietnix là đơn vị uy tín hàng đầu tại Việt Nam với 10 năm kinh nghiệm cung cấp dịch vụ VPS. Trong suốt thời gian hoạt động, Vietnix đã đồng hành với hơn 50.000 khách hàng trong lẫn ngoài nước như iVIVU.com, Vietnamwork, KINGFOOD, UBGroup, GTV,…
Với tỷ lệ 97% khách hàng sử dụng VPS tại Vietnix đều hài lòng về chất lượng dịch vụ và tiếp tục sử dụng các sản phẩm khác của công ty cũng như giới thiệu cho người quen, đó là một minh chứng rõ ràng về sự uy tín và chất lượng của Vietnix.
Nhờ đó, vừa qua Vietnix đã vinh dự nhận được giải thưởng “Thương hiệu Việt Nam xuất sắc 2022”.
Nếu có nhu cầu thuê VPS, đừng ngần ngại liên hệ với Vietnix theo thông tin dưới đây để được hỗ trợ nhanh nhất.
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
Lời kết
Thông qua hướng dẫn này, bạn đã học được cách triển khai mã nguồn mở Squid Proxy để ủy quyền quản lý lưu lượng truy cập mà không tốn chi phí hoặc ít chi phí. Nếu bạn có bất kỳ vướng mắc nào trong quá trình cài đặt, hãy để lại bình luận để cùng trao đổi thêm nhé.