Làm chủ Linux PAM: ‘Gia cố’ mật khẩu và chặn đứng Brute-force cho Server

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Tại sao bạn cần can thiệp sâu vào Linux PAM?

Server của mình từng bị brute-force SSH liên tục. Kết quả là mình phải thức trắng đêm để xử lý sự cố. Từ đó, mình luôn ưu tiên thiết lập PAM ngay khi khởi tạo dự án. Nếu bạn chỉ cài OS rồi để đó, các botnet chỉ mất vài phút để dò ra mật khẩu yếu bằng các bộ từ điển phổ biến.

PAM (Pluggable Authentication Modules) giống như một “người gác cổng” linh hoạt. Nó cho phép chúng ta thay đổi quy tắc xác thực mà không cần can thiệp vào code ứng dụng. Thay vì hy vọng người dùng tự đặt mật khẩu khó, chúng ta sẽ ép hệ thống từ chối mật khẩu yếu. Đồng thời, cơ chế tự động khóa tài khoản và MFA sẽ tạo ra lớp bảo vệ vững chắc.

Để kiểm tra hệ thống, bạn sẽ cần những mật khẩu mẫu có độ phức tạp cao. Mình thường dùng Password Generator của ToolCraft. Công cụ này chạy hoàn toàn dưới client (trình duyệt). Nhờ vậy, mật khẩu không bao giờ bị gửi lên server, đảm bảo an toàn tuyệt đối cho dân kỹ thuật.

1. Ép độ khó mật khẩu với pam_pwquality

Mặc định, Linux khá “dễ dãi” với mật khẩu người dùng. Để thắt chặt, chúng ta cần module pam_pwquality. Nó sẽ kiểm tra độ phức tạp ngay khi bạn gõ lệnh passwd.

Cài đặt thư viện

Trên Ubuntu hoặc Debian, hãy chạy lệnh sau:

sudo apt update && sudo apt install libpam-pwquality -y

Cấu hình chi tiết

Mọi thiết lập chính nằm tại /etc/security/pwquality.conf. Tuy nhiên, để áp dụng cho toàn hệ thống, bạn hãy mở file này:

sudo nano /etc/pam.d/common-password

Tìm dòng pam_pwquality.so và thay thế bằng cấu hình nghiêm ngặt sau:

password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

Dưới đây là ý nghĩa các thông số mình thường áp dụng:

  • retry=3: Nhập sai 3 lần là bị từ chối phiên đổi mật khẩu.
  • minlen=12: Mật khẩu phải dài ít nhất 12 ký tự.
  • difok=3: Phải khác mật khẩu cũ ít nhất 3 ký tự.
  • ucredit, lcredit, dcredit, ocredit=-1: Bắt buộc có đủ chữ hoa, chữ thường, số và ký tự đặc biệt.
  • enforce_for_root: Áp dụng cho cả tài khoản root để tránh chủ quan.

2. Chặn đứng Brute-force bằng pam_faillock

Sau khi có mật khẩu mạnh, bước tiếp theo là chặn các cuộc tấn công dò mật khẩu tự động. pam_faillock là giải pháp hiện đại, thay thế hoàn hảo cho pam_tally2 đã lỗi thời.

Hãy mở file cấu hình xác thực:

sudo nano /etc/pam.d/common-auth

Chèn các dòng sau vào ngay đầu phần cấu hình auth:

auth required pam_faillock.so preauth silent audit deny=5 unlock_time=900
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900

Và thêm dòng này vào cuối file /etc/pam.d/common-account (hoặc cuối file common-auth tùy distro):

account required pam_faillock.so

Cấu hình này cực kỳ hiệu quả. Nếu nhập sai 5 lần (deny=5), tài khoản bị khóa ngay trong 15 phút. Tốc độ dò mật khẩu của bot sẽ bị kéo chậm lại đáng kể, khiến chúng nản lòng và bỏ cuộc.

Bạn có thể kiểm tra danh sách tài khoản bị khóa bằng lệnh:

sudo faillock --user <username>

Nếu đồng nghiệp lỡ tay tự khóa mình, hãy dùng lệnh reset để giải cứu:

sudo faillock --user <username> --reset

3. Thêm lớp MFA cho SSH

Mật khẩu dù mạnh đến đâu vẫn có rủi ro bị lộ qua phishing hoặc keylogger. Thêm xác thực hai yếu tố (MFA) là cách bảo vệ tầng cuối cùng. Google Authenticator là lựa chọn nhanh gọn nhất.

Cài đặt module rất đơn giản:

sudo apt install libpam-google-authenticator -y

Mỗi user cần chạy lệnh google-authenticator để quét mã QR. Sau đó, hãy kích hoạt nó trong PAM. Mở file /etc/pam.d/sshd và thêm dòng sau vào cuối:

auth required pam_google_authenticator.so

Đừng quên sửa file /etc/ssh/sshd_config. Bạn cần đổi KbdInteractiveAuthentication sang yes để SSH yêu cầu nhập mã OTP.

4. Giám sát và công cụ hỗ trợ

Một lưu ý sống còn: Đừng bao giờ đóng session SSH hiện tại khi vừa sửa PAM. Hãy mở một tab mới để thử login. Nếu sai sót, bạn vẫn còn session cũ để sửa sai, tránh bị khóa ngoài server.

Theo dõi log thường xuyên là thói quen tốt của sysadmin:

sudo tail -f /var/log/auth.log

Khi cần cấu hình firewall để chặn các dải IP tấn công, mình thường dùng Subnet Calculator của ToolCraft. Nó giúp tính toán CIDR cực nhanh, tránh nhầm lẫn khi chia subnet cho các rule bảo mật phức tạp.

Ngoài ra, để đảm bảo các file cấu hình PAM không bị chỉnh sửa trái phép, bạn nên tạo checksum. Công cụ Hash Generator sẽ giúp bạn tạo mã băm (SHA-256) cho các file trong /etc/pam.d/ để đối chiếu định kỳ.

Lời kết

Cấu hình PAM đòi hỏi sự tỉ mỉ vì một lỗi nhỏ cũng có thể khiến hệ thống bị cô lập. Tuy nhiên, khi đã làm chủ được nó, server của bạn sẽ trở thành một pháo đài thực sự. Hãy kết hợp mật khẩu mạnh, cơ chế khóa tự động và MFA để yên tâm kê cao gối ngủ mỗi đêm.

Share: