Hướng dẫn tích hợp Squid với Active Directory: Cấu hình xác thực LDAP

Trong bài viết trước về cách setup Proxy Server trên VPS, chúng ta đã tìm hiểu cách cài đặt Squid và cấu hình xác thực cơ bản bằng file htpasswd. Phương pháp đó hoạt động tốt cho nhu cầu cá nhân hoặc nhóm nhỏ.

Tuy nhiên, trong môi trường doanh nghiệp, việc quản lý file htpasswd bộc lộ nhiều điểm yếu chí mạng. Nó không an toàn (mật khẩu truyền dạng cleartext) và việc thêm/xóa người dùng rất thủ công, không đồng bộ với hệ thống quản lý nhân viên.

Đây là lúc giải pháp tích hợp Squid với Active Directory (AD) phát huy sức mạnh. Thay vì quản lý một file text riêng lẻ, bạn cho phép người dùng đăng nhập proxy bằng chính tài khoản Windows (tài khoản công ty) của họ.

Bài viết này sẽ hướng dẫn bạn từng bước cấu hình Squid Proxy sử dụng xác thực LDAP (giao thức mà Active Directory sử dụng) một cách an toàn và tập trung.

DevOps Team Concept Vector Illustration

Tóm tắt nhanh (TL;DR)

  1. Cài đặt helper squid-ldap (Ubuntu) hoặc squid_ldap (CentOS).
  2. Tạo một tài khoản dịch vụ (Bind DN) chỉ có quyền đọc trong Active Directory.
  3. Cấu hình auth_param basic program basic_ldap_auth... trong squid.conf với Base DN, Bind DN, và filter sAMAccountName=%s.
  4. Tạo file mật khẩu an toàn (ldap_pass) cho tài khoản dịch vụ và cấp quyền sở hữu cho user proxy (hoặc squid).
  5. Thêm ACL proxy_auth REQUIREDhttp_access allow ldap_users trước dòng deny all.

Tại sao tích hợp Squid với Active Directory là cần thiết?

Việc chuyển từ htpasswd sang AD/LDAP không chỉ là một nâng cấp, mà là một yêu cầu bắt buộc đối với các tổ chức muốn quản trị hệ thống một cách chuyên nghiệp và an toàn.

So sánh nhanh các phương thức xác thực Squid

Squid hỗ trợ nhiều cơ chế xác thực. Dưới đây là bảng so sánh 3 phương thức phổ biến nhất khi làm việc với Active Directory:

Phương thức Helper Ưu điểm Nhược điểm
LDAP Basic (Bài này) basic_ldap_auth Dễ cấu hình, tương thích rộng rãi. Yêu cầu người dùng nhập User/Pass.
NTLM ntlm_auth An toàn hơn Basic, tương thích tốt với Windows. Cấu hình phức tạp hơn, cần Samba/Winbind.
Kerberos negotiate_kerberos_auth Bảo mật nhất, hỗ trợ Single Sign-On (SSO). Rất phức tạp, yêu cầu join domain, keytab…

Bài viết này tập trung vào LDAP Basic. Đây là phương pháp cân bằng hoàn hảo giữa tính bảo mật, khả năng quản lý tập trung và sự đơn giản trong quá trình cài đặt.

(Để loại bỏ pop-up, xem hướng dẫn Cấu hình Squid Kerberos Active Directory.)

Lợi ích vượt trội của xác thực tập trung

  • Quản lý tập trung: Bạn không cần tạo/xóa/đổi mật khẩu proxy. Chỉ cần vô hiệu hóa tài khoản AD của nhân viên khi họ nghỉ việc, họ sẽ tự động mất quyền truy cập proxy.
  • Tăng cường bảo mật: Tận dụng toàn bộ chính sách mật khẩu của AD (độ phức tạp, hết hạn định kỳ…) mà không cần cấu hình thêm.
  • Khả năng kiểm toán (Auditing): Mọi log truy cập web trong Squid giờ đây được gắn với một danh tính người dùng thật (ví dụ: nv.ketoan.A) thay vì một tài khoản chung.
  • Tuân thủ (Compliance): Giúp doanh nghiệp tuân thủ các quy định bảo mật như GDPR hoặc HIPAA bằng cách kiểm soát và ghi lại chính xác ai đã truy cập những gì.

