❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.
Một trong những vấn đề bảo mật nghiêm trọng nhất khi quản lý VPS là mở port SSH 22 ra public Internet. Trong bài viết này, AZDIGI sẽ hướng dẫn cách sử dụng Tailscale để bảo vệ SSH, loại bỏ hoàn toàn nguy cơ brute force attack mà vẫn có thể truy cập VPS từ bất kỳ đâu.

Tại sao không nên mở port SSH 22 ra public?
Rủi ro thực tế
Theo kinh nghiệm vận hành hạ tầng tại AZDIGI, một VPS mới với port 22 mở ra public có thể nhận:
- Hàng nghìn request đăng nhập SSH trái phép mỗi ngày
- Các bot tự động quét và thử đăng nhập 24/7
- Tấn công brute force (thử đăng nhập qua SSH bằng danh sách mật khẩu bị rò rỉ cho đến khi thành công)
Kiểm tra logs trên VPS của bạn với lệnh này để xem:
grep "ssh" /var/log/auth.log | tail -20
Bạn sẽ thấy hàng loạt IP lạ cố gắng đăng nhập với các username phổ biến như root, admin, ubuntu, v.v.
Hậu quả nếu bị xâm nhập
- Mất quyền kiểm soát server
- Dữ liệu bị đánh cắp hoặc mã hóa (ransomware)
- Server bị lợi dụng để gửi spam hoặc tấn công DDoS
- Ảnh hưởng đến các khách hàng khác (nếu là hosting)
Giải pháp: SSH qua Tailscale
Thay vì mở port 22 ra public Internet, ta cấu hình SSH chỉ lắng nghe trên IP Tailscale. Chỉ những thiết bị trong tailnet của bạn mới có thể kết nối SSH.
Lợi ích
- Port 22 biến mất hoàn toàn trên Internet: Port 22 không tồn tại trên public IP
- Mã hóa kép: WireGuard + SSH encryption
- Xác thực 2 lớp: Phải có Tailscale + SSH credentials
- Không cần IP tĩnh: Truy cập qua hostname Tailscale
- Không cần VPN truyền thống: Tailscale xử lý tất cả
Cách hoạt động của SSH qua Tailscale
┌─────────────┐ Tailscale ┌─────────────┐
│ Laptop │◄──────────────────►│ VPS │
│ (Client) │ WireGuard VPN │ (Server) │
│100.64.0.2 │ │100.64.0.1 │
└─────────────┘ └──────┬──────┘
│
SSH chỉ listen
trên 100.64.0.1
│
Port 22 public
= ĐÓNG
Cấu hình SSH chỉ listen trên Tailscale IP
Bước 1: Xác nhận Tailscale đã hoạt động
Đảm bảo Tailscale đã được cài đặt và kết nối:
tailscale status
tailscale ip -4
# Ghi nhớ IP này, ví dụ: 100.64.0.1
Bước 2: Backup cấu hình SSH hiện tại
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
Bước 3: Chỉnh sửa cấu hình SSH
sudo nano /etc/ssh/sshd_config
Tìm và sửa dòng ListenAddress:
# Thay 100.64.0.1 bằng IP Tailscale thực tế của VPS
ListenAddress 100.64.0.1
# Hoặc nếu muốn listen trên cả localhost (cho các service local)
ListenAddress 100.64.0.1
ListenAddress 127.0.0.1
Quan trọng: Xóa hoặc comment dòng ListenAddress 0.0.0.0 nếu có.
Bước 4: Kiểm tra cấu hình
Trước khi restart SSH, kiểm tra cú pháp:
sudo sshd -t
Nếu không có output (không báo lỗi), cấu hình OK.
Bước 5: Restart SSH service
sudo systemctl restart sshd
Bước 6: Test kết nối
Từ thiết bị trong tailnet:
ssh user@100.64.0.1
# Hoặc dùng hostname Tailscale
ssh user@vps-name
Từ bên ngoài tailnet (public IP):
ssh user@<public-ip>
# Kết quả: Connection refused
Sử dụng Tailscale SSH (Native)
Tailscale cung cấp tính năng SSH tích hợp, cho phép SSH mà không cần cấu hình key:
Bật Tailscale SSH trên VPS
sudo tailscale up --ssh
Kết nối từ client
tailscale ssh user@vps-name
Ưu điểm của Tailscale SSH:
- Không cần quản lý SSH keys
- Xác thực dựa trên Tailscale identity
- Có thể kiểm soát qua ACLs
- Logging tập trung
Nhược điểm:
- Chỉ hoạt động từ thiết bị có Tailscale
- Một số tính năng SSH nâng cao có thể không hỗ trợ đầy đủ
SSH config cho Tailscale
Để tiện lợi hơn, thêm cấu hình vào ~/.ssh/config trên thiết bị của bạn để đăng nhập nhanh:
# ~/.ssh/config
Host vps-production
HostName vps-production # Hostname Tailscale
User root
Port 22
Host vps-staging
HostName 100.64.0.5 # IP Tailscale
User ubuntu
Port 22
IdentityFile ~/.ssh/id_ed25519
Sau đó kết nối đơn giản:
ssh vps-production
ssh vps-staging
Tắt password authentication
Để tăng cường bảo mật, nên tắt đăng nhập bằng password và chỉ dùng SSH key:
👉 Xem thêm: Bảo mật SSH với SSH Key
Bước 1: Đảm bảo đã có SSH key
Trên máy của bạn, kiểm tra hoặc tạo SSH key:
ls ~/.ssh/id_ed25519.pub
# Nếu chưa có:
ssh-keygen -t ed25519 -C "your@email.com"
Bước 2: Copy key lên VPS
ssh-copy-id user@vps-name
Sau đó hãy thực hiện đăng nhập lại vào VPS qua SSH để kiểm tra SSH key đã hoạt động chưa.
Bước 3: Tắt password authentication
Trên VPS, sửa /etc/ssh/sshd_config:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Bước 4: Restart SSH
sudo systemctl restart sshd
Lưu ý: Đảm bảo SSH key đã hoạt động trước khi tắt password!
Best practices bảo mật SSH + Tailscale
1. Đổi port SSH (tùy chọn)
Dù đã ẩn sau Tailscale, đổi port vẫn là một lớp bảo vệ thêm:
# /etc/ssh/sshd_config
Port 2222
2. Giới hạn user được SSH
# /etc/ssh/sshd_config
AllowUsers admin deployer
3. Sử dụng Tailscale ACLs
Trong Tailscale Admin Console, cấu hình ACLs để giới hạn ai có thể SSH:
{
"acls": [
{"action": "accept", "src": ["group:admin"], "dst": ["*:22"]}
]
}
4. Bật SSH logging
# /etc/ssh/sshd_config
LogLevel VERBOSE
5. Giới hạn số lần thử đăng nhập
# /etc/ssh/sshd_config
MaxAuthTries 3
Kết hợp với fail2ban (tùy chọn)
Dù đã có Tailscale, fail2ban vẫn hữu ích nếu bạn giữ SSH trên localhost:
# Cài đặt fail2ban
sudo apt install fail2ban -y
# Tạo cấu hình local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Chỉnh sửa
sudo nano /etc/fail2ban/jail.local
Cấu hình cơ bản:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
Khôi phục nếu bị lock out
Nếu vô tình cấu hình sai và không thể SSH:
Qua VNC/Console
Hầu hết VPS providers (bao gồm AZDIGI) cung cấp VNC hoặc web console. Sử dụng để:
- Đăng nhập vào VPS
- Sửa
/etc/ssh/sshd_config - Restart SSH
Khôi phục từ backup
sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
sudo systemctl restart sshd
Cài đặt Tailscale trên AlmaLinux/RHEL
Bài viết trên sử dụng Ubuntu làm ví dụ. Nếu bạn sử dụng AlmaLinux, Rocky Linux hoặc RHEL, cách cài đặt Tailscale như sau:
Cách 1: Dùng script cài đặt tự động (khuyên dùng):
curl -fsSL https://tailscale.com/install.sh | sh
Cách 2: Cài đặt thủ công qua dnf:
# Thêm Tailscale repo
sudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/rhel/9/tailscale.repo
# Cài đặt
sudo dnf install tailscale -y
# Kích hoạt và khởi động
sudo systemctl enable --now tailscaled
# Đăng nhập
sudo tailscale up
Sau khi cài đặt, các bước cấu hình SSH qua Tailscale hoàn toàn giống nhau trên mọi distro. Chỉ cần thay lệnh apt bằng dnf khi cài đặt các gói phần mềm khác.
Kết luận
SSH qua Tailscale là cách đơn giản và hiệu quả nhất để bảo vệ VPS khỏi các cuộc tấn công brute force. Bằng cách:
- Chỉ cho phép SSH qua Tailscale IP
- Tắt password authentication
- Sử dụng SSH keys
Bạn đã có một lớp bảo mật vững chắc cho server mà vẫn có thể truy cập từ bất kỳ đâu.
Để tìm hiểu thêm về Tailscale, xem bài viết Hướng dẫn Tailscale trên VPS từ A-Z.
Có thể bạn cần xem thêm
- Hướng dẫn Tailscale trên VPS: Tạo mạng riêng ảo an toàn từ A-Z
- Tailscale Exit Node: Biến VPS thành VPN Server cá nhân
- Bảo vệ SSH toàn diện trên Linux VPS
- Tailscale là gì? Hướng dẫn chi tiết từ A-Z
- Checklist bảo mật VPS Linux - 15 bước thiết yếu
- Troubleshooting VPS Linux - Cách xủ lý sự cố VPS phổ biến
Về tác giả
Thạch Phạm
Đồng sáng lập và Giám đốc điều hành của AZDIGI. Có hơn 15 năm kinh nghiệm trong phổ biến kiến thức liên quan đến WordPress tại thachpham.com, phát triển website và phát triển hệ thống.