Cấu hình Squid Kerberos Active Directory: Cấu hình SSO loại bỏ pop-up xác thực

Ở 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.

Proxy Server Illustration

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:
    1. Tạo một tài khoản dịch vụ (Service Account) cho Squid (ví dụ: svc_squid).
    2. Tạo Service Principal Name (SPN): setspn -A HTTP/proxy.tenmien.com svc_squid.
    3. Xuất file Keytab bằng ktpass với cờ -crypto ALL.
  • Trên máy chủ Squid (Linux):
    1. Đảm bảo DNS (trỏ về DC) và NTP (đồng bộ thời gian) tuyệt đối chính xác.
    2. Cài đặt samba, winbind, krb5-utils.
    3. Cấu hình /etc/samba/smb.conf/etc/krb5.conf.
    4. Join máy chủ Squid vào domain AD: net ads join -U Administrator.
    5. Sao chép file squid.keytab vào /etc/squid/chmod 400.
  • Trên squid.conf:
    1. Định nghĩa helper negotiate_kerberos_auth (sử dụng file keytab).
    2. Định nghĩa helper ntlm_auth (sử dụng winbind).
    3. Khai báo auth_param negotiateauth_param ntlm.
    4. Tạo ACL proxy_auth REQUIRED và 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

Cryptography and Encryption Concept Vector Illustration

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 htpasswdbasic_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:
    1. Người dùng đăng nhập Windows, máy tính tự động nhận một “vé” (TGT).
    2. 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.
    3. Trình duyệt gửi vé dịch vụ này cho Squid.
    4. 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:
    1. Squid “thách thức” (challenge) trình duyệt.
    2. Trình duyệt dùng thông tin đăng nhập Windows để “phản hồi” (response).
    3. 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à:

  1. Squid ưu tiên yêu cầu xác thực bằng Kerberos trước tiên.
  2. 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.
  3. 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 setspnktpass.

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 ntpdate hoặc chrony và 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).
  • 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:config và thêm FQDN của proxy (ví dụ: proxy.tenmien.com) vào mục network.negotiate-auth.trusted-uris.

Bước 1: Cấu hình trên Active Directory (Tạo SPN và Keytab)

Cyber Security Risk Management Abstract Concept Vector Illustration

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.

  1. Mở Active Directory Users and Computers.
  2. 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”.

Đă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. HTTP phả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.COM viết hoa).
  • -mapuser svc_squid: Ánh xạ principal này với tài khoản svc_squid.
  • -pass [MatKhauCua_svc_squid]: Mật khẩu của svc_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ùng net ads keytab?

Nhiều hướng dẫn đề xuất dùng net ads keytab create trự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ế: msktutil

Ngoài ktpassnet 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áp ktpass + samba sử dụng các công cụ có sẵn.

Bước 2: Chuẩn bị máy chủ Squid (Đã join Domain)

Collaboration Concept Vector Illustration

Đâ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 -uwbinfo -g trả 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 400 nghĩ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/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:

  1. 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òng auth_param basic program basic_ldap_auth... và các ACL liên quan đến ldap_users.
  2. 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.

  1. Xóa ACL cũ: Xóa dòng acl ldap_users proxy_auth REQUIREDhttp_access allow ldap_users (nếu có).
  2. 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)

Computer Troubleshooting Abstract Concept Vector Illustration

Đâ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:
    • about:config vào thanh địa chỉ.
    • Tìm khóa network.negotiate-auth.trusted-uris.
    • Nhập FQDN của proxy (ví dụ: proxy.tenmien.com).

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ài chrony hoặc ntpd để đồng bộ vĩnh viễn.

2. Lỗi: “Keytab entry not found” (trong cache.log)

  • Nguyên nhân: SPN trong squid.conf không khớp với SPN trong file squid.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 ktpass và file squid.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ặc squid) 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 squid

      Sau đó khởi động lại Squid.

    • Kiểm tra lại Winbind: Chạy lại sudo net ads testjoinwbinfo -u (phải thành công).

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

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.com

    Lệ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.com

    Nế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

Cloud Computing Security Concept Vector Illustration

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

Chia sẻ bài viết:

Đánh giá

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

Chưa có đánh giá.