Tại sao bạn cần một Bastion Host ngay lập tức?
Hồi mới chân ướt chân ráo đi làm, mình từng quản lý cụm 20 server chạy dịch vụ cho khách hàng. Vì muốn tiện SSH từ nhà, mình đã mở toang port 22 công khai trên tất cả các máy. Kết quả là vào một đêm lúc 2 giờ sáng, hệ thống báo động đỏ rực. Kiểm tra log, mình tá hỏa thấy hơn 50.000 request brute-force dội vào chỉ trong một tiếng đồng hồ. Một server trong số đó đã bị chiếm quyền vì một bạn dev đặt mật khẩu quá đơn giản.
Sau cú sốc đó, mình nhận ra việc để server nội bộ lộ diện trực tiếp ra Internet là một sai lầm chết người. Đó là lý do mình chuyển sang dùng Bastion Host (hay còn gọi là Jump Server). Thay vì mở 20 cánh cửa hớ hênh, mình chỉ mở một lối vào duy nhất. Lối vào này được gia cố cực kỳ chắc chắn và mọi hành động đi qua đó đều bị giám sát chặt chẽ.
Bastion Host thực chất là gì?
Hãy tưởng tượng Bastion Host giống như trạm gác tại cổng một khu chung cư cao cấp. Bạn không thể xộc thẳng vào căn hộ của cư dân. Bạn bắt buộc phải đi qua trạm gác, xuất trình giấy tờ và để bảo vệ ghi lại giờ giấc ra vào.
Trong hạ tầng IT, Bastion Host là một server nằm ở vùng biên (Public Subnet). Nó đóng vai trò điểm trung chuyển duy nhất để truy cập vào các máy chủ nội bộ (Private Subnet). Lúc này, các server nội bộ sẽ đóng kín port 22 với thế giới. Chúng chỉ chấp nhận kết nối duy nhất từ địa chỉ IP của Bastion Host.
Mô hình này mang lại ba lợi ích cốt lõi:
- Thu hẹp bề mặt tấn công: Hacker chỉ còn một mục tiêu duy nhất để tấn công thay vì hàng chục máy chủ như trước.
- Quản lý tập trung: Toàn bộ cấu hình bảo mật và SSH Key chỉ cần quản lý tại một nơi duy nhất.
- Audit Log chuẩn xác: Bạn biết rõ ai đã vào server nào, thao tác lúc mấy giờ và đã gõ những lệnh gì.
Thực hành: Cấu hình Bastion Host chuyên nghiệp
Bước 1: Gia cố bảo mật cho Bastion Host
Vì đây là chốt chặn cuối cùng, nếu Bastion Host bị chiếm, hacker sẽ có chìa khóa vào toàn bộ hệ thống. Do đó, bảo mật cho chính nó là ưu tiên hàng đầu.
Hãy tắt hoàn toàn việc đăng nhập bằng mật khẩu. Chỉ sử dụng SSH Key để xác thực. Bạn mở file /etc/ssh/sshd_config và chỉnh sửa như sau:
# Tắt xác thực mật khẩu
PasswordAuthentication no
PubkeyAuthentication yes
# Chỉ cho phép user cụ thể
AllowUsers admin-devops
# Đổi port SSH để giảm 90% log rác từ bot scan
Port 2222
Sau đó, hãy khởi động lại dịch vụ: sudo systemctl restart ssh.
Bước 2: Sử dụng SSH ProxyJump (Cách làm chuẩn)
Nhiều bạn có thói quen SSH vào Bastion, sau đó copy Private Key lên đó để SSH tiếp vào máy nội bộ. Đừng bao giờ làm vậy! Nếu Bastion bị hack, toàn bộ Private Key của bạn sẽ rơi vào tay kẻ xấu.
Cách an toàn nhất là dùng tính năng ProxyJump. Trên máy cá nhân, bạn hãy cấu hình file ~/.ssh/config:
# Cấu hình cho Bastion Host
Host bastion
HostName 1.2.3.4
User admin-devops
Port 2222
IdentityFile ~/.ssh/id_rsa_bastion
# Cấu hình cho Server nội bộ
Host server-app-1
HostName 10.0.1.50
User deploy-user
IdentityFile ~/.ssh/id_rsa_internal
ProxyJump bastion
Giờ đây, bạn chỉ cần gõ ssh server-app-1. SSH client sẽ tự động kết nối xuyên qua Bastion. Không một Private Key nào bị lưu lại trên Jump Server cả.
Bước 3: Ghi nhật ký (Audit Logging) toàn bộ phiên làm việc
Đây là tính năng cực hay để giám sát. Mình thường dùng lệnh script để ghi lại toàn bộ diễn biến trên terminal. Đầu tiên, hãy tạo thư mục lưu log trên Bastion:
sudo mkdir -p /var/log/bastion
sudo chmod 733 /var/log/bastion
Tiếp theo, tạo script /usr/local/bin/bastion-session.sh để tự động kích hoạt khi có người kết nối:
#!/bin/bash
LOG_FILE="/var/log/bastion/session_${USER}_$(date +%Y%m%d_%H%M%S).log"
echo "--- Welcome! Your session is being recorded ---"
/usr/bin/script -q -f $LOG_FILE
exit
Cấp quyền thực thi: sudo chmod +x /usr/local/bin/bastion-session.sh. Khi user đăng nhập, mọi câu lệnh và kết quả trả về sẽ được lưu vào /var/log/bastion/ để bạn kiểm tra bất cứ lúc nào.
Bước 4: Giới hạn quyền hạn tối đa
Thực tế, user không cần quyền thực thi lệnh trên Bastion. Bạn có thể giới hạn họ chỉ được phép dùng SSH tunnel. Trong /etc/ssh/sshd_config, hãy thêm cấu hình cho nhóm user:
Match Group bastion-users
AllowTcpForwarding yes
X11Forwarding no
PermitTunnel no
GatewayPorts no
Kinh nghiệm thực tế khi vận hành
Sau nhiều năm triển khai cho các dự án lớn, mình có vài lưu ý nhỏ cho anh em:
- Luôn có phương án dự phòng: Hãy thiết lập thêm một kênh VPN. Nếu Bastion Host gặp sự cố, bạn vẫn còn đường để vào cứu hệ thống.
- Xoay vòng Log: File log từ lệnh
scriptcó thể chiếm vài GB dung lượng nếu user thao tác nhiều. Hãy dùnglogrotateđể nén và xóa log cũ sau 30 ngày. - Tích hợp 2FA: Nếu có thể, hãy cài Google Authenticator lên Bastion. Đây là lớp bảo mật cực mạnh giúp bạn ngủ ngon hơn mỗi đêm.
Tóm lại là
Thiết lập Bastion Host không khó nhưng hiệu quả mang lại rất lớn. Nó thay đổi hoàn toàn cách bạn bảo vệ hạ tầng. Thay vì loay hoay vá lỗ hổng ở khắp nơi, bạn chỉ cần tập trung canh giữ một điểm duy nhất.
Hy vọng những chia sẻ này giúp hệ thống của anh em an toàn hơn. Nếu gặp khó khăn trong quá trình cấu hình, đừng ngần ngại để lại comment, mình sẽ giải đáp ngay!

