Network Infrastructure · Caching Proxy

Squid Proxy

Squid là một phần mềm proxy server và bộ nhớ đệm (cache) cho web, mã nguồn mở, ra đời từ 1996. Nó đứng ở giữa client (trình duyệt, ứng dụng) và server đích, làm trung gian cho các kết nối HTTP, HTTPSFTP. Squid vừa lưu lại bản sao nội dung hay được truy cập để phục vụ nhanh hơn và tiết kiệm băng thông, vừa cho phép kiểm soát truy cập (ai được vào đâu) và ghi log mọi request đi qua nó.

3128
Port mặc định
1996
Năm ra đời
GPL
Mã nguồn mở
HTTP·HTTPS·FTP
Giao thức hỗ trợ

Squid proxy là gì?

Bản chất Squid là một trạm trung gian thông minh. Thay vì client kết nối thẳng tới website, nó gửi yêu cầu cho Squid; Squid quyết định cho phép hay từ chối, kiểm tra xem đã có bản lưu sẵn chưa, rồi mới thay mặt client đi lấy dữ liệu. Squid mang 3 "vai" chính sau:

Forward Proxy

Đại diện cho client

Vai trò phổ biến nhất. Squid đặt trước người dùng nội bộ, làm cửa ngõ ra Internet — lọc truy cập, đệm nội dung, ẩn IP nội bộ.

Caching Engine

Bộ nhớ đệm web

Lưu bản sao của trang, ảnh, file… trong RAM và trên đĩa. Lần sau request giống nhau được phục vụ ngay, không cần ra Internet.

Reverse Proxy

Đại diện cho server

Đặt trước các web server (chế độ "accelerator"), nhận request từ Internet, đệm nội dung và giảm tải cho backend.

Access Gateway

Cổng kiểm soát

Áp dụng luật ACL: chặn domain, giới hạn theo IP/thời gian/người dùng, lọc nội dung qua ICAP (antivirus, content filter).

Squid xử lý một request như thế nào?

Khi một request đi vào, Squid chạy qua một chuỗi quyết định cố định: kiểm tra ACL → tra cache → (nếu cần) ra origin → lưu cache → trả về và ghi log. Sơ đồ dưới đây mô tả luồng của một forward proxy.

Ctrl/Cmd + lăn chuột để zoom · kéo để di chuyển · nhấp đúp để vừa khung · nút ⛶ mở toàn màn hình

Đang tải…
Client / điểm vào
Xử lý của Squid
Điểm quyết định
Cache HIT / lưu
Origin server
Từ chối
  1. Tiếp nhận & phân tích request

    Squid lắng nghe trên http_port (mặc định 3128), nhận request và bóc tách URL, method, header.

  2. Kiểm tra quyền truy cập (ACL)

    Đối chiếu request với các luật http_access theo thứ tự từ trên xuống. Khớp luật deny đầu tiên → trả 403 ngay.

  3. Tra cứu cache

    Nếu nội dung đã có và còn "tươi" (fresh) theo refresh_pattern & header Cache-ControlCache HIT, trả ngay từ bộ nhớ.

  4. Lấy từ origin khi MISS

    Không có hoặc đã hết hạn → Squid thay mặt client mở kết nối tới server đích để lấy nội dung mới.

  5. Lưu cache & trả về

    Nếu nội dung được phép cache, Squid lưu lại bản sao rồi trả cho client, đồng thời ghi kết quả (TCP_HIT/TCP_MISS) vào access.log.

Caching hoạt động ra sao?

Đây là "linh hồn" của Squid. Mục tiêu: phục vụ lại nội dung đã tải mà không phải đi ra Internet lần nữa — giảm độ trễ, tiết kiệm băng thông, giảm tải cho server gốc.

Cache HIT

Trúng cache

Nội dung đã có sẵn và còn hạn. Squid trả về tức thì từ RAM/đĩa — nhanh nhất, không tốn băng thông ra ngoài.

Cache MISS

Trượt cache

Chưa có hoặc đã cũ. Squid phải ra origin lấy mới, sau đó (nếu được phép) lưu lại cho các lần sau.

cache_mem / cache_dir

Hai tầng lưu trữ

cache_mem giữ object nóng trong RAM; cache_dir lưu trên đĩa để chứa khối lượng lớn và bền hơn.

refresh_pattern

Quy tắc "tươi/cũ"

Quyết định một object còn dùng được bao lâu trước khi phải kiểm tra lại với origin (validate / revalidate).

Cache peering — chia sẻ cache giữa nhiều Squid
Nhiều Squid có thể hỏi nhau "anh có object này không?" qua giao thức ICP (port 3130) hoặc HTCP, tạo thành một lưới (hierarchy) cha–con (cache_peer parent/sibling) để tăng tỉ lệ HIT tổng thể.

ACL & http_access

Squid kiểm soát truy cập theo 2 bước: (1) định nghĩa ACL — đặt tên cho một tập điều kiện (IP nguồn, domain đích, port, thời gian…); (2) áp luật http_access — cho phép/từ chối các ACL đó. Luật được duyệt từ trên xuốngdừng ở luật khớp đầu tiên — nên thứ tự cực kỳ quan trọng.

/etc/squid/squid.conf ACL cơ bản
# 1) Định nghĩa ACL — đặt tên cho từng điều kiện
acl localnet     src        192.168.0.0/16   # mạng LAN
acl localnet     src        10.0.0.0/8
acl blocked      dstdomain  .facebook.com .tiktok.com
acl work_hours   time       MTWHF 09:00-18:00
acl SSL_ports    port       443
acl CONNECT      method     CONNECT

