Hướng dẫn cài đặt Squid Proxy trên Ubuntu 20.04

squid proxy

Squid là một dịch vụ proxy caching với đầy đủ các tính năng hỗ trợ các giao thức mạng phổ biến như: HTTP, HTTPS, FTP,… Nó có thể được sử dụng để cải thiện hiệu năng web server bằng việc cache các request có tính lặp lại, lọc lưu lượng truy cập web và truy cập nội dung bị cấm theo khu vực.

Trong bài viết này, mình sẽ hướng dẫn bạn cách cài đặt Squid Proxy trên Ubuntu 20.04 và cấu hình trình duyệt web FireFox và Chrominium để sử dụng nó.

Cài đặt squid proxy trên Ubuntu

Squid package có sẵn trên repository Ubuntu 20.04. Để cài đặt nó, bạn có thể chạy câu lệnh bên dưới:

$ sudo apt update
$ sudo apt install squid

Sau khi đã hoàn thành việc thực thi câu lệnh trên, Squid sẽ được chạy tự động. Để xác minh service xem đã chạy đúng chưa, bạn có thể check status bằng câu lệnh sau:

$ sudo systemctl status squid
squid.service - Squid Web Proxy Server
     Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-11-13 14:02:13 UTC; 15s ago
       Docs: man:squid(8)
...

Hướng dẫn cầu hình Squid proxy

Squid service có thể được cấu hình bằng cách chỉnh sửa file có địa chỉ sau đây: /etc/squid/squid.conf. Và file cấu hình chứa các comments mà mô tả cho mỗi tùy chọn. Bạn cũng có thể đặt các thiết lập cấu hình trong các file riêng – tuy nhiên, cần phải sử dụng chỉ thị “include” trong file cấu hình chính thì mới sử dụng được.

Trước khi thực hiện bất kỳ thay đổi nào, mình khuyên bạn nên backup file cấu hình gốc trước khi thực hiện bất kỳ thao tác nào khác.

$ sudo cp /etc/squid/squid.conf{,.orginal}

Để bắt đầu cấu hình squid, mở file cấu hình lên bằng vim

$ sudo vim /etc/squid/squid.conf

Mặc định, squid lắng nghe trên port 3128 trên tất cả interfaces trên server.

Nếu bạn muốn thay đổi port và thiết lập một interface listening, sửa dòng có chứa http_port và chỉ ra địa chỉ IP của interface và port. Nếu không có interface nào được chỉ ra trong squid thì nó sẽ lắng nghe trên tất cả các interfaces.

/etc/squid/squid.conf

# Squid normally listens to port 3128
http_port IP_ADDR:PORT

Chạy squid trên port mặc định trên tất cả các interface có lẽ là sự lựa chọn của hầu hết mọi người.

Squid cho phép bạn kiểm soát cách client có thể truy cập tài nguyên web bằng cách sử dụng ACL (Access Control List). Mặc định, việc truy cập chỉ được cho phép từ localhost.

Nếu tất cả client sử dụng proxy mà có địa chỉ IP tĩnh, tùy chọn đơn giản nhất để cấm truy cập tới proxy server chính là tạo ra một ACL mà bao gồm các địa chỉ IP được cho phép. Ngoài ra, bạn cũng có thể thiết lập cho squid sử dụng xác thực.

Thay vì thêm địa chỉ IP và file cấu hình chính, thì bạn hãy tạo ra một file mới chỉ chứa các địa chỉ IP được cho phép.

/etc/squid/allowed_ips.txt
192.168.1.222
# All other allowed IPs

Sau khi đã hoàn thành bước trên, mở file cấu hình chính lên và tạo ACL gọi là allowed_ips và cho phép truy cập tới ACL đó bằng cách sử dụng chỉ thị http_access

/etc/squid/squid.conf
# ...
acl allowed_ips src "/etc/squid/allowed_ips.txt"
# ...
#http_access allow localnet
http_access allow localhost
http_access allow allowed_ips
# And finally deny all other access to this proxy
http_access deny all

Thứ tự của các rules http_access khá quan trọng. Nên chắc chắn rằng bạn thêm các chỉ thị trước dòng http_access deny all

Chỉ http_access hoạt động khá giống so với rules firewall. Squid đọc các rules từ trên xuống dưới, và khi một rule khớp thì các rule bên dưới sẽ không được xử lý.

Bất cứ khi nào bạn thực hiện việc thay đổi file cấu hình, bạn cần phải restart lại service để các thay đổi có hiệu quả ngay lập tức.

$ sudo systemctl restart squid

Xác thực trên Squid

Nếu việc hạn chế truy cập dựa trên địa chỉ IP không có ý nghĩa gì trong trường hợp của bạn, bạn có thể cấu hình squid sử dụng các hệ thống backend để xác thực khác như: Samba, LDAP hay Basic Authentication.

Trong bài viết hướng dẫn này, mình sẽ sử dụng basic authentication để trình bày. Nó là một phương thức xác thực khá đơn giản được tích hợp sẵn trong giao thức HTTP.

