Ở bài viết trước, chúng ta đã thành công tích hợp Squid với Active Directory bằng helper basic_ldap_auth. Giải pháp này giúp quản lý người dùng tập trung thay vì dùng file htpasswd như trong hướng dẫn cài đặt Squid cơ bản.
Tuy nhiên, như chúng ta đã thấy, phương pháp LDAP đó vẫn còn một phiền toái lớn.
Đó chính là cửa sổ pop-up xác thực. Dù đã dùng tài khoản AD, người dùng vẫn phải nhập lại username/password mỗi khi mở trình duyệt. Điều này gây gián đoạn công việc và không phải là một trải nghiệm “liền mạch”.
Bài viết này là bước nâng cấp tối thượng. Chúng ta sẽ giải quyết triệt để vấn đề đó bằng cách cấu hình Squid Kerberos Active Directory.
Mục tiêu của chúng ta là đạt được Single Sign-On (SSO). Tức là, khi người dùng đã đăng nhập vào máy tính Windows (đã join domain), họ có thể truy cập proxy ngay lập tức. Sẽ không còn bất kỳ cửa sổ pop-up nào xuất hiện.
Đối với người dùng cuối, proxy sẽ trở nên hoàn toàn “minh bạch”. Đây là một kỹ thuật nâng cao, nhắm đến các quản trị viên hệ thống (SysAdmin) muốn xây dựng một hệ thống proxy chuyên nghiệp, an toàn và thân thiện nhất trong môi trường doanh nghiệp.
Tóm tắt nhanh (Key Points)
Nếu bạn là một SysAdmin bận rộn, đây là tóm tắt các bước chính:
- Mục tiêu: Kích hoạt Single Sign-On (SSO) cho Squid.
- Công nghệ: Sử dụng Kerberos (chính) và NTLM (dự phòng) thông qua cơ chế Negotiate.
- Trên Active Directory:
- Tạo một tài khoản dịch vụ (Service Account) cho Squid (ví dụ:
svc_squid).- Tạo Service Principal Name (SPN):
setspn -A HTTP/proxy.tenmien.com svc_squid.- Xuất file Keytab bằng
ktpassvới cờ-crypto ALL.- Trên máy chủ Squid (Linux):
- Đảm bảo DNS (trỏ về DC) và NTP (đồng bộ thời gian) tuyệt đối chính xác.
- Cài đặt
samba,winbind,krb5-utils.- Cấu hình
/etc/samba/smb.confvà/etc/krb5.conf.- Join máy chủ Squid vào domain AD:
net ads join -U Administrator.- Sao chép file
squid.keytabvào/etc/squid/vàchmod 400.- Trên
squid.conf:
- Định nghĩa helper
negotiate_kerberos_auth(sử dụng file keytab).- Định nghĩa helper
ntlm_auth(sử dụng winbind).- Khai báo
auth_param negotiatevàauth_param ntlm.- Tạo ACL
proxy_auth REQUIREDvà cho phép truy cập.- Trên Client: Cấu hình Firefox (nếu dùng) để thêm FQDN của proxy vào
network.negotiate-auth.trusted-uris.
So sánh các giao thức: Basic, NTLM, và Kerberos
Trước khi bắt tay vào cấu hình, chúng ta cần hiểu rõ “vũ khí” mình sắp sử dụng. Tại sao Kerberos lại là “tiêu chuẩn vàng” cho SSO?
Trong hai bài viết trước, chúng ta đã tiếp xúc với xác thực Basic (dùng htpasswd và basic_ldap_auth). Điểm yếu chí mạng của nó là gửi thông tin (dù đã mã hóa Base64) gần như là “cleartext” và luôn đòi hỏi pop-up. Để hiểu rõ hơn về các loại proxy, bạn có thể xem bài so sánh SOCKS5 và HTTP Proxy.
Giờ đây, chúng ta tìm hiểu hai giao thức nâng cao hơn.
Kerberos (Hiện đại – Ưu tiên số 1)
- Cơ chế: Hoạt động dựa trên “vé” (tickets) do KDC (Key Distribution Center – chính là Domain Controller) cấp.
- Luồng hoạt động:
- Người dùng đăng nhập Windows, máy tính tự động nhận một “vé” (TGT).
- Khi truy cập proxy, trình duyệt dùng vé đó để yêu cầu một “vé dịch vụ” (service ticket) cho proxy.
- Trình duyệt gửi vé dịch vụ này cho Squid.
- Squid (với file keytab) giải mã vé và xác nhận danh tính.
- Ưu điểm: Cực kỳ bảo mật (chống tấn công replay, mutual authentication), hiệu suất cao (vé được cache lại), và là cơ chế SSO “thực thụ”.
- Nhược điểm: Cấu hình phức tạp. Yêu cầu DNS, đồng bộ thời gian (NTP), và SPN phải chính xác tuyệt đối.
NTLM (Cũ – Phương án dự phòng)
- Cơ chế: Hoạt động dựa trên “thử thách-phản hồi” (Challenge-Response).
- Luồng hoạt động:
- Squid “thách thức” (challenge) trình duyệt.
- Trình duyệt dùng thông tin đăng nhập Windows để “phản hồi” (response).
- Squid (thông qua Winbind) hỏi Domain Controller xem “phản hồi” này có đúng không.
- Ưu điểm: Vẫn cung cấp trải nghiệm SSO (không pop-up). Dễ cấu hình hơn Kerberos một chút.
- Nhược điểm: Kém an toàn hơn Kerberos (dễ bị tấn công “relay”). Đây là công nghệ cũ mà Microsoft đang dần loại bỏ.
Chiến lược của chúng ta: Dùng “Negotiate” (Thương lượng)
Chúng ta sẽ không chọn “hoặc là Kerberos” hoặc là “NTLM”. Chúng ta sẽ cấu hình Squid sử dụng cơ chế Negotiate.
Negotiate là một “trình bao” (wrapper) thông minh. Nó cho phép trình duyệt và máy chủ Squid tự “thương lượng” để chọn ra phương thức tốt nhất mà cả hai cùng hỗ trợ.
Khi cấu hình Negotiate, luồng xử lý sẽ là:
- Squid ưu tiên yêu cầu xác thực bằng Kerberos trước tiên.
- Nếu máy client (ví dụ: máy Windows đã join domain) hỗ trợ, nó sẽ dùng Kerberos. Quá trình hoàn tất.
- Nếu máy client không hỗ trợ Kerberos (ví dụ: máy tính ngoài domain), Squid sẽ tự động chuyển (fallback) sang yêu cầu xác thực bằng NTLM.
Bằng cách này, chúng ta đạt được sự cân bằng hoàn hảo: Bảo mật tối đa (Kerberos) và tương thích tối đa (NTLM).
| Phương thức | Cơ chế hoạt động | Bảo mật | Trải nghiệm (SSO) |
| Basic (LDAP) | Gửi User/Pass (Base64) | Thấp (Cleartext) | Không (Luôn pop-up) |
| NTLM | Thử thách-Phản hồi | Trung bình | Có (SSO) |
| Kerberos | Dựa trên “Vé” (Tickets) | Cao nhất | Có (SSO thực thụ) |
| Negotiate | Ưu tiên Kerberos, dự phòng NTLM | Cao nhất | Có (Linh hoạt nhất) |
Chuẩn bị “chiến trường”: Các yêu cầu bắt buộc (Prerequisites)
Cấu hình Kerberos nổi tiếng là “khó tính”. 90% các lỗi thất bại đều xuất phát từ việc bỏ qua hoặc làm sai các bước chuẩn bị cơ bản này. Hãy đảm bảo bạn kiểm tra kỹ từng mục dưới đây.
Phía Active Directory (DC)
- Tài khoản dịch vụ: Bạn cần một tài khoản AD. Chúng ta sẽ tạo một Service Account riêng, ví dụ:
svc_squid. - Quyền hạn: Bạn cần quyền Administrator (Domain Admin hoặc tương đương) để thực hiện hai việc: chạy lệnh
setspnvàktpass.
Phía máy chủ Squid (Linux)
Đây là phần quan trọng nhất. Máy chủ Linux chạy Squid (Ubuntu/CentOS) bắt buộc phải đáp ứng các yêu cầu sau:
- Phân giải DNS (Cực kỳ quan trọng):
- Máy chủ Squid phải trỏ DNS chính (primary DNS) về máy chủ Active Directory (Domain Controller).
- Nó phải phân giải FQDN (Tên miền đầy đủ) của DC (ví dụ:
ping dc01.tenmien.com). - DC cũng phải phân giải được tên FQDN của máy chủ Squid (ví dụ:
proxy.tenmien.com). Bạn cần tạo bản ghi A (Address) cho nó trong DNS của AD.
- Đồng bộ thời gian (NTP – Cực kỳ quan trọng):
- Kerberos là giao thức nhạy cảm với thời gian. Nếu thời gian trên máy chủ Squid và máy chủ DC lệch nhau quá 5 phút, Kerberos sẽ thất bại ngay lập tức.
- Hãy cài
ntpdatehoặcchronyvà cấu hình máy chủ Squid đồng bộ thời gian (NTP) với Domain Controller. (Việc này tương tự như đồng bộ thời gian trên VPS Windows).
- Hostname FQDN:
- Máy chủ Squid phải được đặt hostname FQDN chính xác (ví dụ:
proxy.tenmien.com).
- Máy chủ Squid phải được đặt hostname FQDN chính xác (ví dụ:
- Gói cài đặt cần thiết:
- Bạn cần cài đặt các gói hỗ trợ việc gia nhập domain và xác thực:
- Trên Ubuntu/Debian:
squid,samba,winbind,krb5-user,libpam-winbind,libnss-winbind. - Trên CentOS/RHEL:
squid,samba,samba-winbind,samba-winbind-clients,krb5-workstation,policycoreutils-python-utils(cho SELinux).
Phía máy trạm (Client)
- Gia nhập Domain: Máy tính của người dùng (chạy Windows 10, 11) phải được gia nhập (join) vào miền Active Directory.
- Cấu hình Trình duyệt:
- IE / Edge / Chrome: Thường tự động hoạt động.
- Firefox: Cần cấu hình thủ công. Bạn phải vào
about:configvà thêm FQDN của proxy (ví dụ:proxy.tenmien.com) vào mụcnetwork.negotiate-auth.trusted-uris.
Bước 1: Cấu hình trên Active Directory (Tạo SPN và Keytab)
Tại bước này, chúng ta cần làm việc trên máy chủ Domain Controller (DC) với quyền Domain Administrator.
Tạo tài khoản dịch vụ (Service Account)
Trước tiên, hãy tạo một tài khoản người dùng bình thường trong Active Directory.
- Mở Active Directory Users and Computers.
- Tạo một user mới, ví dụ:
- User logon name:
svc_squid - Password: Đặt một mật khẩu mạnh và phức tạp.
- Password options: Chọn “Password never expires”.
- User logon name:
Đăng ký Service Principal Name (SPN)
SPN là một định danh duy nhất liên kết một dịch vụ (proxy HTTP) với một tài khoản (svc_squid).
Mở Command Prompt (Admin) trên máy chủ DC và chạy lệnh sau:
setspn -A HTTP/proxy.tenmien.com svc_squid
setspn -A: Thêm một SPN.HTTP/proxy.tenmien.com: Đây là SPN.HTTPphải viết hoa và FQDN phải khớp 100% với tên máy chủ Squid.svc_squid: Tên tài khoản dịch vụ đã tạo.
Tạo file Keytab (Chiếc chìa khóa Kerberos)
File Keytab (Key Table) chứa “mật khẩu” Kerberos cho dịch vụ. Squid sẽ dùng file này để giải mã các “vé” (tickets) mà trình duyệt gửi đến.
Vẫn trong Command Prompt (Admin) trên DC, chạy lệnh ktpass:
ktpass -princ HTTP/[email protected] -mapuser svc_squid \
-pass [MatKhauCua_svc_squid] -crypto ALL -ptype KRB5_NT_PRINCIPAL \
-out C:\temp\squid.keytab
Giải thích lệnh:
-princ HTTP/[email protected]: Principal Name, phải khớp với SPN (lưu ý có@TENMIEN.COMviết hoa).-mapuser svc_squid: Ánh xạ principal này với tài khoảnsvc_squid.-pass [MatKhauCua_svc_squid]: Mật khẩu củasvc_squid. (Dùng * thay cho mật khẩu để được hỏi an toàn).-crypto ALL: Đây là tham số quan trọng nhất. Nó đảm bảo keytab chứa nhiều loại mã hóa (AES, RC4…), giúp tương thích với mọi phiên bản AD, kể cả cũ và mới.-out C:\temp\squid.keytab: Xuất file keytab.
Ghi chú kỹ thuật: Tại sao dùng
ktpass(với Service Account) mà không dùngnet ads keytab?Nhiều hướng dẫn đề xuất dùng
net ads keytab createtrực tiếp trên Linux. Tuy nhiên, phương pháp đó gắn keytab với tài khoản máy tính (computer account) của máy chủ Squid.Vấn đề là khi chạy
winbind(như chúng ta đang làm để hỗ trợ NTLM fallback), Samba có thể tự động thay đổi mật khẩu tài khoản máy tính định kỳ. Việc này sẽ làm hỏng (invalidate) file keytab của bạn, gây lỗi xác thực.Bằng cách dùng
ktpassđể gắn SPN với một tài khoản dịch vụ (Service Account) có mật khẩu không hết hạn, chúng ta đảm bảo file keytab luôn hợp lệ và hệ thống chạy ổn định.
Di chuyển file Keytab
Bây giờ bạn đã có file squid.keytab. Hãy sao chép file này một cách an toàn (ví dụ: dùng WinSCP hoặc scp) từ máy chủ DC sang máy chủ Squid (Linux) và đặt nó vào thư mục /etc/squid/.
Ghi chú về công cụ thay thế:
msktutilNgoài
ktpassvànet ads, Squid Wiki cũng đề cập đến một công cụ mạnh mẽ tên làmsktutil. Công cụ này có thể chạy trên Linux, cho phép bạn tạo/quản lý tài khoản máy tính, SPN và keytab trực tiếp từ máy chủ Squid. Tuy nhiên, nó thường là gói cài đặt bên thứ ba, trong khi phương phápktpass+sambasử dụng các công cụ có sẵn.
Bước 2: Chuẩn bị máy chủ Squid (Đã join Domain)
Đây là bước then chốt. Toàn bộ cơ chế xác thực NTLM (fallback) và Kerberos (SSO) yêu cầu máy chủ Squid (Linux) phải là một thành viên của Active Directory.
Bài viết này giả định rằng VPS Linux của bạn đã được join vào Active Directory thành công.
Yêu cầu bắt buộc: Nếu bạn chưa thực hiện bước này, vui lòng dừng lại và làm theo hướng dẫn chi tiết tại bài viết mới của chúng tôi:
Cách join VPS Linux vào Active Directory (Ubuntu, CentOS)
Hãy đảm bảo bạn thực hiện đến khi các lệnh kiểm tra
wbinfo -uvàwbinfo -gtrả về kết quả thành công.
Sau khi đã join domain, công việc duy nhất còn lại trên máy chủ Linux (trước khi cấu hình squid.conf) là bảo mật file keytab mà bạn đã sao chép ở Bước 1.
Bảo mật file Keytab
File squid.keytab bạn đã sao chép vào /etc/squid/ chứa thông tin cực kỳ nhạy cảm. Chúng ta cần cấp quyền cho user squid (hoặc proxy) để đọc nó và cấm mọi user khác.
Trên Ubuntu (user là proxy):
sudo chown proxy:proxy /etc/squid/squid.keytab
sudo chmod 400 /etc/squid/squid.keytab
Trên CentOS (user là squid):
sudo chown squid:squid /etc/squid/squid.keytab
sudo chmod 400 /etc/squid/squid.keytab
- Lệnh
chmod 400nghĩa là chỉ chủ sở hữu mới có quyền đọc.
Sau khi file keytab đã được bảo mật và máy chủ đã join domain, chúng ta đã sẵn sàng cho bước cuối cùng.
Bước 3: Cấu hình squid.conf – Trái tim của hệ thống
Chúng ta sẽ “lắp ráp” mọi thứ (AD, Keytab, Winbind) vào file cấu hình của Squid.
Tìm đường dẫn Helper
Trước khi chỉnh sửa, bạn phải biết đường dẫn chính xác đến các helper.
find / -name negotiate_kerberos_auth
find / -name ntlm_auth
Hãy ghi lại hai đường dẫn bạn tìm thấy (ví dụ: /usr/lib/squid/negotiate_kerberos_auth và /usr/bin/ntlm_auth).
Chỉnh sửa file squid.conf
Mở file cấu hình chính của Squid:
sudo nano /etc/squid/squid.conf
Việc cần làm:
- Vô hiệu hóa cấu hình cũ: Tìm và xóa (hoặc thêm dấu
#) toàn bộ các dòngauth_param basic program basic_ldap_auth...và các ACL liên quan đếnldap_users. - Thêm cấu hình mới: Thêm toàn bộ khối cấu hình dưới đây vào gần đầu file.
# --- CAU HINH XAC THUC SSO (KERBEROS + NTLM) ---
# 1. Helper Kerberos (Uu tien so 1)
# (Thay dung duong dan helper va FQDN cua ban)
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -k /etc/squid/squid.keytab -s HTTP/[email protected]
auth_param negotiate children 20 startup=5 idle=1
auth_param negotiate keep_alive on
# 2. Helper NTLM (Phuong an du phong)
# (Thay dung duong dan helper 'ntlm_auth' cua ban)
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 20 startup=5 idle=1
auth_param ntlm keep_alive on
# 3. Thong diep Realm (Hien thi khi gap su co hoac client khong ho tro)
auth_param basic realm Vui long nhap tai khoan Cong ty (AD)
auth_param basic credentialsttl 2 hours
# --- KET THUC CAU HINH SSO ---
Giải thích:
auth_param negotiate program ...: Đây là “vũ khí” chính (Kerberos).-k /etc/squid/squid.keytab: Chỉ cho Squid biết dùng file keytab nào.-s HTTP/[email protected]: Chỉ cho Squid biết SPN (danh tính) của nó. Phải khớp 100% với SPN bạn tạo trên DC.
auth_param ntlm program ...: Đây là phương án dự phòng (NTLM fallback) thông qua Winbind.auth_param basic realm ...: Dòng này vẫn cần thiết, nó dùng để hiển thị pop-up trong trường hợp “bất khả kháng” (client không join domain).
Cập nhật Access Control Lists (ACLs)
Cuối cùng, chúng ta cần cập nhật ACL để sử dụng cơ chế xác thực mới này. Tìm đến khu vực http_access trong file squid.conf.
- Xóa ACL cũ: Xóa dòng
acl ldap_users proxy_auth REQUIREDvàhttp_access allow ldap_users(nếu có). - Thêm ACL mới: Thêm 2 dòng sau NGAY TRƯỚC dòng
http_access deny all.
# --- Ap dung ACL cho xac thuc SSO ---
# Tao mot ACL ten 'sso_auth' yeu cau xac thuc
# (REQUIRED se tu dong dung bat ky co che nao co san: Negotiate, NTLM)
acl sso_auth proxy_auth REQUIRED
# Cho phep nhung ai da xac thuc thanh cong
http_access allow sso_auth
# --- Ket thuc ACL ---
# Dong nay PHAI LUON nam o cuoi cung
http_access deny all
Lưu file squid.conf và thoát.
Bước 4: Kiểm tra và gỡ lỗi (Troubleshooting)
Đây là bước quyết định. Việc gỡ lỗi Kerberos có thể phức tạp, vì vậy hãy kiểm tra từng bước một. Nếu bạn gặp các lỗi kết nối chung như “Connection Refused”, 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.
Khởi động lại và kiểm tra cú pháp
Đầu tiên, hãy kiểm tra file squid.conf xem có lỗi cú pháp nào không.
sudo squid -k parse
Nếu lệnh này “im lặng” (không báo lỗi), hãy khởi động lại Squid:
sudo systemctl restart squid
Kiểm tra phía Client (Trải nghiệm người dùng)
Hãy đến một máy tính Windows đã gia nhập domain và đăng nhập bằng tài khoản AD của bạn.
1. Cấu hình trình duyệt (Chỉ cần cho Firefox):
- IE, Edge, Chrome: Tự động hoạt động.
- Firefox: Bạn phải cấu hình thủ công:
- Gõ
about:configvào thanh địa chỉ. - Tìm khóa
network.negotiate-auth.trusted-uris. - Nhập FQDN của proxy (ví dụ:
proxy.tenmien.com).
- Gõ
2. Thử nghiệm:
Mở trình duyệt và truy cập một trang web bên ngoài.
- Thành công: Trang web tải ngay lập tức. Không có bất kỳ pop-up xác thực nào hiện ra.
- Thất bại: Một cửa sổ pop-up vẫn hiện lên.
Kiểm tra phía Server (Đọc Logs)
Nếu bạn truy cập web thành công, hãy kiểm tra access.log để chắc chắn:
sudo tail -f /var/log/squid/access.log
Bạn sẽ thấy tên người dùng (ví dụ: TENMIEN\username hoặc [email protected]) trong log, xác nhận SSO đã hoạt động.
Nếu có lỗi, hãy kiểm tra cache.log để xem thông báo chi tiết:
sudo tail -f /var/log/squid/cache.log
Các lỗi thường gặp và cách khắc phục
Nếu pop-up vẫn xuất hiện (Lỗi 407 Proxy Authentication Required), đây là checklist gỡ lỗi:
1. Lỗi: “Time skew too great” (trong cache.log)
- Nguyên nhân: Lỗi phổ biến nhất. Thời gian trên máy chủ Squid và DC lệch nhau quá 5 phút.
- Giải pháp: Chạy
sudo ntpdate dc01.tenmien.comđể đồng bộ. Càichronyhoặcntpdđể đồng bộ vĩnh viễn.
2. Lỗi: “Keytab entry not found” (trong cache.log)
- Nguyên nhân: SPN trong
squid.confkhông khớp với SPN trong filesquid.keytab. - Giải pháp: Kiểm tra lại 100% từng chữ cái (hoa/thường) của FQDN và REALM trong lệnh
ktpassvà filesquid.conf.
3. Lỗi: Pop-up vẫn hiện (NTLM Fallback thất bại)
- Nguyên nhân: Kerberos thất bại, và khi Squid cố dùng NTLM, Winbind cũng lỗi.
- Giải pháp:
- Kiểm tra quyền Winbind (Rất phổ biến): User
proxy(hoặcsquid) cần quyền đọc “pipe” của winbind.# Tren Ubuntu: sudo usermod -a -G winbindd_priv proxy # Tren CentOS: sudo usermod -a -G winbindd_priv squidSau đó khởi động lại Squid.
- Kiểm tra lại Winbind: Chạy lại
sudo net ads testjoinvàwbinfo -u(phải thành công).
- Kiểm tra quyền Winbind (Rất phổ biến): User
4. Lỗi: SELinux (Chỉ trên CentOS/RHEL)
- Nguyên nhân: SELinux cấm Squid ghi vào thư mục cache (nếu bạn đổi thư mục) hoặc kết nối mạng LDAP/Kerberos.
- Giải pháp:
- Cho phép Squid kết nối mạng:
sudo setsebool -P squid_connect_any 1 - Nếu bạn đổi thư mục cache (ví dụ:
/cache/squid):sudo semanage fcontext -a -t squid_cache_t "/cache/squid(/.*)?" sudo restorecon -Rv /cache/squid
- Cho phép Squid kết nối mạng:
Lệnh gỡ lỗi chuyên sâu
- Kiểm tra từ Client (Terminal):
curl -v --proxy-negotiate -u : -x "http://proxy.tenmien.com:3128" http://example.comLệnh này sẽ cố gắng xác thực Kerberos/Negotiate.
- Kiểm tra Helper trên Server:
# (Thay dung duong dan helper va FQDN) /usr/lib/squid/negotiate_kerberos_auth_test proxy.tenmien.comNếu helper trả về một “token” dài, nghĩa là nó đã đọc keytab thành công.
Nâng cao: Phân quyền truy cập theo Nhóm (Group) Active Directory
Sau khi đã cấu hình SSO thành công, bạn có thể phân quyền chi tiết dựa trên nhóm AD.
Tìm Helper kiểm tra nhóm
find / -name ext_wbinfo_group_acl
Giả sử tìm thấy ở /usr/bin/ext_wbinfo_group_acl.
Cấu hình squid.conf
Mở lại squid.conf và thêm vào bên dưới khối auth_param:
# --- KHAI BAO HELPER KIEM TRA NHOM AD (QUA WINBIND) ---
external_acl_type AD_Group_Check %LOGIN /usr/bin/ext_wbinfo_group_acl
Sau đó, áp dụng các ACL này trong khu vực http_access (trước dòng http_access allow sso_auth):
# --- Dinh nghia ACL Nhom AD ---
acl IT_Admins external AD_Group_Check "IT-Admins"
acl Interns external AD_Group_Check "Interns"
# (Gia su ban da co acl 'blocked_sites' tu bai truoc)
acl blocked_sites dstdomain "/etc/squid/blocked_sites.txt"
# --- Ap dung quy tac ---
# 1. Chan nhom "Interns" truy cap cac trang blocked_sites
http_access deny Interns blocked_sites
# (Cac quy tac khac...)
# --- Cac quy tac cu van giu nguyen ---
acl sso_auth proxy_auth REQUIRED
http_access allow sso_auth
# Dong nay PHAI LUON nam o cuoi cung
http_access deny all
Khởi động lại Squid, và giờ đây bạn đã có hệ thống phân quyền theo nhóm AD.
Nâng cao: Tối ưu hiệu năng (Giảm tải CPU)
Kerberos sử dụng “replay cache” để ngăn chặn các cuộc tấn công phát lại (replay attacks). Tuy nhiên, trên các máy chủ proxy có lưu lượng truy cập cực lớn, việc kiểm tra cache này có thể gây tải CPU cao, tương tự như hiện tượng VPS Linux CPU 100%.
Nếu bạn ưu tiên hiệu năng hơn là mức độ bảo mật replay (vốn rủi ro thấp trong 5 phút), bạn có thể tắt nó đi.
Tạo (hoặc chỉnh sửa) file /etc/environment và thêm dòng sau:
KRB5RCACHETYPE=none
Hoặc, thêm vào script khởi động của Squid:
export KRB5RCACHETYPE=none
Bạn sẽ cần khởi động lại máy chủ (nếu sửa /etc/environment) hoặc khởi động lại dịch vụ Squid để áp dụng.
Kết luận
Chúc mừng! Bạn vừa hoàn thành một trong những cấu hình phức tạp nhưng giá trị nhất của Squid Proxy.
Bằng cách hoàn tất cấu hình Squid Kerberos Active Directory, bạn đã nâng cấp hệ thống của mình lên một giải pháp “hoàn hảo” cho doanh nghiệp:
- Loại bỏ hoàn toàn pop-up xác thực phiền toái.
- Kích hoạt Single Sign-On (SSO), mang lại trải nghiệm “minh bạch” cho người dùng.
- Tăng cường bảo mật lên mức cao nhất với Kerberos.
- Sử dụng NTLM làm phương án dự phòng (fallback) linh hoạt.
- Kiểm soát truy cập chi tiết đến từng nhóm Active Directory.
Đây là thiết lập proxy chuyên nghiệp, an toàn và thân thiện nhất mà bạn có thể triển khai trong môi trường Windows.
Việc thiết lập một hệ thống mạnh mẽ như vậy đòi hỏi một nền tảng VPS ổn định, hiệu suất cao. Nếu bạn cần một máy chủ đáng tin cậy, hãy tham khảo các gói VPS nước ngoài và VPS Việt Nam chất lượng cao của chúng tôi.
Tài liệu tham khảo
- Configuring a Squid Server to authenticate against Kerberos | Squid Web Cache wiki
- Configuring Squid for NTLM with Winbind authenticators | Squid Web Cache wiki
- Service principal names – Win32 apps | Microsoft Learn
- 16.3. Setting up Squid as a Caching Proxy With Kerberos Authentication | Networking Guide | Red Hat Enterprise Linux | 7 | Red Hat Documentation






