guides Squid Proxy — Giải thích chi tiết
Download
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 , 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ó. 3128 Port mặc định 1996 Năm ra đời GPL Mã nguồn mở HTTP·HTTPS·FTP Giao thức hỗ trợ 01 Khái niệm 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). 02 Cơ chế 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 + − ↺ 1:1 ⛶ Đ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 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. 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. Tra cứu cache 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ớ. 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. 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 . 03 Bộ nhớ đệm 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ể. 04 Kiểm soát truy cập 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ống và dừ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. 05 Reverse Proxy 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 + − ↺ 1:1 ⛶ Đ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 06 So sánh 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ụ 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 07 Mục đích 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. 08 Đánh giá Ư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ạp — squid.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. Squid Proxy — tài liệu giải thích · forward proxy · reverse proxy · caching · ACL Cấu hình tham chiếu: squid.conf · port 3128 (proxy), 3130 (ICP) · log: access.log / cache.log