Hướng dẫn cấu hình Bastion Host trên VPS để quản lý SSH tập trung cho cụm server (2026)
Chào anh em, nếu đang quản lý một cụm vài chục VPS để chạy automation, xử lý dữ liệu mạng lưới hoặc triển khai ứng dụng, chắc hẳn anh em không lạ gì cảnh mở file auth.log ra và thấy nghẹt cứng hàng ngàn dòng cảnh báo lỗi dò pass từ các IP lạ. Việc gán IP Public và mở cổng 22 (SSH) ra mạng Internet cho từng máy chủ giống như việc xây một căn nhà nhiều cửa nhưng lại dùng những ổ khóa lỏng lẻo. Các hệ thống botnet rà quét liên tục, IP bị đưa vào tầm ngắm, và mỗi khi cần thu hồi quyền truy cập của một nhân sự, anh em lại phải SSH vào từng server để xóa key.
Để xử lý triệt để các rủi ro này và chuẩn hóa luồng truy cập, cấu hình Bastion Host trên VPS chính là phương pháp thực chiến mang lại hiệu quả bảo mật rõ rệt. Việc gom các luồng kết nối về một trạm kiểm soát tập trung không chỉ chặn đứng các đợt tấn công brute-force mà còn giúp công tác quản trị hạ tầng trở nên nhàn hạ, quy củ hơn. Vậy Bastion Host vận hành ra sao và làm thế nào để setup chuẩn chỉ với các công nghệ bảo mật của năm 2026? Hãy cùng bóc tách chi tiết trong bài viết dưới đây nhé!
Tại sao mở port SSH public trên từng VPS là thảm họa bảo mật?
Khi scale hạ tầng lên con số hàng chục hoặc hàng trăm node, thói quen giữ nguyên cấu hình mặc định (mở cổng 22 public) sẽ đẩy hệ thống vào những rủi ro cực kỳ nghiêm trọng:
- Phình to bề mặt tấn công (Attack Surface Expansion): Mỗi node VPS là một điểm cuối phơi nhiễm trực tiếp ra Internet. Nếu có một lỗ hổng bảo mật mới (CVE) xuất hiện trên OpenSSH hoặc hệ điều hành, toàn bộ cụm server của anh em đều trở thành mục tiêu có thể bị khai thác đồng loạt.
- Tấn công dò quét tự động (Botnet Scan) & Brute-Force: Ngay khi một VPS được cấp IP public, các mạng lưới botnet tự động sẽ lập tức rà quét và thử hàng ngàn kết hợp tên đăng nhập/mật khẩu ở tốc độ máy. Các đợt tấn công này gây tiêu hao tài nguyên CPU, làm tràn băng thông và tạo ra một lượng tiếng ồn khổng lồ che lấp đi các dấu hiệu xâm nhập thực sự.
- Nguy cơ lây lan diện rộng (Lateral Movement) & Phân tán khóa (Key Sprawl): Việc rải rác khóa SSH (Public/Private Key) trên từng VPS khiến công tác quản lý quyền truy cập rơi vào hỗn loạn. Khi một nhân sự nghỉ việc, việc rà soát và xóa key trên 50 con VPS dễ dẫn đến sai sót. Nguy hiểm hơn, nếu hacker chiếm quyền một node public, chúng sẽ dùng chính node đó làm bàn đạp tiếp tục lan truyền sang các node khác trong mạng.
- Mất dấu vết kiểm toán (Audit Trail): Việc mỗi máy chủ tự lưu file log riêng lẻ khiến anh em thiếu đi một điểm nhìn toàn cảnh để giám sát. Kẻ tấn công khi xâm nhập thành công thường có thói quen xóa sạch file
/var/log/auth.logcục bộ, khiến công tác điều tra sự cố đi vào ngõ cụt.

Sơ đồ minh họa rủi ro khi phơi nhiễm cổng 22 ra Internet so với mô hình kiến trúc có điểm kiểm soát trung tâm.
Bastion Host (Jump Server) thay đổi cục diện quản trị hạ tầng ra sao?
Bastion Host (hay còn gọi là Jump Server / Jump Box) là một máy chủ được cấu hình làm cứng (hardened) theo các tiêu chuẩn bảo mật, đóng vai trò là trạm trung chuyển và là cửa ngõ kiểm soát chính. Qua đó, quản trị viên có thể truy cập an toàn vào các máy chủ nội bộ (Backend VPS) nằm ẩn sâu trong mạng riêng (Private Subnet / VPC).
Thay vì để lộ cả cụm server, anh em chỉ public một cổng giao tiếp trọng yếu tại máy chủ Bastion. Các VPS Backend phía sau sẽ được thiết lập tường lửa để từ chối các luồng kết nối từ Internet, chỉ chấp nhận lưu lượng đi qua địa chỉ mạng của Bastion.
Bảng so sánh luồng kết nối thực tế:
| Tiêu chí kỹ thuật | SSH trực tiếp vào cụm VPS | SSH qua mô hình Bastion Host |
| Bề mặt tấn công | Dàn trải trên tất cả máy chủ có IP Public | Chỉ giới hạn ở trạm Bastion Host |
| Quy tắc Tường lửa | Mở cổng 22 ra toàn Internet (0.0.0.0/0) |
Node con chỉ nhận SSH từ IP quy định của Bastion |
| Kiểm soát danh tính | Phân tán trên từng server, khó thu hồi | Hội tụ tại một điểm quản trị trung tâm |
| Luồng mã hóa | Từ Client đến từng VPS | End-to-End từ Client xuyên qua Bastion đến đích |
Quá trình cấu hình Bastion Host trên VPS sẽ giúp anh em giảm tải đáng kể khối lượng công việc thiết lập firewall cho từng máy con, đồng thời chuẩn hóa luồng vận hành chuyên nghiệp.
Chi tiết các bước cấu hình Bastion Host trên VPS theo chuẩn 2026
Để setup một luồng truy cập bảo mật và mượt mà, chúng ta sẽ thực hiện cấu hình qua 4 giai đoạn cốt lõi: Gia cố trạm trung chuyển tích hợp MFA, ẩn mình với mạng Overlay, thắt chặt tường lửa node con, và tối ưu kết nối tự động bằng khóa Ed25519.
Hardening SSH và tích hợp xác thực 2 bước (MFA) trên Bastion
Trạm Bastion là tấm khiên chắn cho toàn hệ thống, do đó nó cần một trạng thái bảo mật mức cao. Anh em đăng nhập vào VPS được chọn làm Bastion và tiến hành chỉnh sửa file cấu hình của OpenSSH bằng lệnh sau:
sudo nano /etc/ssh/sshd_config
Hãy tìm và điều chỉnh các tham số sau nhằm ép buộc xác thực bằng khóa SSH, chặn quyền đăng nhập root và phòng chống cướp phiên:
# Vô hiệu hóa đăng nhập bằng mật khẩu
PasswordAuthentication no
# Chặn quyền đăng nhập trực tiếp của tài khoản root
PermitRootLogin no
# Kích hoạt xác thực bằng khóa mã hóa
PubkeyAuthentication yes
# Cho phép tính năng đục lỗ TCP (Cần thiết cho ProxyJump)
AllowTcpForwarding yes
# Tắt chuyển tiếp Agent để phòng chống Agent Hijacking
AllowAgentForwarding no
Nâng cấp chuẩn 2026 (Thêm MFA): Dù đã dùng SSH Key, các tiêu chuẩn bảo mật hiện đại khuyến cáo áp dụng thêm lớp xác thực 2 yếu tố (MFA). Anh em có thể cài đặt module libpam-google-authenticator trên Bastion, sau đó bổ sung dòng lệnh sau vào file sshd_config để yêu cầu nhập mã OTP từ điện thoại ngay cả khi đã có Private Key:
AuthenticationMethods publickey,keyboard-interactive
Kiểm tra cú pháp cấu hình OpenSSH:
sudo sshd -t
Nạp lại dịch vụ để áp dụng thay đổi:
sudo systemctl reload sshd
Tàng hình Bastion với Tailscale (mạng Overlay) và UFW
Thay vì mở cổng 22 ra ngoài Internet (0.0.0.0/0) và dùng Fail2ban để chặn botnet, xu hướng của các đội ngũ Sysadmin hiện đại là sử dụng mạng Overlay (như Tailscale hoặc WireGuard) để ẩn hoàn toàn máy chủ Bastion.
Khi cài đặt Tailscale lên máy Bastion, máy chủ này sẽ nhận một IP nội bộ mã hóa (ví dụ dải 100.64.0.0/10). Lúc này, anh em cấu hình tường lửa UFW để từ chối mọi traffic từ Internet, chỉ nhận traffic từ dải IP của Tailscale.
Đặt chính sách mặc định chặn các luồng đi vào:
sudo ufw default deny incoming
Cho phép các luồng đi ra:
sudo ufw default allow outgoing
Chỉ cho phép luồng SSH đến từ dải mạng Tailscale:
sudo ufw allow from 100.64.0.0/10 to any port 22 proto tcp
Kích hoạt UFW:
sudo ufw enable
Với thiết lập này, Bastion Host coi như tàng hình trên Internet công cộng. Các botnet rà soát port sẽ không thể nhìn thấy cổng 22, và chỉ những thiết bị đã đăng nhập tài khoản Tailscale của tổ chức mới có thể kết nối đến trạm kiểm soát này. (Trong trường hợp bắt buộc phải public IP, anh em hãy cài đặt thêm Fail2ban làm phương án phòng thủ dự phòng).

Cơ chế tàng hình cổng SSH bằng giải pháp mạng nội bộ mã hóa.
Kết nối Backend VPS và giới hạn Firewall nội bộ
Trên từng VPS Backend (App Server, Worker, Database), anh em cần rà soát và gỡ bỏ các quy tắc cho phép SSH công cộng. Thay vào đó, thiết lập UFW để chỉ mở cổng 22 đón nhận luồng dữ liệu từ địa chỉ mạng nội bộ của máy chủ Bastion.
Giả sử IP nội bộ của Bastion Host (trong cùng VPC) là 10.10.0.5, anh em gõ lệnh trên các VPS Backend.
Cho phép luồng SSH đến từ IP của Bastion:
sudo ufw allow from 10.10.0.5 to any port 22 proto tcp
Xóa bỏ các quy tắc mở cổng SSH public cũ (ví dụ port 22 chung):
sudo ufw delete allow 22/tcp
Kích hoạt UFW:
sudo ufw enable
Sau bước này, các truy cập trái phép từ Internet sẽ bị chặn đứng tại tầng mạng trước khi chạm tới Backend VPS.
Triển khai ProxyJump (ssh -J) với chuẩn khóa Ed25519
Nhiều developer thường mắc sai lầm là chép file Private Key lên máy Bastion để thực hiện bước nhảy sang máy con. Việc này tiềm ẩn rủi ro lớn: nếu trạm trung chuyển bị thỏa hiệp, chìa khóa hạ tầng sẽ bị lộ.
Phương pháp chuẩn kỹ thuật là sử dụng tính năng ProxyJump. Đồng thời, thay vì dùng chuẩn khóa RSA cũ kỹ, anh em nên tạo khóa theo thuật toán Ed25519 (nhanh hơn, nhẹ hơn và an toàn hơn):
ssh-keygen -t ed25519 -C "admin_ops_bastion"
Tiếp theo, cấu hình file ~/.ssh/config trên máy tính cá nhân (Laptop) của anh em:
# 1. Định nghĩa trạm Bastion Host (Sử dụng IP Tailscale nếu áp dụng bước 2)
Host bastion
HostName 100.x.x.x
User admin_ops
IdentityFile ~/.ssh/id_ed25519_bastion
# 2. Định nghĩa cụm VPS Backend
Host vps-backend-*
User deploy
IdentityFile ~/.ssh/id_ed25519_backend
ProxyJump bastion
Kết quả là anh em chỉ việc gõ lệnh: ssh vps-backend-01.
Lúc này, SSH Client sẽ thiết lập một đường ống TCP xuyên qua Bastion, rồi trực tiếp đàm phán mã hóa (End-to-End Encryption) với VPS đích. Bastion chỉ đứng ở giữa làm nhiệm vụ chuyển tiếp byte thô (TCP proxy) mà không thể giải mã nội dung, cũng không giữ chìa khóa của anh em.
Ghi log tập trung (Audit Log) về hệ thống lưu trữ độc lập
Khi toàn bộ traffic hội tụ về Bastion, chúng ta có một điểm thắt (choke point) lý tưởng để giám sát. Tuy nhiên, việc lưu file audit log (auth.log) trực tiếp trên ổ cứng của Bastion vẫn còn tồn tại điểm yếu. Kẻ tấn công nếu bằng cách nào đó chiếm được Bastion có thể xóa toàn bộ lịch sử truy cập để phi tang.
Cách xử lý triệt để là đẩy tự động log từ Bastion và cụm Backend lên một hệ thống quản lý log độc lập hoàn toàn (như Graylog, Papertrail, AWS CloudWatch, Datadog, hoặc cụm máy chủ ELK nội bộ).
Ở mức cơ bản, anh em có thể dùng Rsyslog để forward log TCP từ các VPS về một Log Server trung tâm. Thêm khối lệnh sau vào file /etc/rsyslog.d/50-auth-forward.conf trên máy gửi log:
# Đẩy các sự kiện auth qua giao thức TCP (@@) về Log Server độc lập
auth,authpriv.* @@<IP_CUA_LOG_SERVER>:514
Việc sử dụng giao thức TCP thay cho UDP đảm bảo hệ thống duy trì được các gói tin log, giúp quá trình tra cứu vết kiểm toán (Audit Trail) luôn minh bạch.
Nâng tầm quản trị hạ tầng: Từ Bastion Host đến kiến trúc Zero Trust
Kiến trúc Bastion Host với OpenSSH mang lại hiệu quả bảo vệ rõ rệt. Tuy nhiên, khi hệ thống scale lên quy mô hàng trăm node với nhiều kỹ sư cùng thao tác, việc quản lý vòng đời của các SSH Key tĩnh bắt đầu tạo ra sức ỳ vận hành.
Để đón đầu xu hướng, các tổ chức hiện nay đang dần dịch chuyển sang mô hình Zero Trust Access thông qua các giải pháp PAM (Privileged Access Management):
- Loại bỏ SSH Key tĩnh: Nền tảng như Teleport hay StrongDM không sử dụng key cấp phát thủ công. Kỹ sư đăng nhập bằng tài khoản nội bộ (SSO) và hệ thống sẽ tự động sinh ra một chứng chỉ ngắn hạn (Ephemeral Certificate) chỉ có hiệu lực trong phiên làm việc.
- Ghi hình phiên làm việc: Các giải pháp PAM hiện đại hỗ trợ tính năng Session Recording, quay video lại toàn bộ quá trình gõ lệnh của kỹ sư để phục vụ cho các đợt audit bảo mật.
- Truy cập Cloud-Native không chạm cổng mạng: Với hạ tầng Cloud, các công nghệ như AWS SSM Session Manager, GCP Cloud IAP hoặc Cloudflare Access cho phép mở luồng console trực tiếp tới máy chủ mà không cần public bất kỳ cổng mạng nào.
Checklist vận hành: Tránh rủi ro tự khóa mình ngoài hệ thống
Quá trình cấu hình tường lửa và sửa đổi file sshd_config luôn đi kèm rủi ro ngắt kết nối đột ngột, khiến anh em tự nhốt chính mình ngoài server. Để đảm bảo an toàn thực chiến, anh em cần lưu ý checklist sau:
- Duy trì phiên kết nối hiện hành: Khi anh em đổi thông số SSH hay nạp lại rule của UFW, luôn phải giữ cho cửa sổ Terminal hiện tại đang làm việc trạng thái mở.
- Kiểm thử song song bằng cửa sổ mới: Mở một Terminal thứ 2, khởi tạo luồng kết nối mới. Nếu phiên mới đăng nhập thành công, anh em mới được phép tắt phiên làm việc ban đầu.
- Kênh Console khẩn cấp (Out-of-band): Đảm bảo tài khoản quản trị Cloud của anh em có tính năng Web VNC / Serial Console. Đây là phương án dự phòng quan trọng để truy cập sửa lỗi khi lỡ tay cấu hình nhầm tường lửa chặn port mạng.
- Tối ưu tốc độ với Connection Multiplexing: Việc kết nối xuyên qua Bastion đôi lúc tạo ra độ trễ nhỏ. Anh em có thể chèn khối lệnh
ControlMaster autovàControlPersist 10mvào file~/.ssh/configtrên máy local. Cơ chế này giúp các luồng truy cập sau tái sử dụng socket có sẵn, tăng tốc độ mở shell đáng kể.

Quy trình cấp quyền truy cập máy chủ tự động bằng chứng chỉ ngắn hạn (Ephemeral Certificate) trong mô hình Zero Trust.
Câu hỏi thường gặp (FAQ)
1. Cấu hình Bastion Host trên VPS mang lại lợi ích trọng tâm nào?
Thu hẹp bề mặt tấn công mạng. Thay vì mở cổng 22 public trên hàng chục máy chủ, bạn chỉ cần quản lý bảo mật tại một điểm tiếp nhận tập trung, giúp giảm thiểu rủi ro bị botnet rà soát mật khẩu.
2. Tôi có cần chép Private Key (Khóa riêng) lên máy chủ Bastion không?
Không. Hãy sử dụng tính năng ProxyJump (ssh -J). Máy trạm (Client) sẽ đục lỗ TCP xuyên qua Bastion và thiết lập mã hóa End-to-End trực tiếp với server đích, giữ khóa riêng an toàn trên máy cá nhân.
3. Tường lửa (UFW) trên các node con cần thiết lập như thế nào?
Gỡ bỏ quy tắc mở cổng 22 public. Chỉ thiết lập UFW chấp nhận các luồng kết nối SSH đi vào từ địa chỉ IP mạng nội bộ của máy chủ Bastion Host.
4. Nên lưu log (nhật ký truy cập) ở đâu để tránh bị xóa dấu vết?
Tránh lưu log cục bộ trên Bastion. Hãy sử dụng Rsyslog để đẩy tự động toàn bộ nhật ký (auth.log) qua giao thức TCP về một hệ thống quản lý log độc lập (như Graylog hoặc AWS CloudWatch).
5. Khi nào nên nâng cấp từ Bastion Host sang mô hình Zero Trust?
Khi hạ tầng mở rộng lên hàng trăm node với nhiều kỹ sư cùng quản trị. Zero Trust (như Teleport, StrongDM) loại bỏ SSH Key tĩnh, thay bằng chứng chỉ ngắn hạn (cấp qua SSO) giúp quản lý vòng đời truy cập linh hoạt hơn.
Kết luận
Bằng việc triển khai cấu hình Bastion Host trên VPS một cách bài bản, kết hợp cùng các công nghệ hiện đại như Tailscale và MFA, anh em đã thiết lập được một kiến trúc mạng tập trung, chuyên nghiệp. Phương pháp này cung cấp nền tảng vững chắc để hệ thống vận hành ổn định và dễ dàng mở rộng trong tương lai. Chúc anh em thực hành thuận lợi và xây dựng được cụm hạ tầng cứng cáp!
Tài liệu tham khảo
- sshd_config(5) – OpenBSD manual pages
- ssh_config(5) – OpenBSD manual pages
- Linux Bastion Hosts on the AWS Cloud: Quick Start Reference Deployment – AWS
- GitHub – fail2ban/fail2ban: Daemon to ban hosts that cause multiple authentication errors · GitHub
- SSH ProxyJump and ProxyCommand: How to Use Jump Hosts (2026) | Teleport