Mô hình hoạt động: Squid “nói chuyện” với Active Directory

Để hiểu cách cấu hình, bạn cần biết Squid giao tiếp với AD như thế nào.

Squid không tự mình kết nối với Active Directory. Giống như cách nó dùng basic_ncsa_auth để đọc file htpasswd, nó sẽ ủy thác nhiệm vụ này cho một “helper” (trình trợ giúp) chuyên biệt tên là basic_ldap_auth.

Luồng hoạt động diễn ra như sau:

  1. Người dùng (Trình duyệt) gửi yêu cầu truy cập web, kèm theo Username và Mật khẩu (đã nhập ở cửa sổ pop-up) đến Squid.
  2. Squid nhận thông tin và chuyển nó cho helper basic_ldap_auth.
  3. Helper sử dụng giao thức LDAP (Lightweight Directory Access Protocol) để kết nối đến máy chủ Active Directory Domain Controller (DC).
  4. Helper “hỏi” máy chủ DC: “Tài khoản [Username] với mật khẩu [Password] này có hợp lệ không?”
  5. Active Directory xác thực thông tin và trả lời “OK” (Hợp lệ) hoặc “ERR” (Không hợp lệ) cho helper.
  6. Squid nhận kết quả từ helper và quyết định cho phép (Allow) hoặc từ chối (Deny) yêu cầu của người dùng.

Hướng dẫn chi tiết: Cấu hình tích hợp Squid với Active Directory

Chúng tôi giả định bạn đã cài đặt Squid. Giờ chúng ta sẽ tiến hành cấu hình phần xác thực LDAP.

Bước 1: Điều kiện tiên quyết

Trước khi mở file squid.conf, bạn cần thu thập 3 thông tin quan trọng từ hệ thống Active Directory của mình. Để đảm bảo an toàn tối đa, bạn cũng nên bảo mật VPS Linux với UFW, Fail2Ban và Hardening SSH trước khi tiếp tục.

  1. Địa chỉ Domain Controller (DC): IP hoặc tên máy chủ DC. Ví dụ: 192.168.1.10 hoặc dc01.mycompany.com.
  2. Base DN (Distinguished Name): Đây là “địa chỉ” gốc trong cây thư mục AD nơi chứa người dùng của bạn.
    • Ví dụ: Nếu domain của bạn là mycompany.com, Base DN thường là DC=mycompany,DC=com.
    • Nếu user nằm trong một OU (Tổ chức) cụ thể, nó có thể là: OU=Users,DC=mycompany,DC=com.
  3. Tài khoản dịch vụ (Bind DN):
    • Cực kỳ quan trọng: Không dùng tài khoản Administrator. Bạn nên tạo một tài khoản user bình thường trong AD (ví dụ: squid-service) với mật khẩu không bao giờ hết hạn và chỉ có quyền đọc thông tin LDAP.
    • Bạn cần biết DN đầy đủ (Bind DN) của tài khoản này. Ví dụ: CN=squid-service,OU=ServiceAccounts,DC=mycompany,DC=com.
    • Ghi lại mật khẩu của tài khoản squid-service này.

Bước 2: Cài đặt Squid LDAP Helper

Trên VPS chạy Squid, bạn cần cài đặt gói trợ giúp LDAP.

Trên Ubuntu/Debian:

sudo apt-get update
sudo apt-get install squid-ldap -y

Trên CentOS/RHEL:

sudo yum install squid_ldap -y

Bước 3: Cấu hình file squid.conf

Cryptography and Encryption Concept Vector Illustration

Đây là lúc chúng ta thay thế cấu hình htpasswd cũ.

Mở file cấu hình Squid:

sudo nano /etc/squid/squid.conf