Để tạo ra một password mã hóa, sử dụng công cụ openssl. Lệnh bên dưới sẽ chèn vào thêm vào file /etc/squid/htpasswd dữ liệu dạng USERNAME:PASSWORD

printf "USERNAME:$(openssl passwd -crypt PASSWORD)\n" | sudo tee -a /etc/squid/htpasswd

Ví dụ: để tạo user “josh” với password là “P@ssvv0rT”, bạn sẽ chạy lệnh sau:

$ printf "vsudo:$(openssl passwd -crypt 'P@ssvv0rd')\n" | sudo tee -a /etc/squid/htpasswd

Output sẽ có dạng sau:

vsudo:QMxVjdyPchJl6

Bước tiếp theo là kích hoạt HTTP basic authentication và include file chứa thông tin đăng nhập vào file cấu hình squid. Mở file cấu hình chính ra và thêm vào dòng sau:

$ sudo vi /etc/squid/squid.conf
/etc/squid/squid.conf
# ...
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/htpasswd
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
# ...
#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

Như ở trên, 3 dòng đầu tiên là để tạo ACL với với tên authenticated, và dòng “http_access allow authenticated” là để cho phép truy cập đối với các user đã xác thực.

Khởi động lại service

$ sudo systemctl restart squid

Cấu hình firewall

Để mở port dịch vụ squid, bạn cần phải enable UFW cho squid bằng câu lệnh sau:

$ sudo ufw allow 'Squid'

Nếu Squid đang chạy trên port khác, giả sử port 8080 thì bạn có thể cho phép traffic đi qua trên port đó bằng câu lệnh hơi khác một chút:

$ sudo ufw allow 8080/tcp

Cấu hình trình duyệt sử dụng proxy

Như mình đã trình bày bên trên thì bạn đã cấu hình thành công Squid Proxy rồi đấy, và bước cuối cùng là cấu hình trình duyệt web để sử dụng proxy

FireFox

Bạn có thể thực các thao tác bên dưới cho các hệ điều hành khác nhau như: Windows, MacOS, Linux.

Bước 1: Phía bên trên bên phải, click vào icon có 3 dấu gạch ngang để mở menu trình duyệt FireFox lên.

Bước 2: Click vào ⚙ Preferences

Bước 3: Kéo xuống tới phần Network Settings và click vào nút Setting

Bước 4: Một cửa sổ sẽ được mở ra

  • Chọn vào option Manual proxy configuration
  • Nhập vào địa chỉ IP của Squid Proxy trong trường HTTP PORT và 3128 ở trường port.
  • Tích chọn vào ô “Use this proxy server for all protocols
  • Click vào nút OK để lưu lại các thiết lập

Tại đây, trình duyệt web của bạn đã được cấu hình thành công rồi đấy, và lúc này bạn sẽ có thể lướt web thông qua Squid Proxy. Để xác nhận bạn đã sử dụng proxy trên trình duyệt web, bạn có thể truy cập vào trang Google, nhập vào “my ip” để xem thông tin địa chỉ IP của mình đã thay đổi để sử dụng địa chỉ IP của Proxy chưa.

Để quay trở lại sử dụng trình duyệt bình thường không có proxy, đi đến phần Network Setting và chọn vào option Use system proxy setting sau đó lưu lại.

Google Chrome

Google Chrome sử dụng các thiết lập proxy hệ thống mặc định. Thay vì phải thay đổi các thiết lập proxy trên hệ điều hành, bạn có thể sử dụng extention SwitchyOmera để chạy trình duyệt Google Chrome từ command-line.

Để khởi chạy Chrome sử dụng profile mới và kết nối tới Squid Server, bạn có thể sử dụng câu lệnh sau để chạy:

Windows

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" ^
    --user-data-dir="%USERPROFILE%\proxy-profile" ^
    --proxy-server="http://SQUID_IP:3128"

Linux

/usr/bin/google-chrome \
    --user-data-dir="$HOME/proxy-profile" \
    --proxy-server="http://SQUID_IP:3128"

MacOS

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
    --user-data-dir="$HOME/proxy-profile" \
    --proxy-server="http://SQUID_IP:3128"

Profile sẽ được tạo tự động nếu như nó không tồn tại. Với cách này, bạn có thể chạy được nhiều instance Chrome cùng lúc – khá là hay.

Để xác minh trình duyệt máy tính của mình có đang sử dụng proxy không, bạn nên truy cập google và tìm “my ip” để xem địa chỉ IP của mình là gì.

Xem thêm: Proxy Server là gì

Kết luận

Squid là một trong những server caching proxy phổ biến nhất hiện nay. Proxy giúp cải thiện tốc độ cho web server và có thể giúp bạn ngăn chặn hoặc hạn chế quyền truy cập vào internet.

Như mình đã trình bày cách cài đặt và cấu hình Squid Proxy trên Ubuntu 20.04 rồi đấy, nếu bạn gặp bất kỳ rắc rối hay vấn đề nào, đừng ngại ngần comment vào bài viết này để được hỗ trợ thêm.

5/5 (2 Reviews)

Để lại một bình luận

Please enter your comment!
Please enter your name here