Security

Cách đổi port SSH mặc định trên VPS Linux

Đang SSH vào VPS Linux thì thấy log đầy những dòng "Failed password for root from 103.68.12.34" cứ mỗi giây lại thêm vài lần. Đó là lúc bạn nhận ra port 22 mặc định đã trở thành bãi đáp cho bot quét tự động. Đổi port SSH là thao tác đơn giản nhưng giảm ngay lượng tấn công brute-force đáng kể. Bài viết này hướng dẫn cách đổi port SSH mặc định trên Ubuntu 24.04 LTS, Debian 12 và AlmaLinux 9, kèm cấu hình firewall để không tự khóa mình ngoài VPS.

  • Chỉnh Port trong /etc/ssh/sshd_config, chọn port trong khoảng 1024-65535 tránh xung đột.
  • Cập nhật firewall trước khi restart SSH: mở port mới trên ufw hoặc firewalld, gỡ hoặc giữ port cũ tùy nhu cầu.
  • Luôn mở một phiên SSH thứ hai để test trước khi đóng phiên cũ, tránh mất kết nối lâu dài.
  • Với AlmaLinux 9 cần cập nhật cả SELinux để cho phép port mới hoạt động.

Yêu cầu trước khi bắt đầu

Để thực hiện an toàn, bạn cần chuẩn bị:

  • VPS chạy Ubuntu 24.04, Debian 12 hoặc AlmaLinux 9 với quyền root hoặc user có sudo.
  • Quyền truy cập SSH hiện tại hoạt động tốt, có thể qua root hoặc user thường.
  • Biết cách dùng trình soạn thảo văn bản trong terminal: nano, vim hoặc vi.
  • Khuyến nghị đã cấu hình SSH key trước khi đổi port, phòng trường hợp quên mật khẩu khi đang thao tác.

Nếu bạn chưa có VPS hoặc đang dùng VPS Linux chạy Ubuntu 24.04, các lệnh bên dưới đều áp dụng trực tiếp. Bài viết giả định bạn đang ở quyền root, nếu dùng user sudo thì thêm sudo trước mỗi lệnh.

Vì sao nên đổi port SSH mặc định

Port 22 là cổng mặc định của SSH từ khi giao thức ra đời. Mọi bot quét internet đều biết điều này, chúng quét toàn bộ dải IPv4 và thử kết nối vào port 22 của từng địa chỉ. Chỉ trong vài giờ sau khi bật VPS mới, bạn sẽ thấy hàng trăm lần thử đăng nhập thất bại trong log.

Đổi sang port tùy chỉnh giúp bot quét thông thường bỏ qua VPS của bạn vì chúng không mở kết nối đến port lạ. Cách này không phải là biện pháp bảo mật rất cao, kẻ tấn công có chủ đích vẫn quét toàn bộ port. Nhưng với phần lớn các cuộc tấn công tự động hàng ngày, đổi port giảm đến 90% lượng log rác và giảm tài nguyên CPU xử lý các kết nối thất bại.

Đổi port SSH không thay thế cho việc tắt đăng nhập root bằng mật khẩu, dùng SSH key hay cài fail2ban. Nó là lớp bảo vệ đầu tiên, kết hợp với các biện pháp khác tạo thành hệ thống phòng thủ nhiều lớp cho VPS giá rẻ của bạn.

Bước 1 - Chọn port mới và kiểm tra xung đột

Port SSH mới nên nằm trong khoảng 1024 đến 65535. Tránh dùng các port phổ biến như 80 (HTTP), 443 (HTTPS), 3306 (MySQL), 5432 (PostgreSQL) vì sẽ xung đột dịch vụ. Dải port 49152-65535 được hệ điều hành dành riêng cho kết nối tạm thời, nên hạn chế dùng. Khoảng 1024-49151 là an toàn.

Kiểm tra port định chọn đã được dịch vụ nào sử dụng chưa:

ss -tulpn | grep :2222

Nếu không có output nghĩa là port trống, có thể dùng. Ví dụ này chọn port 2222, con số dễ nhớ và ít xung đột. Bạn có thể chọn port khác như 62222, 32022 tùy thích, miễn là nhớ được.

Bước 2 - Chỉnh cấu hình sshd_config

Mở file cấu hình SSH bằng trình soạn thảo:

nano /etc/ssh/sshd_config

Tìm dòng #Port 22, bỏ dấu # và đổi thành:

Port 2222

Nếu file không có dòng Port, thêm mới vào cuối file. Lưu file lại bằng Ctrl+O, Enter, rồi Ctrl+X để thoát.

Trước khi restart, kiểm tra cú pháp cấu hình để tránh lỗi khiến SSH không khởi động được:

sshd -t

Không có output nghĩa là cấu hình đúng. Nếu có lỗi, nó sẽ hiện ngay dòng nào sai, sửa lại rồi chạy sshd -t lần nữa cho đến khi sạch lỗi.

Bước 3 - Cấu hình firewall cho port mới

Đây là bước dễ gây mất kết nối nhất. Nếu firewall đang chặn port mới, sau khi restart SSH bạn sẽ không vào được VPS bằng phiên mới. Mở port mới trước khi restart SSH.

Với Ubuntu/Debian dùng ufw

Kiểm tra trạng thái ufw:

ufw status

Nếu output là Status: active, mở port mới:

ufw allow 2222/tcp

Nếu bạn muốn chặn hẳn port 22 cũ sau khi đã xác nhận port mới hoạt động:

ufw delete allow 22/tcp

Nếu ufw đang inactive, bạn có thể bỏ qua bước này hoặc bật ufw lên. Kiểm tra lại sau khi đã mở port:

ufw status numbered

Với AlmaLinux 9 dùng firewalld

Kiểm tra firewalld và mở port mới:

firewall-cmd --state
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

Xác nhận port đã mở:

firewall-cmd --list-ports

Nếu muốn xóa port 22 cũ sau khi xác nhận:

firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload

Cập nhật SELinux trên AlmaLinux 9

AlmaLinux 9 bật SELinux enforcing mặc định, sẽ chặn sshd bind vào port không phải 22. Kiểm tra SELinux có bật không:

getenforce

Nếu output là Enforcing, cần cho phép port mới:

semanage port -a -t ssh_port_t -p tcp 2222

Nếu chưa có semanage, cài gói policycoreutils-python-utils:

dnf install -y policycoreutils-python-utils

Kiểm tra SELinux đã nhận port mới chưa:

semanage port -l | grep ssh

Output sẽ hiện ssh_port_t tcp 2222 cùng với port 22.

Bước 4 - Restart SSH và test kết nối mới

Restart dịch vụ SSH để áp dụng cấu hình:

systemctl restart sshd

Trên Ubuntu/Debian dùng ssh, trên AlmaLinux dùng sshd, cả hai đều hoạt động vì service name giống nhau trên các bản mới.

Kiểm tra trạng thái dịch vụ:

systemctl status sshd

Output mong đợi có dòng active (running). Kiểm tra sshd đang listen trên port mới:

ss -tlnp | grep sshd

Sẽ thấy dòng tương tự LISTEN 0 128 0.0.0.0:2222[::]:2222 cho IPv6.

Quan trọng: trước khi đóng phiên SSH hiện tại, mở một terminal mới và thử kết nối bằng port mới:

ssh -p 2222 user@your_server_ip

Kết nối thành công rồi mới đóng phiên cũ. Nếu kết nối thất bại, bạn vẫn còn phiên cũ để sửa lại cấu hình, tránh tình trạng khóa mình ngoài VPS.

Bước 5 - Cấu hình SSH client để kết nối nhanh (tùy chọn)