Tìm và xóa hoặc vô hiệu hóa (thêm dấu #) các dòng auth_param basic program /usr/lib/squid/basic_ncsa_auth...auth_param basic realm... cũ.

Sau đó, thêm đoạn cấu hình mới sau đây (thường đặt ở gần đầu file):

# --- CAU HINH XAC THUC LDAP / ACTIVE DIRECTORY ---

# 1. Khai bao file chua mat khau cua tai khoan service
# (An toan hon la viet mat khau truc tiep)
acl ldap_service_password password_file "/etc/squid/ldap_pass"

# 2. Khai bao chuong trinh helper 'basic_ldap_auth'
auth_param basic program /usr/lib/squid/basic_ldap_auth \
-v 3 \
-R \
-b "DC=mycompany,DC=com" \
-D "CN=squid-service,OU=ServiceAccounts,DC=mycompany,DC=com" \
-w %p \
-f "sAMAccountName=%s" \
-h dc01.mycompany.com \
-Z

# 3. Thiet lap bo sung
auth_param basic children 5 startup=5 idle=1
auth_param basic realm Vui long nhap tai khoan Cong ty (AD)
auth_param basic credentialsttl 2 hours

Lưu ý: Tìm đường dẫn Helper chính xác

Đường dẫn /usr/lib/squid/basic_ldap_auth trong ví dụ có thể không đúng trên máy chủ của bạn. Nó thay đổi tùy theo HĐH (Ubuntu/CentOS), phiên bản Squid (3, 4, 5) và cách cài đặt.

Hãy chạy lệnh sau để tự tìm đường dẫn đúng trên hệ thống của bạn:

find / -name basic_ldap_auth

Hoặc dùng lệnh rpm -ql squid | grep basic_ldap_auth (CentOS) / dpkg -L squid | grep basic_ldap_auth (Ubuntu).

Hãy sao chép và dán đường dẫn chính xác bạn tìm được vào file squid.conf.

Giải thích chi tiết các tham số:

  • /usr/lib/squid/basic_ldap_auth: Đường dẫn đến helper (Xem lưu ý ở trên).
  • -v 3: Sử dụng giao thức LDAP phiên bản 3.
  • -R: (Quan trọng khi dùng AD). Cờ này yêu cầu helper không tự động theo dõi “LDAP referrals”. Active Directory thường sử dụng referrals, và việc tắt chúng đi (với cờ -R) giúp kết nối ổn định và chính xác hơn.
  • -b "DC=...": Base DN (thay bằng thông tin của bạn). Nơi Squid bắt đầu tìm kiếm user.
  • -D "CN=...": Bind DN (thay bằng thông tin của bạn). Tài khoản dịch vụ mà Squid dùng để đăng nhập AD.
  • -w %p: Chỉ thị Squid đọc mật khẩu từ file đã khai báo ở trên (ldap_service_password). %p là biến chứa mật khẩu.
  • -f "sAMAccountName=%s": Bộ lọc (filter). sAMAccountName là tên đăng nhập Windows (ví dụ: nv.ketoan.A). %s là biến chứa username mà người dùng gõ vào.
  • -h dc01.mycompany.com: Hostname hoặc IP của máy chủ Domain Controller.
  • -Z: (Mã hóa). Cờ này yêu cầu helper thử (Try) sử dụng StartTLS để mã hóa kết nối với AD. Nếu bạn chắc chắn máy chủ AD của mình hỗ trợ và muốn bắt buộc (Force) mã hóa, bạn có thể dùng cờ -ZZ.

Bước 4: Tạo file mật khẩu an toàn (LDAP Password File)

Chúng ta cần tạo file /etc/squid/ldap_pass đã khai báo ở trên. File này chứa mật khẩu của tài khoản dịch vụ squid-service.

  1. Tạo file và nhập mật khẩu:
    # Cách 1: Dùng nano
    sudo nano /etc/squid/ldap_pass
    # (Gõ mật khẩu của tài khoản 'squid-service' vào và lưu lại)
    
    # Cách 2: Dùng htpasswd (tạo file mã hóa)
    sudo htpasswd -c -d /etc/squid/ldap_pass squid-service
    # (Bạn sẽ được yêu cầu nhập mật khẩu 2 lần)
  2. Cấp quyền bảo mật (BẮT BUỘC): File này chứa mật khẩu kết nối AD, nó phải được bảo mật. Chúng ta cần cấp quyền cho user proxy (trên Ubuntu) hoặc squid (trên CentOS) để đọc nó.
    Trên Ubuntu:

    sudo chown proxy: /etc/squid/ldap_pass
    sudo chmod 640 /etc/squid/ldap_pass

    Trên CentOS:

    sudo chown squid: /etc/squid/ldap_pass
    sudo chmod 640 /etc/squid/ldap_pass

Bước 5: Cập nhật Access Control Lists (ACLs)

Phần này tương tự như bài viết gốc, nhưng chúng ta sẽ dùng tên ACL mới cho rõ ràng.

Tìm đến khu vực http_access trong squid.conf. Xóa các dòng acl authenticated...http_access allow authenticated... cũ (nếu có).

Thêm các dòng ACL mới này NGAY TRƯỚC dòng http_access deny all:

# --- Xac thuc ACL cho LDAP ---

# Tao mot ACL ten la 'ldap_users' yeu cau xac thuc
acl ldap_users proxy_auth REQUIRED

# Cho phep nhung ai thuoc ACL 'ldap_users' (da xac thuc thanh cong)
http_access allow ldap_users

# --- Ket thuc ACL ---

# Dong nay PHAI LUON nam o cuoi cung
http_access deny all

Bước 6: Khởi động và kiểm tra

Bây giờ, hãy kiểm tra file cấu hình và khởi động lại Squid.

  1. Kiểm tra lỗi cú pháp (lệnh phải im lặng, không báo lỗi):
    sudo squid -k parse
  2. Khởi động lại dịch vụ Squid:
    sudo systemctl restart squid
  3. Kiểm tra log để xem lỗi (nếu có):
    sudo tail -f /var/log/squid/cache.log

    Nếu bạn thấy lỗi liên quan đến “LDAP” hoặc “helper startup failed”, hãy kiểm tra lại đường dẫn helper, Bind DN, và file mật khẩu.

  4. Thử nghiệm trên trình duyệt: Mở trình duyệt và cấu hình proxy trỏ đến VPS của bạn. Một cửa sổ pop-up sẽ hiện ra. Hãy thử đăng nhập bằng tài khoản Active Directory của bạn. Nếu bạn truy cập web thành công, bạn đã hoàn tất!

Nâng cao: Phân quyền truy cập theo Nhóm (Group) Active Directory

Đây chính là sức mạnh thật sự của việc tích hợp AD. Bạn có thể cho phép hoặc cấm truy cập web dựa trên việc người dùng thuộc nhóm nào trong AD (ví dụ: nhóm “IT”, “Ketoan”, “Interns”).

Chúng ta sẽ sử dụng một helper khác: ext_ldap_group_acl.

Bước 1: Khai báo External ACL Helper (kiểm tra nhóm)

Mở lại file sudo nano /etc/squid/squid.conf và thêm đoạn mã sau (ngay bên dưới khối auth_param):

# --- KHAI BAO HELPER KIEM TRA NHOM AD ---
# (Day la mot dong rat dai, can than khi copy va xuong dong)

external_acl_type AD_Group_Check %LOGIN /usr/lib/squid/ext_ldap_group_acl \
-v 3 -R \
-b "DC=mycompany,DC=com" \
-D "CN=squid-service,OU=ServiceAccounts,DC=mycompany,DC=com" \
-w %p \
-f "(&(sAMAccountName=%u)(memberOf=CN=%g,OU=Groups,DC=mycompany,DC=com))" \
-h dc01.mycompany.com \
-Z

# Yeu cau Squid su dung file mat khau da khai bao o tren
acl ldap_service_password password_file "/etc/squid/ldap_pass"
external_acl_cache_password_file /etc/squid/ldap_pass

Giải thích bộ lọc -f phức tạp:

  • %u là username (ví dụ: nv.ketoan.A) được truyền từ người dùng đã xác thực.
  • %g là tên nhóm (ví dụ: “IT-Admins”) được truyền từ ACL mà chúng ta sẽ định nghĩa.
  • memberOf=CN=%g,OU=Groups...: Chỉ thị này tìm xem user có phải là thành viên của nhóm (%g) nằm trong OU Groups hay không.
  • Lưu ý: Bạn phải thay đổi OU=Groups,DC=mycompany,DC=com cho đúng với vị trí chứa các Nhóm (Group) trong AD của bạn.

Bước 2: Tạo và áp dụng ACL dựa trên Nhóm

Bây giờ, chúng ta có thể tạo các ACL “động” rất mạnh mẽ.

Trong squid.conf, tìm đến khu vực http_access (ngay trước http_access allow ldap_users).

Ví dụ: Chỉ cho phép nhóm “IT-Admins” truy cập SSH (port 22) và chặn nhóm “Interns”.

# Dinh nghia cac port (co the ban da co)
acl SSL_ports port 443
acl SSH_port port 22
acl CONNECT method CONNECT

# --- Dinh nghia ACL Nhom AD ---
# Goi helper 'AD_Group_Check' de kiem tra 2 nhom
acl IT_Admins external AD_Group_Check "IT-Admins"
acl Interns external AD_Group_Check "Interns"

# --- Ap dung quy tac ---
# Luu y: Thu tu rat quan trong, quy tac 'chan' phai o tren

# Chan nhom "Interns" truy cap moi thu
http_access deny Interns

# Cho phep nhom "IT-Admins" truy cap port 22 (SSH)
http_access allow CONNECT SSH_port IT_Admins

# Chan tat ca nhung nguoi khac (ke ca user da xac thuc) truy cap port 22
http_access deny CONNECT SSH_port

# --- Cac quy tac cu van giu nguyen ---
acl ldap_users proxy_auth REQUIRED
http_access allow ldap_users
http_access deny all

Sau khi lưu file, hãy kiểm tra cú pháp (sudo squid -k parse) và khởi động lại Squid. Hệ thống giờ đây đã phân quyền truy cập chi tiết theo nhóm AD.

Xử lý sự cố thường gặp (Troubleshooting)

Computer Troubleshooting Abstract Concept Vector Illustration

Cấu hình LDAP có thể khó khăn. Nếu bạn gặp các lỗi chung như “Connection Refused” hoặc “Timeout”, hãy tham khảo bài viết Phân tích & sửa lỗi kết nối Proxy để chẩn đoán các vấn đề cơ bản về mạng/proxy trước.

Dưới đây là các cách gỡ lỗi hiệu quả nhất.

Kiểm tra Helper thủ công (Cách tốt nhất)

Chạy lệnh basic_ldap_auth trực tiếp trên terminal và gõ username password để xem nó trả lời “OK” hay “ERR”.

# Copy toan bo lenh helper tu file squid.conf cua ban
# Thay '-w %p' bang '-w "MatKhauCuaServiceAccount"' (mat khau that)
/usr/lib/squid/basic_ldap_auth \
-v 3 -R -b "DC=mycompany,DC=com" \
-D "CN=squid-service,OU=ServiceAccounts,DC=mycompany,DC=com" \
-w "MatKhauCuaServiceAccount" \
-f "sAMAccountName=%s" -h dc01.mycompany.com -Z

Sau khi chạy lệnh, terminal sẽ đứng yên chờ bạn nhập. Hãy gõ: ten_user_AD mat_khau_AD (rồi nhấn Enter)

  • Nếu nó trả về OK, helper của bạn cấu hình đúng. Vấn đề nằm ở file squid.conf (sai ACL) hoặc file mật khẩu -w %p.
  • Nếu nó trả về ERR, hãy kiểm tra lại Bind DN, Base DN, mật khẩu, filter…

Kiểm tra bằng ldapsearch

Dùng ldapsearch để kiểm tra kết nối LDAP độc lập với Squid, bao gồm cả StartTLS.

# Cai dat (Ubuntu)
sudo apt-get install ldap-utils

# Lenh kiem tra (thay the cac gia tri)
ldapsearch -x -H ldap://dc01.mycompany.com \
-Z \
-D "CN=squid-service,OU=ServiceAccounts,DC=mycompany,DC=com" \
-w "MatKhauCuaServiceAccount" \
-b "DC=mycompany,DC=com" \
"(sAMAccountName=ten_user_ban_muon_tim)"
  • Nếu lệnh này trả về thông tin user, kết nối LDAP (bao gồm cả StartTLS) của bạn đã thông.

Kiểm tra bằng curl

Từ một máy client, dùng curl để kiểm tra toàn bộ luồng xác thực của Squid:

curl -v -x http://[IP_VPS_Squid]:[PORT] \
-U "ten_user_AD:mat_khau_AD" http://example.com
  • Nếu thành công, bạn sẽ thấy mã HTML của example.com. Nếu thất bại, hãy đọc kỹ log -v (verbose).

Lỗi phổ biến trên CentOS (SELinux)

SELinux mặc định cấm Squid (vốn là dịch vụ web) thực hiện các kết nối mạng LDAP ra bên ngoài.

  • Triệu chứng: Helper chạy thủ công thì OK, nhưng Squid log báo lỗi “permission denied”.
  • Giải pháp: Cho phép Squid sử dụng LDAP:
    # Kiem tra trang thai
    getsebool -a | grep squid
    # Bat co (flag) cho phep Squid dung LDAP (vinh vien)
    sudo setsebool -P squid_use_ldap 1

Lỗi “Certificate Verify Failed” (Khi dùng -Z hoặc -ZZ)

  • Triệu chứng: Lệnh ldapsearch -Z hoặc log của Squid báo lỗi “certificate verify failed” hoặc “unable to get issuer certificate”.
  • Nguyên nhân: Máy chủ Active Directory đang dùng một chứng chỉ SSL (cho LDAPS) được ký bởi một CA nội bộ (Internal CA) của công ty. Máy chủ Linux chạy Squid không tin tưởng CA này.
  • Giải pháp: Bạn phải “dạy” máy chủ Linux tin tưởng CA nội bộ đó.
    1. Xin file CA certificate (ví dụ: corp_ca.crt) từ quản trị viên AD.
    2. Copy file đó vào máy chủ Squid.
    3. Thực hiện lệnh (tùy HĐH) để cập nhật kho lưu trữ CA:
      Trên CentOS/RHEL:

      sudo cp corp_ca.crt /etc/pki/ca-trust/source/anchors/
      sudo update-ca-trust

      Trên Ubuntu/Debian:

      sudo cp corp_ca.crt /usr/local/share/ca-certificates/
      sudo update-ca-certificates
    4. Khởi động lại Squid.

Ghi chú nâng cao (Phía Server AD): Hướng dẫn trên giúp bạn import CA đã có. Nếu bạn là quản trị viên AD và chưa có CA nội bộ (hoặc chưa bật LDAPS an toàn), lỗi này là không thể tránh khỏi.

Để tìm hiểu cách cài đặt và phát hành một CA nội bộ để bật LDAPS (Port 636) từ đầu trên Windows Server, hãy xem hướng dẫn: Cấu hình LDAPS (Port 636) trên Windows Server bằng AD CS.

Kết luận

Cloud Computing Security Concept Vector Illustration

Chúc mừng! Bạn vừa hoàn thành việc nâng cấp hệ thống Squid Proxy của mình từ xác thực htpasswd đơn lẻ lên cơ chế xác thực doanh nghiệp, tích hợp Squid với Active Directory.

Giải pháp này không chỉ tăng cường bảo mật bằng cách loại bỏ mật khẩu cleartext và mã hóa giao tiếp LDAP, mà còn đơn giản hóa toàn bộ quy trình quản lý người dùng. Với khảb năng phân quyền chi tiết theo Nhóm AD, bạn đã có trong tay một cổng kết nối Internet mạnh mẽ, an toàn và dễ dàng kiểm toán.

Bước tiếp theo: Đảm bảo tính sẵn sàng cao (HA)

Cấu hình trong bài viết này tạo ra một máy chủ proxy mạnh mẽ, nhưng nó vẫn là một “Điểm lỗi duy nhất” (Single Point of Failure). Nếu máy chủ VPS này gặp sự cố, toàn bộ hệ thống sẽ ngừng hoạt động.

Để xây dựng một hệ thống proxy cấp doanh nghiệp thực thụ, bước tiếp theo là thiết lập cụm HA (High Availability). Mời bạn đọc bài viết: Squid Proxy HA: Hướng dẫn cấu hình Keepalived (Tự động Failover).

Để chạy một proxy xác thực LDAP hiệu suất cao, bạn cần một VPS ổn định với kết nối mạng nhanh. Hãy tham khảo các gói VPS Linux tốc độ cao của chúng tôi hoặc xem qua Checklist 11+ bước quan trọng cần làm ngay sau khi cài đặt Ubuntu 24.04 để tối ưu hóa máy chủ của bạn.

Tài liệu tham khảo

Chia sẻ bài viết:

Đánh giá

0/5 - (0 Bình chọn)

Chưa có đánh giá.