Secure Ubuntu Server bằng SSH Key, tắt Root Login, đổi cổng SSH an toàn
Một VPS Ubuntu mới cài thường “mở cửa” khá rộng: SSH chạy cổng 22, user root có thể đăng nhập, mật khẩu có thể bị brute-force. Chỉ vài phút sau khi online, server đã có thể nhận hàng trăm req dò mật khẩu từ bot.
Tin tốt: chỉ cần cấu hình đúng SSH, bạn giảm mạnh rủi ro. Bài này hướng dẫn 3 việc cốt lõi: dùng SSH key, tắt root login, đổi cổng SSH an toàn. Mục tiêu: bảo mật hơn, vẫn tránh tự khóa mình khỏi server.
Vì sao cần harden SSH?
SSH là cổng quản trị chính của server. Ai vào được SSH gần như kiểm soát toàn bộ máy. Các rủi ro phổ biến:
– Brute-force password: bot thử user/pass liên tục. – Root login trực tiếp: nếu root bị lộ pass/key → mất toàn quyền ngay. – Cổng 22 bị scan mặc định: dễ nằm trong danh sách tấn công tự động. – Cấu hình sai firewall: đổi cổng xong tự khóa chính mình.
Bảo mật SSH không phải “ẩn mình tuyệt đối”, mà là giảm bề mặt tấn công, bắt buộc xác thực mạnh, giới hạn quyền, có đường rollback.
Nguyên tắc an toàn trước khi chỉnh SSH
Trước khi sửa /etc/ssh/sshd_config, làm đúng các bước sau:
– Giữ session SSH hiện tại mở. Không logout.
– Mở thêm 1 terminal test login sau mỗi thay đổi.
– Backup config trước khi sửa.
– Kiểm tra syntax bằng sshd -t.
– Mở firewall trước, rồi mới đổi SSH port.
– Không restart bừa nếu chưa test config.
Backup:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bakTest config:
sudo sshd -tNếu không output → OK.
Tạo user sudo thay vì dùng root
Không nên vận hành hằng ngày bằng root. Tạo user riêng, cấp quyền sudo.
adduser deploy
usermod -aG sudo deployNếu đang dùng user có sudo:
sudo adduser deploy
sudo usermod -aG sudo deployTest:
su - deploy
sudo whoamiKết quả cần là:
rootÝ nghĩa: user deploy không phải root, nhưng có thể nâng quyền khi cần.
Tạo SSH key trên máy cá nhân
Trên máy local, tạo key ED25519:
ssh-keygen -t ed25519 -C "deploy@server"Khuyến nghị:
– File mặc định: ~/.ssh/id_ed25519
– Nên đặt passphrase cho private key.
– Không chia sẻ private key.
– Public key .pub mới được đưa lên server.
Key gồm:
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pubPrivate key → giữ kín. Public key → copy lên server.
Copy SSH public key lên server
Cách nhanh:
ssh-copy-id deploy@SERVER_IPNếu server chưa cho login user deploy, có thể copy thủ công bằng root/user hiện có:
mkdir -p /home/deploy/.ssh
nano /home/deploy/.ssh/authorized_keysDán nội dung public key:
cat ~/.ssh/id_ed25519.pubSet quyền chuẩn:
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keysQuyền sai → SSH key có thể bị từ chối.
Test login bằng key:
ssh deploy@SERVER_IPNếu vào được không cần password server → OK.
Cấu hình SSH: tắt root login, tắt password
Mở config:
sudo nano /etc/ssh/sshd_configTìm/sửa các dòng:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yesGiải thích:
– PermitRootLogin no → chặn root login trực tiếp.
– PasswordAuthentication no → chỉ cho SSH key.
– PubkeyAuthentication yes → bật xác thực key.
Có thể thêm:
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no
UsePAM yesLưu ý: trên Ubuntu mới, một số cấu hình có thể nằm trong:
/etc/ssh/sshd_config.d/*.confKiểm tra file phụ:
ls -la /etc/ssh/sshd_config.d/Nếu có dòng override như PasswordAuthentication yes, cần sửa hoặc xóa để tránh cấu hình bị ghi đè.
Test:
sudo sshd -tReload SSH:
sudo systemctl reload sshHoặc:
sudo systemctl reload sshdTùy bản Ubuntu, service thường là ssh.
Mở terminal mới, test:
ssh deploy@SERVER_IPNếu OK → root/password đã có thể tắt an toàn.
Đổi cổng SSH an toàn
Đổi port không thay thế SSH key, nhưng giảm scan tự động trên port 22. Chọn port cao, ví dụ 2222, 24222, 49152. Tránh port đang dùng.
Kiểm tra port trống:
sudo ss -tulpn | grep :24222Không output → chưa dùng.
Sửa SSH config:
sudo nano /etc/ssh/sshd_configĐổi/thêm:
Port 24222Có thể giữ tạm 2 port trong giai đoạn chuyển đổi:
Port 22
Port 24222Cách này an toàn hơn: test port mới xong mới bỏ port 22.
Mở firewall trước khi reload SSH
Nếu dùng UFW:
sudo ufw allow 24222/tcp
sudo ufw status verboseNếu UFW chưa bật:
sudo ufw allow 24222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableCảnh báo: bật firewall sai rule có thể khóa truy cập. Với VPS cloud, kiểm tra thêm Security Group / Cloud Firewall tại nhà cung cấp.
Nếu dùng cloud như AWS, GCP, Azure, Hetzner, DigitalOcean:
– Mở inbound TCP port mới. – Giới hạn theo IP cá nhân nếu có thể. – Không chỉ sửa UFW rồi quên firewall tầng cloud.
Test config:
sudo sshd -tReload:
sudo systemctl reload sshTest port mới từ terminal khác:
ssh -p 24222 deploy@SERVER_IPNếu thành công, bỏ port 22:
Port 24222Sau đó reload:
sudo sshd -t
sudo systemctl reload sshĐóng port 22 trên UFW:
sudo ufw delete allow 22/tcpTối ưu SSH config thêm
Một số cấu hình hữu ích:
LoginGraceTime 30
MaxAuthTries 3
MaxSessions 3
X11Forwarding no
AllowUsers deployÝ nghĩa:
– LoginGraceTime 30 → giới hạn thời gian login.
– MaxAuthTries 3 → giảm lần thử sai.
– MaxSessions 3 → hạn chế session song song.
– X11Forwarding no → tắt tính năng ít dùng.
– AllowUsers deploy → chỉ user được chỉ định login SSH.
Nếu có nhiều user:
AllowUsers deploy adminCẩn thận: cấu hình sai AllowUsers → tự khóa login.
Dùng SSH config trên máy local
Để khỏi gõ port/user dài, tạo file:
nano ~/.ssh/configThêm:
Host prod-server
HostName SERVER_IP
User deploy
Port 24222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yesKết nối:
ssh prod-serverLợi ích:
– Dễ dùng. – Ít sai port. – Phù hợp automation, deploy script.
Set quyền:
chmod 600 ~/.ssh/configThêm lớp bảo vệ bằng Fail2ban
Fail2ban chặn IP brute-force dựa trên log.
Cài:
sudo apt update
sudo apt install fail2ban -yTạo jail local:
sudo nano /etc/fail2ban/jail.localNội dung:
[sshd]
enabled = true
port = 24222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 10m
bantime = 1hRestart:
sudo systemctl restart fail2ban
sudo systemctl enable fail2banKiểm tra:
sudo fail2ban-client status sshdFail2ban không thay SSH key, nhưng giúp giảm nhiễu log, chặn bot thử sai nhiều lần.
Checklist sau cấu hình
Kiểm tra cuối:
– Login bằng user thường được:
ssh -p 24222 deploy@SERVER_IP– Root login bị chặn:
ssh -p 24222 root@SERVER_IP– Password login bị chặn.
– Port 22 đóng.
– UFW/cloud firewall mở port mới.
– sudo hoạt động với user deploy.
– Backup config còn đó:
ls -la /etc/ssh/sshd_config.bakNếu lỗi, rollback:
sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
sudo sshd -t
sudo systemctl reload sshLỗi thường gặp
Permission denied publickey
Nguyên nhân thường gặp:
– Sai key.
– Sai user.
– Sai quyền thư mục .ssh.
– Public key chưa có trong authorized_keys.
Fix:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysTrên server cần đúng owner:
sudo chown -R deploy:deploy /home/deploy/.sshConnection refused
Có thể:
– SSH service chưa listen port mới. – Firewall chưa mở. – Cloud firewall chưa mở. – Port sai.
Debug:
sudo ss -tulpn | grep ssh
sudo systemctl status ssh
sudo ufw status verboseTự khóa khỏi server
Nếu còn session cũ → rollback ngay. Nếu mất hết session → dùng console/VNC/rescue mode từ nhà cung cấp VPS.
Kết luận thực tế
Secure SSH không phức tạp, nhưng cần làm đúng thứ tự. Công thức an toàn:
1. Tạo user sudo. 2. Cài SSH key. 3. Test key login. 4. Tắt root login. 5. Tắt password auth. 6. Mở firewall port mới. 7. Đổi SSH port. 8. Test terminal mới. 9. Đóng port 22. 10. Thêm Fail2ban.
Kết quả: server Ubuntu giảm mạnh rủi ro brute-force, không còn root login trực tiếp, SSH chỉ nhận key, cổng mặc định không còn phơi ra. Đây là baseline nên làm ngay sau khi tạo VPS, trước khi deploy app, DB, Docker, Nginx hay bất kỳ workload production nào.
Bình luận (0)
Chưa có bình luận. Hãy là người đầu tiên!