Tuesday, March 11, 2025

Lỗi SSH connection reset by peer

-

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ặc AllowGroups trong sshd_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).

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories