Mở đầu: Thêm ổ khoá cho cánh cửa SSH
Hãy hình dung server của bạn như một ngôi nhà quý giá, và SSH chính là cánh cửa ra vào. Thông thường, chúng ta chỉ khoá cửa bằng một lớp duy nhất: mật khẩu. Nhưng chuyện gì sẽ xảy ra nếu kẻ gian có được chìa khoá đó (mật khẩu bị lộ), hoặc tệ hơn, chúng đủ kiên nhẫn để thử mọi loại chìa khoá (tấn công brute-force)? Rõ ràng, ngôi nhà của bạn đang gặp nguy hiểm.
Gần đây, khi audit bảo mật cho hơn 10 server, tôi phát hiện một điểm chung đáng báo động: SSH chỉ được bảo vệ bằng mật khẩu. Kể cả khi đó là một mật khẩu siêu phức tạp, nó vẫn chỉ là một chốt chặn duy nhất. Thực tế, các cuộc tấn công brute-force tự động vào SSH diễn ra hàng ngày, hàng giờ trên khắp Internet, âm thầm dò tìm những ‘cánh cửa’ sơ hở như vậy.
Vậy làm sao để gia cố ‘cánh cửa’ này? Câu trả lời chính là thêm một ổ khoá nữa, hay còn gọi là Xác thực hai yếu tố (2FA). Với 2FA, kẻ tấn công sẽ không thể vào được dù có biết mật khẩu của bạn. Chúng sẽ cần thêm yếu tố thứ hai: một mã xác thực ngẫu nhiên từ chiếc điện thoại luôn bên bạn. Bài viết này sẽ hướng dẫn bạn từng bước để xây dựng lớp bảo vệ vững chắc đó.
Những khái niệm chính
Xác thực hai yếu tố (2FA) là gì?
2FA, hay Xác thực hai yếu tố, là một phương thức bảo mật yêu cầu người dùng cung cấp hai loại bằng chứng khác nhau để chứng minh danh tính. Nói một cách đơn giản:
- Yếu tố 1: Cái bạn biết (ví dụ: mật khẩu, mã PIN).
- Yếu tố 2: Cái bạn có (ví dụ: điện thoại, USB token).
Khi đăng nhập SSH với 2FA, bạn sẽ nhập mật khẩu (yếu tố 1), sau đó hệ thống sẽ yêu cầu một mã 6 chữ số từ ứng dụng Authenticator trên điện thoại (yếu tố 2). Bạn chỉ có thể truy cập server khi cung cấp chính xác cả hai thông tin này.
Google Authenticator hoạt động như thế nào?
Google Authenticator sử dụng một thuật toán gọi là Time-based One-Time Password (TOTP). Về cơ bản, nó hoạt động như sau:
- Khi cài đặt, server và ứng dụng trên điện thoại của bạn cùng thống nhất một “mã bí mật” (secret key).
- Cứ mỗi 30 giây, cả server và ứng dụng của bạn đều dùng mã bí mật này cùng với thời gian hiện tại để tạo ra một mã 6 chữ số.
- Vì cả hai đều dùng chung công thức và mã bí mật, kết quả mã 6 số sẽ giống hệt nhau. Khi bạn nhập mã từ điện thoại, server chỉ việc so sánh với mã nó tự tạo ra. Nếu khớp, bạn được đi tiếp.
Điểm cộng lớn là sau khi cài đặt xong, điện thoại của bạn không cần kết nối Internet để tạo mã nữa.
Thực hành chi tiết: Cài đặt 2FA cho SSH trên Ubuntu
Đến phần quan trọng nhất: thực hành! Hướng dẫn này được thực hiện trên Ubuntu 22.04, nhưng bạn hoàn toàn có thể áp dụng cho các phiên bản Ubuntu khác hoặc các hệ điều hành cùng họ Debian.
Bước 1: Cài đặt module Google Authenticator
Đầu tiên, ta cần cài đặt một module PAM (Pluggable Authentication Modules) đặc biệt để hệ thống ‘hiểu’ được cách xác thực của Google Authenticator. Module này có tên là libpam-google-authenticator.
Mở terminal và chạy các lệnh sau:
sudo apt update
sudo apt install libpam-google-authenticator -y
Bước 2: Tạo mã 2FA cho tài khoản của bạn
Lưu ý quan trọng: hãy chạy lệnh này bằng chính tài khoản user bạn muốn bật 2FA, tuyệt đối không dùng tài khoản root.
google-authenticator
Sau khi chạy, terminal sẽ hiển thị một mã QR lớn cùng các thông tin cực kỳ quan trọng. Hãy đọc thật kỹ:

- Mã QR Code: Dùng ứng dụng Google Authenticator (hoặc Authy, Microsoft Authenticator) trên điện thoại để quét mã này.
- Your new secret key: Đây là mã bí mật dạng chữ. Hãy sao lưu mã này và cất vào một nơi cực kỳ an toàn (ví dụ: trình quản lý mật khẩu như 1Password, Bitwarden). Mất mã này và mất điện thoại đồng nghĩa với việc bạn có thể bị khoá trái ngoài server.
- Your verification code is…: Mã 6 số đầu tiên để bạn kiểm tra xem đã cài đúng chưa.
- Your emergency scratch codes: Đây là 5 ‘chìa khoá dự phòng’, mỗi mã chỉ dùng một lần. Hãy lưu chúng vào trình quản lý mật khẩu hoặc in ra giấy cất đi ngay lập tức.
Tiếp theo, chương trình sẽ hỏi bạn vài câu. Bạn nên trả lời theo gợi ý sau để có cấu hình bảo mật tốt nhất:
Do you want me to update your "/home/your_user/.google_authenticator" file? (y/n) <strong>y</strong>
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30 seconds, but
it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) <strong>y</strong>
By default, tokens are good for 30 seconds... (y/n) <strong>n</strong>
Do you want to enable rate-limiting for the authentication module? (y/n) <strong>y</strong>
Bước 3: ‘Bảo’ SSH sử dụng 2FA
Giờ là lúc ‘dạy’ cho dịch vụ SSH biết rằng nó cần hỏi mã 2FA khi có ai đó đăng nhập.
1. Cấu hình PAM cho SSH:
Dùng trình soạn thảo bạn quen thuộc (ví dụ nano) để mở file:
sudo nano /etc/pam.d/sshd
Thêm dòng sau vào ngay trên cùng của file. Việc này đảm bảo yêu cầu 2FA sẽ được thực hiện trước tiên.
auth required pam_google_authenticator.so
2. Cấu hình dịch vụ SSH:
Tiếp theo, mở file cấu hình chính của SSH:
sudo nano /etc/ssh/sshd_config
Tìm đến các dòng ChallengeResponseAuthentication và UsePAM, đảm bảo chúng được đặt thành yes (thay vì no hoặc bị comment bằng dấu #).
ChallengeResponseAuthentication yes
UsePAM yes
ChallengeResponseAuthentication yes: Cho phép SSH hiển thị các câu hỏi “hỏi-đáp” như “Verification code:”.UsePAM yes: Ra lệnh cho SSHD phải tuân theo các quy tắc xác thực đã được định nghĩa trong PAM.
Bước 4: Áp dụng thay đổi
Để áp dụng tất cả các thay đổi, hãy khởi động lại dịch vụ sshd:
sudo systemctl restart sshd
🛑 CẢNH BÁO SỐNG CÒN: Đừng vội đóng cửa sổ terminal hiện tại! Hãy mở một cửa sổ terminal mới và thử SSH lại. Nếu bạn cấu hình sai ở đâu đó, phiên làm việc cũ chính là ‘cứu cánh’ để bạn vào sửa lỗi. Nếu đóng nó, bạn có nguy cơ bị khoá ngoài server mãi mãi.
Bước 5: Trải nghiệm đăng nhập 2FA
Từ một cửa sổ terminal mới, hãy thử SSH vào server. Quy trình đăng nhập bây giờ sẽ có thêm một bước:
$ ssh your_user@your_server_ip
(your_user@your_server_ip) Password: <strong>********</strong>
Verification code: <strong>123456</strong>
Welcome to Ubuntu ...
your_user@your_server:~$
Sau khi nhập mật khẩu, hệ thống sẽ yêu cầu “Verification code”. Bạn chỉ cần mở ứng dụng Authenticator và nhập mã 6 số đang hiển thị. Nếu thành công, chúc mừng bạn đã vào được nhà!
Kết luận
Chúc mừng! Chỉ với vài bước đơn giản, bạn đã trang bị thêm một lớp ‘áo giáp’ cực kỳ vững chắc cho server. Lớp bảo vệ thứ hai này gần như vô hiệu hoá hoàn toàn các cuộc tấn công brute-force tự động. Giờ đây, dù mật khẩu có bị lộ, kẻ xấu cũng không thể chạm vào server của bạn.
Hãy xem việc bật 2FA là một trong những bước đầu tư hiệu quả nhất cho sự an toàn của ‘tài sản số’. Bảo mật là một hành trình không có điểm dừng, và hôm nay, bạn đã có một bước tiến rất dài trên hành trình đó.