Nếu bạn kết nối từ máy tính cá nhân thường xuyên, tạo file config cho SSH client để không phải gõ -p 2222 mỗi lần. Trên máy local, chỉnh file ~/.ssh/config:

Host myserver
    HostName your_server_ip
    Port 2222
    User root
    IdentityFile ~/.ssh/id_ed25519

Sau đó chỉ cần gõ ssh myserver là kết nối, mọi thông số đã tự động. Cách này hữu ích khi quản lý nhiều VPS với các port khác nhau.

Nếu bạn đang dùng VPS Ubuntu Server và kết nối từ Windows, dùng PuTTY thì nhớ điền port mới vào ô Port trong mục Session trước khi Save.

Xử lý lỗi thường gặp khi đổi port SSH

Mất kết nối SSHJ khi đổi port

Nguyên nhân thường gặp nhất là firewall chưa mở port mới hoặc SELinux chặn. Nếu bạn vẫn còn phiên SSH cũ, kiểm tra firewall và SELinux ngay. Nếu đã mất cả phiên cũ, dùng tính năng console VNC/web console từ trang quản trị của nhà cung cấp VPS để truy cập và sửa lại. Hầu hết các gói VPS hiện nay đều có sẵn tính năng này.

SSH service không khởi động được sau khi sửa config

Kiểm tra lỗi bằng lệnh:

journalctl -u sshd -n 30

Lỗi phổ biến là sai cú pháp trong sshd_config, ví dụ dòng Port bị lặp hai lần với giá trị khác nhau. sshd chỉ dùng giá trị đầu tiên, dòng sau bị bỏ qua. Chạy sshd -t để tìm và sửa lỗi cú pháp.

Port mới không listen dù đã restart

Kiểm tra SELinux trên AlmaLinux, kiểm tra firewalld đã reload chưa. Nếu dùng ufw, kiểm tra ufw status xem port mới đã được allow. Đôi khi systemctl restart sshd không đọc lại config do service đang bị lỗi, thử systemctl stop sshd && systemctl start sshd.

Câu hỏi thường gặp

Đổi port SSH có làm VPS an toàn rất cao không?

Không, đổi port chỉ giảm lượng tấn công tự động từ bot quét. Kẻ tấn công có chủ đích vẫn quét toàn bộ port và phát hiện SSH đang chạy trên port lạ. Cần kết hợp thêm SSH key, tắt đăng nhập root bằng mật khẩu, và cài fail2ban để bảo vệ toàn diện.

Nên chọn port SSH mới là bao nhiêu?

Chọn port trong khoảng 1024-49151, tránh port 80, 443, 3306, 5432 và các port dịch vụ phổ biến khác. Port 2222 dễ nhớ nhưng cũng dễ bị bot thử. Port 4 chữ số hoặc 5 chữ số ngẫu nhiên như 38712, 45220 khó bị đoán hơn.

Đổi port SSH có ảnh hưởng đến các dịch vụ khác không?

Không ảnh hưởng trực tiếp. SSH là giao thức riêng, đổi port chỉ thay đổi nơi sshd lắng nghe kết nối. Các dịch vụ web, database vẫn hoạt động bình thường. Chỉ cần đảm bảo port mới không trùng với port dịch vụ khác đang chạy.

Làm sao để kết nối SSH từ máy tính khi đã đổi port?

Dùng lệnh ssh -p port_mới user@ip_vps. Với PuTTY trên Windows, điền port mới vào ô Port trong Session rồi Save. Nếu dùng SSH config trên Linux/macOS, thêm dòng Port port_mới vào mục tương ứng.

Có cần đổi port SSH cho mọi VPS không?

Không bắt buộc nhưng nên làm nếu VPS có IP public và bạn lo ngại bị quét brute-force. Với VPS chỉ có IP private hoặc trong mạng nội bộ, mức độ rủi ro thấp hơn nhưng vẫn nên đổi nếu có thể.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.