Secure Ubuntu Server: SSH Key, Tắt Root, Đổi Port An Toàn

12/05/2026 · P T P · Chung

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.bak

Test config:

sudo sshd -t

Nế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 deploy

Nếu đang dùng user có sudo:

sudo adduser deploy
sudo usermod -aG sudo deploy

Test:

su - deploy
sudo whoami

Kế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.pub

Private 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_IP

Nế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_keys

Dán nội dung public key:

cat ~/.ssh/id_ed25519.pub

Set quyền chuẩn:

chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys

Quyền sai → SSH key có thể bị từ chối.

Test login bằng key:

ssh deploy@SERVER_IP

Nế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_config

Tìm/sửa các dòng:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

Giả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 yes

Lưu ý: trên Ubuntu mới, một số cấu hình có thể nằm trong:

/etc/ssh/sshd_config.d/*.conf

Kiể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 -t

Reload SSH:

sudo systemctl reload ssh

Hoặc:

sudo systemctl reload sshd

Tùy bản Ubuntu, service thường là ssh.

Mở terminal mới, test:

ssh deploy@SERVER_IP

Nế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 :24222

Không output → chưa dùng.

Sửa SSH config:

sudo nano /etc/ssh/sshd_config

Đổi/thêm:

Port 24222

Có thể giữ tạm 2 port trong giai đoạn chuyển đổi:

Port 22
Port 24222

Cá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 verbose

Nếu UFW chưa bật:

sudo ufw allow 24222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Cả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 -t

Reload:

sudo systemctl reload ssh

Test port mới từ terminal khác:

ssh -p 24222 deploy@SERVER_IP

Nếu thành công, bỏ port 22:

Port 24222

Sau đó reload:

sudo sshd -t
sudo systemctl reload ssh

Đóng port 22 trên UFW:

sudo ufw delete allow 22/tcp

Tố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 admin

Cẩ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/config

Thêm:

Host prod-server
    HostName SERVER_IP
    User deploy
    Port 24222
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

Kết nối:

ssh prod-server

Lợi ích:

– Dễ dùng.
– Ít sai port.
– Phù hợp automation, deploy script.

Set quyền:

chmod 600 ~/.ssh/config

Thê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 -y

Tạo jail local:

sudo nano /etc/fail2ban/jail.local

Nội dung:

[sshd]
enabled = true
port = 24222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 10m
bantime = 1h

Restart:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Kiểm tra:

sudo fail2ban-client status sshd

Fail2ban 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.bak

Nếu lỗi, rollback:

sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
sudo sshd -t
sudo systemctl reload ssh

Lỗ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_keys

Trên server cần đúng owner:

sudo chown -R deploy:deploy /home/deploy/.ssh

Connection 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 verbose

Tự 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.

#port #root #secure #server #ubuntu
Chia sẻ:
← Trước
Checklist 30 phút khóa chặt Ubuntu server mới cài

Bài viết tương tự

Bình luận

Chưa có bình luận. Hãy là người đầu tiên!