Tổng quan.
Nếu bạn thấy nhiều kết nối ssh bị reset hoặc log hiển thị nhiều lần kex_exchange_identification: read: Connection reset by peer
, thì có khả năng cao bạn đang bị quét SSH (brute-force attack hoặc port scanning).

shell> ssh root@192.168.1.1
kex_exchange_identification: read: Connection reset by peer
Connection reset by 192.168.1.1 port 22
Nguyên nhân.
Server của bạn đang bị scan SSH hoặc bị giới hạn kết nối SSH do một trong các lý do sau:
- SSH bị scan trên Layer 4:
- Điều này xảy ra ở Layer 4 (Transport Layer) của mô hình OSI, vì nó liên quan đến giao tiếp TCP và kiểm tra mở/đóng port.
- Hacker có thể dùng
nmap
,masscan
hoặc botnet để dò port 22 trên địa chỉ IP WAN của bạn.
- Port 22 không nên NAT ra môi trường internet dù là thử nghiệm:
- Mặc định, SSH listen trên port 22, nên đây là mục tiêu phổ biến của attacker.
- Giải pháp tốt hơn:
- Dùng VPN (WireGuard/OpenVPN) để truy cập SSH qua mạng nội bộ.
- Hạn chế SSH chỉ cho phép một dải IP cụ thể (
AllowUsers
hoặcAllowGroups
trongsshd_config
). - Đổi port SSH sang một port không phổ biến (dù không phải là giải pháp bảo mật chính, nhưng sẽ giúp giảm số lượng scan).
- Dùng fail2ban để chặn IP có nhiều lần thử sai.
- Chỉ cho phép SSH key authentication (vô hiệu hóa password login).
- Bảo mật theo Layer trong OSI Model:
- Layer càng thấp bị lủng, hậu quả càng nghiêm trọng. Nếu Layer 4 (TCP/UDP) bị tấn công, toàn bộ các dịch vụ chạy trên nó (Layer 7: SSH, HTTP, database, v.v.) sẽ bị ảnh hưởng.
- Nếu bị chiếm quyền điều khiển Layer 3 (Network Layer) (ví dụ, ARP poisoning, BGP hijacking), attacker có thể reroute toàn bộ traffic.
Bạn nên kiểm tra log /var/log/auth.log
(Ubuntu/Debian) hoặc /var/log/secure
(CentOS/RHEL) để xem có cuộc tấn công nào đáng lo ngại không.
Cách khắc phục.
Nếu bị chặn bởi fail2ban, bạn có thể gỡ chặn bằng:
sudo fail2ban-client unban <IP-của-bạn>
Nếu firewall chặn, mở lại port 22:
sudo iptables -D INPUT -p tcp --dport 22 -j DROP
Nếu server của bạn có quá nhiều kết nối SSH cùng lúc, nó có thể từ chối kết nối mới. Xem số lượng kết nối SSH:
sudo netstat -tnpa | grep :22
Kiểm tra giới hạn MaxStartups
trong SSH:
sudo cat /etc/ssh/sshd_config | grep MaxStartups
Nếu MaxStartups
bị đặt quá thấp (ví dụ MaxStartups 3
), sửa lại:
sudo nano /etc/ssh/sshd_config
Tìm dòng:
MaxStartups 10:30:100
Lưu lại, rồi restart SSH:
sudo systemctl restart sshd
SSH bị scan hoặc tấn công brute-force, có thể IP của bạn bị chặn do bị scan quá nhiều từ các địa chỉ lạ. Kiểm tra log:
sudo journalctl -u sshd --no-pager | tail -n 50
Nếu thấy nhiều dòng giống thế này:
Failed password for root from xxx.xxx.xxx.xxx port 22 ssh2
Connection closed by xxx.xxx.xxx.xxx port 22
Thì server của bạn có thể đang bị scan SSH. Khắc phục bằng cách chặn IP lạ bằng fail2ban hoặc firewall:
sudo fail2ban-client set sshd banip <IP>
Hoặc chặn hoàn toàn bằng iptables:
sudo iptables -A INPUT -s <IP> -j DROP
Đổi port SSH sang port khác (không phải 22)
sudo nano /etc/ssh/sshd_config
Tìm dòng Port 22
, đổi thành:
Port 2222
Rồi restart SSH:
sudo systemctl restart sshd
Chỉ cho phép SSH từ IP đáng tin cậy, lúc này bạn chỉ SSH từ một số IP cố định, thêm rule iptables:
sudo iptables -A INPUT -p tcp --dport 22 -s <IP-CỦA-BẠN> -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
Nếu SSH daemon bị lỗi hoặc crash, bạn có thể thử restart:
sudo systemctl restart sshd
Nếu vẫn không được, kiểm tra lỗi SSH:
sudo systemctl status sshd
sudo journalctl -u sshd --no-pager | tail -n 50
Tóm tắt hướng xử lý.
🔹 Kiểm tra log (journalctl -u sshd
) để biết lý do bị từ chối.
🔹 Nếu bị fail2ban chặn, gỡ IP (fail2ban-client unban <IP>
).
🔹 Nếu bị giới hạn kết nối, tăng MaxStartups
.
🔹 Nếu bị scan SSH, đổi port SSH hoặc chặn IP lạ.
🔹 Nếu SSH daemon lỗi, restart (systemctl restart sshd
).