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, HTTPS và FTP. 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ó.
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:
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ộ.
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.
Đặ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.
Á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).
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
Squid lắng nghe trên http_port (mặc định 3128), nhận request và bóc tách URL, method, header.
Đố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.
Nếu nội dung đã có và còn "tươi" (fresh) theo refresh_pattern & header Cache-Control → Cache HIT, trả ngay từ bộ nhớ.
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.
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.
Đâ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.
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.
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 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.
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).
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ể.
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ống và dừng ở luật khớp đầu tiên — nên thứ tự cực kỳ quan trọng.
# 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
http_access deny allLậ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
# 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
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ụ ai | Client nội bộ (người dùng) | Server (backend / origin) |
| Vị trí đặt | Trước người dùng, sát LAN | Trước web server, sát Internet |
| Ai cấu hình để dùng | Client tự trỏ proxy :3128 | Client không biết — DNS trỏ thẳng tới Squid |
| Mục tiêu chính | Lọc truy cập, đệm, ẩn IP client, tiết kiệm băng thông ra | Giả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ài | Giấu server với client ngoài |
| Directive đặc trưng | http_port 3128 + acl/http_access | http_port 80 accel + cache_peer originserver |
| Ví dụ điển hình | Proxy công ty / trường học, content filter | CDN mini, web accelerator trước app server |
Trong thực tế, các tổ chức triển khai Squid cho những mục tiêu sau:
Đệ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.
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.
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ộ.
Ở 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.
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.
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.
squid.conf dài, dễ sai thứ tự luật ACL.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.