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
firewalld
hayiptables
cũ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 --reload
Với iptables:
iptables -A INPUT -s 218.92.0.0/24 -j DROP
service iptables save || true
Gợ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 fail2ban
Tạ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 = 1h
Khởi động và bật cùng hệ thống:
systemctl enable --now fail2ban
systemctl status fail2ban --no-pager
Mẹ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_config
Thêm hoặc sửa:
Port 2222
Mở cổng mới trên firewall:
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
Restart SSH và thử kết nối:
systemctl restart sshd
ssh -p 2222 username@your_server_ip
4) 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 no
Rồi restart:
systemctl restart sshd
5) 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_ip
Tắt password login trong SSHD:
nano /etc/ssh/sshd_config
Bật/tắt như sau:
PubkeyAuthentication yes
PasswordAuthentication no
Cuối cùng restart dịch vụ:
systemctl restart sshd
Thử 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/secure
Xem tình trạng jail sshd:
fail2ban-client status sshd
7) 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_config
Giữ lại 2222, comment 22:
#Port 22
Port 2222
Gỡ cổng 22 khỏi firewall:
firewall-cmd --permanent --remove-port=22/tcp
firewall-cmd --reload
Restart và thử login:
systemctl restart sshd
ssh -p 2222 username@your_server_ip
Drama 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/tcp
rồi--reload
SSH 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/secure
chư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