ducthxnh
Intern
VI.4 Cấu hình xác định người dùng bằng việc tính hợp với AD (Active Directory) hoặc Captive Portal kết hợp với MFA
***Lưu ý trước khi làm lab thì nên đồng bộ tất cả thiết bị có chung 1 mốc thời gian, vì xác thực MFA cần gửi mã khớp với thời gian đồng bộ cùng lúc của tất cả thiết bị trong mô hình mạngTích hợp Active Directory (User-ID) và Đa yếu tố (MFA) qua RADIUS / privacyIDEA
Multi-Factor Authentication, viết tắt là MFA, là cơ chế xác thực yêu cầu người dùng cung cấp từ hai yếu tố xác thực trở lên trước khi được phép truy cập hệ thống.
Trong bài Lab này, người dùng phải nhập:
- Tài khoản Active Directory.
- Mật khẩu Active Directory + Mã OTP được sinh từ ứng dụng Microsoft Authenticator hoặc Google Authenticator.
Trong mô hình này, privacyIDEA đóng vai trò quản lý OTP Token và tích hợp với Active Directory thông qua LDAP Resolver.
FreeRADIUS hoạt động như RADIUS Server nhận yêu cầu xác thực từ Palo Alto, sau đó chuyển tiếp yêu cầu tới privacyIDEA thông qua REST API để kiểm tra mật khẩu Active Directory kết hợp mã OTP.
Sau khi người dùng xác thực thành công, Palo Alto vừa nhận diện được danh tính người dùng thông qua User-ID, vừa bảo đảm người dùng đã vượt qua bước xác thực đa yếu tố trước khi áp dụng Security Policy.
***Nối thêm 1 máy Linux Ubuntu đặt ip là 192.168.20.20/24 để cài xác thực MFA trên đây
Mô hình lab gồm firewall Palo Alto làm trung tâm định tuyến/kiểm soát truy cập giữa 3 vùng: trust (mạng nội bộ 192.168.10.0/24), dmz (chứa Active Directory / MFA server, 192.168.20.0/24) và untrust (kết nối ra Internet). Máy quản trị (WebUI) kết nối qua cổng mgmt.
Tích hợp User-ID với Active Directory
Mục tiêu của phần này là cấu hình Palo Alto nhận diện được người dùng đang sử dụng từng địa chỉ IP trong mạng, dựa trên thông tin đăng nhập domain được ghi nhận trên Active Directory.
LDAP Server Profile
Tạo LDAP Server Profile trỏ về Domain Controller (192.168.20.10) để Palo Alto có thể truy vấn thông tin người dùng/nhóm trong Active Directory.
Group Mapping
Cấu hình Group Mapping để Palo Alto đồng bộ danh sách nhóm và thành viên từ Active Directory, phục vụ việc xây dựng Security Policy theo nhóm người dùng (lab\pa-users, lab\hr, lab\it).
User-ID Agent — Server Monitor
Cấu hình tài khoản dịch vụ (svcuserid) để User-ID Agent tích hợp sẵn trên Palo Alto có quyền đọc Security Event Log trên Domain Controller, từ đó dựng bảng ánh xạ IP-to-User theo thời gian thực.
Kết quả kết nối Server Monitoring
Sau khi cấu hình, trạng thái giám sát Active Directory hiển thị Connected, xác nhận Palo Alto đã kết nối thành công tới Domain Controller.
Danh sách người dùng trên Active Directory
Các tài khoản người dùng và nhóm bảo mật (PA-Users, svc-userid, user01, user02) được tạo sẵn trên Active Directory Users and Computers, phục vụ cho việc test ánh xạ người dùng và phân quyền theo nhóm.
Cấp quyền truy cập Internet và khắc phục sự cố DNS
Trong quá trình triển khai, hệ thống gặp sự cố các máy trạm ở vùng trust và máy chủ ở vùng dmz không phân giải được tên miền / không truy cập được Internet. Nguyên nhân được xác định là do máy chủ AD (đóng vai trò DNS server) chưa có Forwarder hợp lệ ra ngoài Internet, dẫn đến bản thân DNS server cũng không tự phân giải được tên miền ngoài.
Sau khi bổ sung Security Policy và NAT cho vùng dmz ra Internet, đồng thời cấu hình lại Forwarders trên DNS server, việc phân giải tên miền đã hoạt động bình thường.
Security Policy
Bổ sung các rule cho phép lưu lượng theo nhóm người dùng (HR, IT), theo vùng (DMZ-to-Trust, Trust-to-DMZ) và cho phép DMZ ra Internet (Allow-DMZ-to-Net).
NAT
Cấu hình NAT dynamic-ip-and-port (SNAT-Internet) cho phép các vùng trust và dmz chuyển đổi địa chỉ nguồn khi đi ra Internet qua cổng ethernet1/1.
Triển khai máy chủ MFA — privacyIDEA
Máy chủ Ubuntu Linux (192.168.20.20) được triển khai làm máy chủ MFA, sử dụng privacyIDEA làm hệ thống quản lý OTP Token và tích hợp trực tiếp với Active Directory thông qua LDAP Resolver.
privacyIDEA + FreeRADIUS tích hợp Active Directory, dùng cho Captive Portal MFA trên Palo Alto
Máy chủ: Ubuntu Linux — IP 192.168.20.20/24 (vùng dmz) Active Directory: lab.local — DC 192.168.20.10
(Dưới đây là hướng dẫn bao quát)
#Khắc phục repo APT (bản Ubuntu đã hết hỗ trợ / EOL)
sudo sed -i 's/us.archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
sudo apt update
#Cài đặt các gói cần thiết
sudo apt install -y apache2 libapache2-mod-wsgi-py3 python3-pip python3-venv \ mariadb-server freeradius freeradius-utils
sudo pip3 install privacyidea
#Khởi tạo cơ sở dữ liệu MariaDB
sudo mysql_secure_installation
#Tạo database và user riêng cho privacyIDEA:
sudo mysql -u root -p
#sql
CREATE DATABASE pi;
CREATE USER 'pi'@'localhost' IDENTIFIED BY 'MatKhauManh123';
GRANT ALL PRIVILEGES ON pi.* TO 'pi'@'localhost';
FLUSH PRIVILEGES;
EXIT;
#Tạo file cấu hình privacyIDEA
sudo mkdir -p /etc/privacyidea
sudo nano /etc/privacyidea/pi.cfg
#Nội dung file /etc/privacyidea/pi.cfg:
***Lưu ý: nếu mật khẩu MariaDB chứa ký tự đặc biệt (ví dụ @), phải encode thành %40 trong chuỗi SQLALCHEMY_DATABASE_URI.
import os
PI_PEPPER = 'yoursecretpepperstring'
SECRET_KEY = 'yoursecretkeystring'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://pi:MatKhauManh123@localhost/pi'
SQLALCHEMY_TRACK_MODIFICATIONS = False
PI_ENCFILE = '/etc/privacyidea/enckey'
PI_AUDIT_KEY_PRIVATE = '/etc/privacyidea/private.pem'
PI_AUDIT_KEY_PUBLIC = '/etc/privacyidea/public.pem'
PI_LOGFILE = '/var/log/privacyidea/privacyidea.log'
#Thiết lập biến môi trường và thư mục log:
export PRIVACYIDEA_CONFIGFILE=/etc/privacyidea/pi.cfg
sudo mkdir -p /var/log/privacyidea
sudo chown -R www-data:www-data /var/log/privacyidea
#Khởi tạo khoá mã hoá, cơ sở dữ liệu, tài khoản quản trị
sudo -E pi-manage create_enckey
sudo -E pi-manage create_audit_keys
sudo -E pi-manage createdb
sudo -E pi-manage admin add admin -e admin@lab.local
#Kiểm tra tài khoản quản trị:
sudo -E pi-manage admin list
#Cấu hình Apache chạy privacyIDEA (WSGI)
sudo nano /etc/privacyidea/privacyideaapp.wsgi
#Nội dung file /etc/privacyidea/privacyideaapp.wsgi:
import sys
import os
sys.path.insert(0, "/etc/privacyidea")
os.environ["PRIVACYIDEA_CONFIGFILE"] = "/etc/privacyidea/pi.cfg"
from privacyidea.app import create_app
application = create_app(config_name="production")
#Tạo Virtual Host:
sudo nano /etc/apache2/sites-available/privacyidea.conf
#Nội dung file /etc/apache2/sites-available/privacyidea.conf:
<VirtualHost *:80>
ServerName privacyidea.lab.local
WSGIDaemonProcess privacyidea processes=1 threads=15 user=www-data group=www-data
WSGIScriptAlias / /etc/privacyidea/privacyideaapp.wsgi
<Directory /etc/privacyidea>
WSGIProcessGroup privacyidea
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/privacyidea_error.log
CustomLog ${APACHE_LOG_DIR}/privacyidea_access.log combined
</VirtualHost>
#Gán quyền, tắt site mặc định, bật site privacyIDEA:
sudo chown -R www-data:www-data /etc/privacyidea
sudo a2dissite 000-default.conf
sudo a2ensite privacyidea.conf
sudo a2enmod wsgi
sudo apache2ctl configtest
sudo systemctl restart apache2
sudo systemctl status apache2
#Truy cập kiểm tra: http://192.168.20.20/ → phải hiện trang đăng nhập privacyIDEA.
#Cấu hình LDAP Resolver, Realm, Token (thực hiện trên giao diện web)
**Đăng nhập http://192.168.20.20 bằng tài khoản admin vừa tạo (vào bằng bất kì máy nào ping được dmz, win server trong vùng cũng được)
Config → Users → New Ldapresolver
- Resolver name: AD-Resolver
- Server URI: ldap://192.168.20.10
- Base DN: dc=lab,dc=local
- Bind DN: svcuserid@lab.local
- Dùng nút Preset Active Directory để tự điền các thuộc tính chuẩn
- Bấm Test LDAP Resolver để xác nhận (kết quả: tìm thấy user objects)
Tokens → Enroll Token → chọn TOTP, gán cho user (vd test1) → quét QR bằng Microsoft/Google Authenticator
Kiểm tra token: vào chi tiết token → nhập OTP → Test OTP only
#Tích hợp FreeRADIUS với privacyIDEA (module REST)
#Cài module REST: sudo apt install -y freeradius-rest
#Cấu hình module: sudo nano /etc/freeradius/3.0/mods-available/rest
#Thêm vào cuối file:
rest privacyidea {
connect_uri = "http://127.0.0.1/validate/check"
authenticate {
uri = "${..connect_uri}"
method = 'post'
body = 'post'
data = 'user=%{User-Name}&pass=%{User-Password}'
}
}
#Kích hoạt module:
sudo ln -s /etc/freeradius/3.0/mods-available/rest /etc/freeradius/3.0/mods-enabled/rest
#Sửa site default
sudo nano /etc/freeradius/3.0/sites-enabled/default
#Trong block authorize { ... }, thêm gần cuối block:
update control {
Auth-Type := REST
}
#Trong block authenticate { ... }, thêm:
Auth-Type REST {
privacyidea
}
***Tên privacyidea trong block authenticate phải khớp với tên instance đã khai báo ở bước cấu hình module (rest privacyidea { ... }) — nếu chỉ ghi rest, FreeRADIUS sẽ gọi module rest mặc định thay vì instance trỏ tới privacyIDEA.
#Khai báo Palo Alto làm RADIUS Client:
sudo nano /etc/freeradius/3.0/clients.conf
#Thêm vào cuối file:
client palo-alto {
ipaddr = 192.168.20.1
secret = Lab@2026Secret
}
#Kiểm thử FreeRADIUS
Chạy debug mode:
sudo systemctl stop freeradius
sudo freeradius -X
Mở terminal khác, test bằng radtest (lấy OTP hiện tại từ Authenticator):
radtest test1 <mat_khau_AD_hoac_OTP> localhost 0 testing123
Kết quả mong đợi: Received Access-Accept - Nếu sai thì xem lại nhé
#Dừng debug (Ctrl+C), đưa dịch vụ vào chạy chính thức:
sudo systemctl start freeradius
sudo systemctl enable freeradius
sudo systemctl status freeradius
Kết nối LDAP Resolver tới Active Directory
Tạo LDAP Resolver trong privacyIDEA trỏ về Domain Controller (192.168.20.10), sử dụng preset Active Directory để tự động cấu hình các thuộc tính chuẩn (sAMAccountName, Search Filter, UID Type). Kết quả kiểm tra kết nối xác nhận tìm thấy 8 user object trong domain.
. Realm và danh sách người dùng
Sau khi tạo Realm "lab" gắn với LDAP Resolver, danh sách người dùng Active Directory (test1, user01, user02, svcuserid, Administrator...) hiển thị đầy đủ trong privacyIDEA.
Đăng ký OTP Token (TOTP)
Đăng ký Token loại TOTP cho người dùng test1, sinh mã QR Code để quét bằng ứng dụng Microsoft Authenticator trên điện thoại.
Kiểm tra hoạt động của Token
Thực hiện kiểm tra mã OTP sinh ra từ ứng dụng Authenticator ngay trên giao diện quản trị privacyIDEA, kết quả xác thực thành công.
Tích hợp FreeRADIUS với privacyIDEA
FreeRADIUS được cài đặt trên cùng máy chủ Ubuntu, đóng vai trò RADIUS Server nhận yêu cầu xác thực từ Palo Alto và chuyển tiếp (qua module REST) đến API /validate/check của privacyIDEA để xác thực mật khẩu Active Directory kết hợp mã OTP (cơ chế Concatenation).
Kết quả kiểm thử bằng công cụ radtest xác nhận FreeRADIUS trả về Access-Accept khi xác thực đúng tài khoản và mã OTP.
Dịch vụ FreeRADIUS được cấu hình chạy nền ổn định (active/running) và tự khởi động cùng hệ thống.
Cấu hình xác thực trên Palo Alto
RADIUS Server Profile
Tạo RADIUS Server Profile (privacyIDEA-RADIUS) trên Palo Alto trỏ về máy chủ FreeRADIUS (192.168.20.20, cổng 1812), sử dụng giao thức xác thực PAP — phù hợp với cơ chế xác thực bằng mã OTP động.
Authentication Enforcement
Tạo đối tượng Authentication Enforcement (Enforce-RADIUS-MFA) với phương thức Web Form, sử dụng Authentication Profile RADIUS đã tạo, làm cơ sở áp dụng cho Authentication Policy và Captive Portal.
Security Policy cho người dùng đã xác thực
Bổ sung Security Policy (CaptivePortal_Policy) cho phép người dùng đã được xác thực qua Captive Portal (known-user) truy cập ra Internet, đặt ở vị trí ưu tiên cao nhất.
. Kết quả kiểm thử tổng thể
Sau khi hoàn tất cấu hình, các người dùng test1, user01, user02 đăng nhập qua Captive Portal bằng mật khẩu Active Directory kết hợp mã OTP đều xác thực thành công qua RADIUS (privacyIDEA-RADIUS, giao thức PAP).
Sau khi xác thực, lưu lượng của người dùng được Security Policy CaptivePortal_Policy cho phép truy cập ra ngoài, thể hiện qua log Traffic với Action = allow.
Cách nhập khi đăng nhập Captive Portal
Username : là tài khoản AD hoặc localuser
Password: Mật khẩu Active Directory + mã OTP 6 số hiện tại từ Authenticator, viết liền nhau, không có khoảng trắng hay ký tự phân cách
Đính kèm
Bài viết liên quan
Được quan tâm
Bài viết mới