Vấn đề khi quản lý mạng phân tán
Hãy hình dung kịch bản này: bạn quản lý hai mươi switch truy cập doanh nghiệp và năm router biên trải rộng trên hai văn phòng. Nếu chưa áp dụng giải pháp tự động hóa mạng đa thiết bị, mỗi khi có một kỹ sư gia nhập hoặc rời nhóm, bạn phải đăng nhập thủ công vào toàn bộ hai mươi lăm thiết bị để tạo hoặc thu hồi tài khoản người dùng.
Khi ai đó vô tình sửa đổi cấu hình interface hoặc khởi động lại thiết bị ngoài ý muốn trong giờ làm việc, việc truy vết người thực hiện cực kỳ gian nan. Bạn sẽ phải lùng sục trong bộ đệm vòng console cục bộ trước khi lịch sử 100 dòng tự ghi đè lên chính nó.
Lưu trữ tài khoản cục bộ trực tiếp trên từng thiết bị mạng tạo ra những lỗ hổng bảo mật nghiêm trọng:
- Phân mảnh thông tin xác thực: Các tài khoản cũ kỹ vẫn tồn đọng trên switch phụ trong nhiều tháng hoặc nhiều năm sau khi nhân viên đã nghỉ việc.
- Phân cấp truy cập thô sơ: Các mức đặc quyền của Cisco IOS (0, 1 và 15) thiếu tính linh hoạt. Các kỹ sư thường được cấp hẳn quyền privilege 15 tối cao chỉ để chạy các lệnh chẩn đoán interface cơ bản.
- Hoàn toàn không có khả năng kiểm toán: Nếu một thay đổi VLAN trái phép làm sập lưu lượng mạng cốt lõi, bộ đệm vòng syslog hiếm khi ghi lại được chính xác chuỗi lệnh đã nhập trước khi đường truyền bị đứt.
Mô hình AAA tập trung thay đổi hoàn toàn cục diện đó. Tương tự như việc triển khai NetBox làm Single Source of Truth cho toàn bộ hạ tầng, mô hình này biến toàn bộ thiết bị mạng của bạn thành các AAA client xác thực mọi phiên làm việc thông qua một cơ quan định danh duy nhất.
Các khái niệm cốt lõi: Tại sao nên chọn TACACS+ và tac_plus?
Khi bảo mật phần cứng mạng, có hai giao thức chiếm ưu thế: RADIUS và TACACS+ (Terminal Access Controller Access-Control System Plus). Dù cả hai đều xử lý AAA, kiến trúc nội bộ của chúng lại khác biệt rất lớn.
TACACS+ và RADIUS
- Truyền tải & Mã hóa: RADIUS dựa trên UDP (cổng 1812/1813) và chỉ mã hóa mật khẩu người dùng bên trong payload. TACACS+ sử dụng giao thức TCP tin cậy trên cổng 49 và mã hóa toàn bộ phần thân payload, chỉ để lộ phần header 12 byte tối giản trên đường truyền.
- Tách biệt các thành phần AAA: RADIUS gộp chung xác thực (Authentication) và phân quyền (Authorization) trong lần truy cập ban đầu. TACACS+ tách riêng xác thực, phân quyền và ghi chép (Accounting) thành các giao dịch riêng biệt. Việc phân tách này cho phép máy chủ thực thi các kiểm tra phân quyền động ngay trong khi phiên làm việc đang diễn ra.
- Phân quyền trên từng câu lệnh: Khi một kỹ thuật viên mới gõ lệnh
reloadhoặcconfigure terminal, switch sẽ tạm dừng thực thi trong vài mili-giây. Nó gửi truy vấn phân quyền đến daemon TACACS+, đợi phản hồi cho phép (permit) hoặc từ chối (deny), và chặn đứng cú pháp trái phép ngay tại chỗ.
Lọc lệnh theo thời gian thực là vị cứu tinh trong môi trường production. Đội ngũ kỹ thuật sơ cấp vẫn có quyền chỉ đọc cần thiết để xử lý sự cố hàng ngày, trong khi các thay đổi cấu hình nguy hiểm vẫn được khóa chặt an toàn.
Tìm hiểu về Daemon tac_plus
Trên Linux, tac_plus (ban đầu do Cisco phát triển và hiện được duy trì bởi Shrubbery Networks) vẫn là daemon mã nguồn mở tiêu chuẩn. Nó đọc một file cấu hình trực quan, kiểm tra thông tin đăng nhập cục bộ hoặc qua PAM/LDAP, áp dụng các quy tắc phân quyền bằng regex, và ghi log accounting thành một chuỗi kiểm toán văn bản rõ ràng.
Thực hành: Xây dựng TACACS+ Server
Làm theo các bước sau để thiết lập tac_plus trên Ubuntu 22.04/24.04 hoặc Debian 12, sau đó liên kết nó với một switch Cisco IOS trong môi trường network lab của bạn.
Bước 1: Cài đặt tac_plus
Tải gói cài đặt từ kho lưu trữ chính thức của bản phân phối:
sudo apt update
sudo apt install -y tacacs+
Trình cài đặt sẽ đặt file cấu hình chính vào /etc/tacacs+/tac_plus.conf và đăng ký dịch vụ dưới tên tacacs_plus.
Bước 2: Tạo mật khẩu mã hóa
Tuyệt đối không lưu thông tin đăng nhập dạng văn bản thuần túy trong các file cấu hình. Hãy tạo một chuỗi băm mật khẩu salted MD5 hoặc SHA-512 thông qua OpenSSL:
openssl passwd -1 "JuniorSecretPass123"
OpenSSL sẽ xuất ra một chuỗi crypt MD5 dạng như $1$v3rY$s0m3h4sh3dv4lu3h3r3. Hãy sao chép chuỗi băm đó để sử dụng cho khối khai báo người dùng.
Bước 3: Định nghĩa cấu hình máy chủ
Mở file /etc/tacacs+/tac_plus.conf bằng trình soạn thảo yêu thích của bạn:
sudo nano /etc/tacacs+/tac_plus.conf
Thay thế cấu hình mẫu ban đầu bằng cấu hình production dưới đây. Cấu hình này thiết lập hai cấp đặc quyền riêng biệt: netadmin (toàn quyền) và operator (chỉ giới hạn ở ping, traceroute và show):
# Khóa mã hóa chung được chia sẻ giữa Linux và các thiết bị mạng
key = "SuperSecretTacacsKey2026"
# Nơi lưu trữ file log accounting
accounting file = /var/log/tac_plus.acct
# Nhóm: Quản trị viên cấp cao (Toàn quyền truy cập)
group = netadmin {
default service = permit
service = exec {
priv-lvl = 15
}
}
# Nhóm: Kỹ thuật viên vận hành (Chỉ đọc / chẩn đoán giới hạn)
group = operator {
default service = deny
service = exec {
priv-lvl = 1
}
# Cho phép các lệnh chẩn đoán và chỉ đọc an toàn
cmd = show {
permit .*
}
cmd = ping {
permit .*
}
cmd = traceroute {
permit .*
}
cmd = exit {
permit .*
}
# Chặn rõ ràng các thao tác cấu hình và hệ thống
cmd = reload {
deny .*
}
cmd = configure {
deny .*
}
}
# Tài khoản người dùng
user = alex {
member = netadmin
login = des $1$v3rY$adminHashExampleString123
}
user = sam {
member = operator
login = des $1$v3rY$s0m3h4sh3dv4lu3h3r3
}
Bước 4: Kiểm tra cú pháp và khởi chạy dịch vụ
Phát hiện lỗi chính tả trước khi chạy daemon trong môi trường thực tế:
sudo tac_plus -P /etc/tacacs+/tac_plus.conf
Nếu lệnh thực thi mà không báo lỗi cú pháp nào, hãy khởi động và kích hoạt unit systemd:
sudo systemctl restart tacacs_plus
sudo systemctl enable tacacs_plus
sudo systemctl status tacacs_plus
Nếu máy chủ của bạn chạy UFW, hãy chỉ cho phép lưu lượng TCP cổng 49 đến từ mạng con quản trị của bạn (ví dụ: 10.10.0.0/24):
sudo ufw allow from 10.10.0.0/24 to any port 49 proto tcp
sudo ufw reload
Bước 5: Cấu hình Switch / Router mạng (Cisco IOS)
Kết nối tới switch hoặc router Cisco của bạn và chuyển sang chế độ cấu hình. Chúng ta giả định địa chỉ IP của máy chủ Linux là 10.10.0.50:
Switch# configure terminal
! Định nghĩa endpoint máy chủ TACACS+
tacacs server TACACS-LINUX
address ipv4 10.10.0.50
key SuperSecretTacacsKey2026
timeout 5
exit
! Gán máy chủ vào một nhóm server
aaa group server tacacs+ TAC-GROUP
server name TACACS-LINUX
exit
! Kích hoạt hệ thống phụ AAA
aaa new-model
! Xác thực: Dự phòng chuyển sang cơ sở dữ liệu cục bộ nếu TACACS+ mất kết nối
aaa authentication login default group TAC-GROUP local
aaa authentication enable default group TAC-GROUP enable
! Phân quyền: Xác thực shell exec cùng các lệnh thuộc privilege 1 và 15
aaa authorization exec default group TAC-GROUP local
aaa authorization commands 1 default group TAC-GROUP local
aaa authorization commands 15 default group TAC-GROUP local
! Ghi chép (Accounting): Ghi lại kết nối/ngắt kết nối phiên và từng câu lệnh được thực thi
aaa accounting exec default start-stop group TAC-GROUP
aaa accounting commands 1 default start-stop group TAC-GROUP
aaa accounting commands 15 default start-stop group TAC-GROUP
! Cửa sau cục bộ khẩn cấp phòng trường hợp không thể tiếp cận máy chủ
username emergency privilege 15 secret BackupLocalPassword!@#
end
write memory
Bước 6: Kiểm tra quyền hạn và xem lại log Accounting
Hãy giữ nguyên phiên làm việc admin hiện tại để tránh trường hợp bạn vô tình tự khóa mình ra ngoài. Tiếp theo, mở một terminal riêng biệt và SSH vào switch bằng tài khoản operator bị giới hạn quyền:
ssh [email protected]
Kiểm tra ranh giới phân quyền của bạn ngay từ dấu nhắc lệnh của switch:
Switch> show ip interface brief # <-- Thành công
Switch> ping 8.8.8.8 # <-- Thành công
Switch> configure terminal # <-- Thất bại: % Lỗi phân quyền lệnh
Switch> reload # <-- Thất bại: % Lỗi phân quyền lệnh
Quay lại máy chủ Linux và theo dõi trực tiếp file log accounting:
sudo tail -f /var/log/tac_plus.acct
Bất cứ khi nào một kỹ sư thực thi một lệnh, tac_plus sẽ nối thêm một bản ghi kiểm toán phân tách bằng tab:
Mon Oct 20 10:14:22 2026 10.10.0.1 sam tty2 10.10.0.100 stop task_id=42 cmd=show ip interface brief <cr>
Mỗi mục ghi lại mốc thời gian chính xác, IP của switch (10.10.0.1), tên người dùng (sam), terminal của client (tty2), IP máy trạm (10.10.0.100) và chính xác chuỗi CLI đã được gửi.
Lời kết
AAA tập trung giải quyết triệt để sự hỗn loạn trong quản lý thông tin đăng nhập. Với tac_plus, bạn có thể cấp quyền cho các kỹ sư mới chỉ trong vài giây, thực thi nguyên tắc đặc quyền tối thiểu và duy trì nhật ký kiểm toán câu lệnh chống giả mạo trên toàn bộ cấu trúc liên kết mạng. Từ đây, bạn có thể tích hợp PAM để xác thực thông qua Active Directory hoặc FreeIPA, hoặc triển khai một daemon dự phòng thứ hai kết hợp Virtual IP độ sẵn sàng cao với Keepalived để đảm bảo xác thực luôn ổn định trong quá trình bảo trì mạng.

