Vì sao mình cứng hóa SSH (và bạn cũng nên vậy)?
Thú thật, mình từng để mặc định và log bị spam ác liệt. CPU có lúc nhảy như DJ. Từ ngày mình harden SSH, log sạch, tâm trí an yên. Bài này là công thức “mì ăn liền” mình dùng cho VPS CentOS: nhanh, gọn, an toàn, ít drama.
Checklist 60 giây trước khi làm
Đang có 1 phiên SSH mở sẵn để lỡ tay còn rollback được
Tài khoản có sudo hoặc root
Xác định IP máy chủ hoặc domain
Dùng
firewalldhayiptablescũng được, miễn rõ một đường
Bộ đồ nghề
OpenSSH Server: dịch vụ SSH mặc định. Tham khảo thêm ở OpenSSH
Firewall: Firewalld (Red Hat Docs)
Chống brute force: Fail2Ban
1) Chặn nhanh dải IP đang “gõ cửa” ầm ầm
Thấy log nhả ra 218.92.0.0/24? Chặn thẳng tay.
Với firewalld:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='218.92.0.0/24' reject"
firewall-cmd --reloadVới iptables:
iptables -A INPUT -s 218.92.0.0/24 -j DROP
service iptables save || trueGợi ý: Nếu cùng một nhà mạng spam nhiều dải, có thể nới subnet. Nhưng đừng lạm dụng nếu team bạn dùng IP vùng đó.
2) Cài Fail2Ban trên CentOS 7 và bật ngay jail sshd
Fail2Ban là “bảo vệ cửa” biết đọc log. Sai nhiều là cấm.
Cài đặt:
yum install -y epel-release
yum install -y fail2banTạo file cấu hình local:
nano /etc/fail2ban/jail.localĐặt cấu hình gọn gàng, vừa phải:
[sshd]
enabled = true
port = ssh
logpath = /var/log/secure
maxretry = 5
findtime = 10m
bantime = 1hKhởi động và bật cùng hệ thống:
systemctl enable --now fail2ban
systemctl status fail2ban --no-pagerMẹo test: cố tình nhập sai 5 lần trong 10 phút rồi fail2ban-client status sshd xem có ban chưa.
3) Đổi cổng SSH 22 → 2222 để bot bớt “dòm ngó”
Chỉnh cấu hình:
nano /etc/ssh/sshd_configThêm hoặc sửa:
Port 2222Mở cổng mới trên firewall:
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reloadRestart SSH và thử kết nối:
systemctl restart sshd
ssh -p 2222 username@your_server_ip4) Tắt đăng nhập root qua SSH cho bớt rủi ro
Dùng user thường + sudo, vẫn quyền lực mà bớt nguy cơ.
nano /etc/ssh/sshd_configĐảm bảo có:
PermitRootLogin noRồi restart:
systemctl restart sshd5) Xài SSH key, nói không với password
Key chuẩn thì brute force có mỏi tay cũng bó tay.
Tạo key trên máy cá nhân:
ssh-keygen -t ed25519 -C "your_email@example.com"Chép public key lên VPS:
ssh-copy-id -p 2222 -i ~/.ssh/id_ed25519.pub username@your_server_ipTắt password login trong SSHD:
nano /etc/ssh/sshd_configBật/tắt như sau:
PubkeyAuthentication yes
PasswordAuthentication noCuối cùng restart dịch vụ:
systemctl restart sshdThử login lại bằng key để chắc ăn.
6) Theo dõi “nhịp tim” hệ thống
Xem log bảo mật realtime:
tail -f /var/log/secureXem tình trạng jail sshd:
fail2ban-client status sshd7) Gỡ port 22 khi 2222 đã chạy mượt
Làm chậm mà chắc, tránh tự khóa mình ngoài cửa.
Sửa SSHD:
nano /etc/ssh/sshd_configGiữ lại 2222, comment 22:
#Port 22
Port 2222Gỡ cổng 22 khỏi firewall:
firewall-cmd --permanent --remove-port=22/tcp
firewall-cmd --reloadRestart và thử login:
systemctl restart sshd
ssh -p 2222 username@your_server_ipDrama thường gặp và cách “dập lửa” nhanh
Quên mở firewall cho cổng mới: thêm
--add-port=PORT/tcprồi--reloadSSH restart lỗi vì config: chạy
sshd -tđể kiểm tra syntax trướcTự khóa chính mình: luôn giữ 1 phiên SSH mở để rollback
Fail2Ban “im lặng”: soát lại
logpath,maxretry,findtime, log có đúng/var/log/securechưa
Tài liệu đáng tin để đào sâu
OpenSSH: OpenSSH
Firewalld (Red Hat Docs): Red Hat Documentation
Fail2Ban: Fail2Ban Documentation
SELinux và SSH: Red Hat Docs