# 2) Áp luật — duyệt TỪ TRÊN XUỐNG, dừng ở dòng khớp đầu tiên
http_access deny  CONNECT !SSL_ports   # chỉ cho CONNECT tới 443
http_access deny  blocked work_hours   # chặn MXH trong giờ làm
http_access allow localnet             # LAN được ra Internet
http_access deny  all                  # mặc định: chặn tất cả phần còn lại
Quy tắc vàng: luôn kết thúc bằng http_access deny all
Vì luật khớp đầu tiên thắng, nếu không có dòng "chặn hết" ở cuối, hành vi mặc định có thể vô tình để lọt request không mong muốn. Hãy đi từ luật cụ thể nhất ở trên xuống tổng quát nhất ở dưới.

Squid ở chế độ "accelerator"

Lật ngược vai trò: thay vì bảo vệ client, Squid đứng trước các web server để nhận traffic từ Internet, đệm nội dung tĩnh và che giấu backend. Người dùng chỉ thấy Squid; các origin server nằm ẩn phía sau.

Ctrl/Cmd + lăn chuột để zoom · kéo để di chuyển · nhấp đúp để vừa khung

Đang tải…
/etc/squid/squid.conf Reverse proxy
# Lắng nghe như một web server, bật chế độ tăng tốc (accel)
http_port 80 accel defaultsite=www.example.com

# Khai báo backend thật (origin server) Squid sẽ chuyển tiếp tới
cache_peer 10.0.0.10 parent 8080 0 no-query originserver name=web1

# Chỉ phục vụ cho domain của mình
acl our_sites dstdomain www.example.com
http_access allow our_sites
cache_peer_access web1 allow our_sites

Forward Proxy vs Reverse Proxy

Cùng một phần mềm Squid, nhưng hai chế độ phục vụ hai mục đích trái ngược nhau.

Tiêu chí Forward Proxy Reverse Proxy (accel)
Bảo vệ / phục vụ aiClient nội bộ (người dùng)Server (backend / origin)
Vị trí đặtTrước người dùng, sát LANTrước web server, sát Internet
Ai cấu hình để dùngClient tự trỏ proxy :3128Client không biết — DNS trỏ thẳng tới Squid
Mục tiêu chínhLọc truy cập, đệm, ẩn IP client, tiết kiệm băng thông raGiảm tải backend, đệm nội dung tĩnh, ẩn cấu trúc backend
Hướng "giấu mặt"Giấu client với server ngoàiGiấu server với client ngoài
Directive đặc trưnghttp_port 3128 + acl/http_accesshttp_port 80 accel + cache_peer originserver
Ví dụ điển hìnhProxy công ty / trường học, content filterCDN mini, web accelerator trước app server

Squid dùng để làm gì?

Trong thực tế, các tổ chức triển khai Squid cho những mục tiêu sau:

Performance

Tăng tốc & tiết kiệm băng thông

Đệm nội dung hay truy cập → người dùng tải nhanh hơn, đường truyền Internet đỡ nghẽn, hóa đơn băng thông giảm.

Control

Kiểm soát & lọc truy cập

Chặn website, giới hạn theo IP/người dùng/giờ làm việc, tích hợp content filter — phổ biến ở doanh nghiệp, trường học.

Privacy

Ẩn danh & trung gian

Server ngoài chỉ thấy IP của Squid, không thấy IP thật của từng client trong mạng nội bộ.

Scaling

Giảm tải cho server

Ở chế độ reverse proxy, Squid hứng phần lớn request tĩnh, để backend chỉ lo phần động — chịu tải cao hơn.

Audit

Giám sát & ghi log

access.log ghi lại mọi request: ai, lúc nào, vào đâu, HIT hay MISS — phục vụ kiểm toán và phân tích lưu lượng.

Security

Cổng bảo mật (ICAP)

Tích hợp ICAP để quét virus, kiểm tra nội dung, DLP… trên luồng dữ liệu trước khi tới client.

Ưu điểm & hạn chế

Ưu điểm
  • Miễn phí, mã nguồn mở, chạy ổn định trên hầu hết Linux/Unix.
  • Caching mạnh mẽ, nhiều tầng RAM + đĩa, hỗ trợ cache peering.
  • ACL cực kỳ linh hoạt — kiểm soát theo IP, domain, port, thời gian, method…
  • Đa năng: vừa forward, vừa reverse proxy, vừa lọc nội dung qua ICAP.
  • Trưởng thành: gần 30 năm phát triển, tài liệu & cộng đồng lớn.
Hạn chế
  • Cấu hình phức tạpsquid.conf dài, dễ sai thứ tự luật ACL.
  • HTTPS khó cache: traffic mã hóa chỉ "tunnel" qua, muốn xem/đệm phải dùng SSL Bump (gây lo ngại về quyền riêng tư).
  • Hiệu năng phụ thuộc đĩa/RAM — cache lớn cần phần cứng tương xứng.
  • Web hiện đại ít cache được: nhiều nội dung động, cá nhân hóa nên tỉ lệ HIT thấp hơn xưa.
Về HTTPS: CONNECT tunnel vs SSL Bump
Với HTTPS, mặc định client gửi method CONNECT và Squid chỉ mở một "đường hầm" mã hóa đi qua — không đọc, không đệm được nội dung. Muốn lọc/đệm HTTPS phải bật SSL Bump (Squid giải mã rồi mã hóa lại bằng CA riêng) — mạnh nhưng nhạy cảm về quyền riêng tư và cần cài chứng chỉ lên máy client.