Cơn ác mộng mang tên Brute-force SSH
Cứ mỗi giây trôi qua, hàng nghìn con bot đang miệt mài “gõ cửa” port 22 trên các server Linux khắp thế giới. Nếu bạn đang quản trị một VPS có IP công khai, hãy thử kiểm tra log bảo mật. Bạn sẽ thấy những con số giật mình: hàng chục nghìn nỗ lực đăng nhập trái phép mỗi ngày. Qua quá trình audit cho hơn 10 hệ thống thực tế, mình nhận thấy bot quét liên tục với các username phổ biến như admin, root hay test.
Giải pháp phổ biến nhất hiện nay là dùng Fail2ban để chặn IP. Tuy nhiên, Fail2ban chỉ đơn giản là ngắt kết nối. Kẻ tấn công bị chặn ở đây sẽ ngay lập tức chuyển sang mục tiêu khác. Vậy tại sao chúng ta không thử “giam lỏng” chúng? Thay vì đuổi đi, hãy nhốt chúng vào một cái bẫy không lối thoát mang tên Endlessh.
Endlessh là gì? Sức mạnh của SSH Tarpit
Hãy tưởng tượng Endlessh như một bãi lầy (tarpit) kỹ thuật số. Cách vận hành của nó đơn giản đến mức khó tin nhưng lại cực kỳ hiệu quả. Khi bot kết nối vào port SSH, thay vì yêu cầu mật khẩu, Endlessh sẽ gửi những dòng banner giới thiệu dài lê thê và cực kỳ chậm chạp.
Theo giao thức SSH, client phải đợi nhận hết banner từ server mới được bắt đầu xác thực. Endlessh tận dụng kẽ hở này để gửi mỗi dòng văn bản cách nhau khoảng 10 giây. Con bot phía bên kia sẽ rơi vào trạng thái chờ đợi vô tận. Nó không thể tiến tới bước nhập pass, cũng không chủ động ngắt kết nối vì tưởng rằng server chỉ đang phản hồi chậm do nghẽn mạng.
Một kết nối có thể bị “giam lỏng” suốt vài ngày. Điều này buộc kẻ tấn công phải tiêu tốn tài nguyên cho các socket vô nghĩa. Hiệu suất của mạng lưới botnet vì thế mà giảm sút đáng kể.
Các bước triển khai thực tế
Trước khi bắt tay vào làm, mình có một lưu ý sống còn. Bạn phải đổi port SSH thật sang một số khác (ví dụ 2222) trước khi cài Endlessh lên port 22. Nếu quên bước này, chính bạn sẽ là người bị nhốt ngoài server của mình.
Bước 1: Di dời port SSH thật
Đầu tiên, hãy mở file cấu hình SSH:
sudo nano /etc/ssh/sshd_config
Tìm dòng #Port 22, bỏ dấu comment và đổi thành port mới:
Port 2222
Sau đó, hãy mở port này trên firewall và khởi động lại dịch vụ. Đừng thoát session hiện tại cho đến khi bạn chắc chắn đã login được bằng port mới.
sudo ufw allow 2222/tcp
sudo systemctl restart ssh
Bước 2: Cài đặt Endlessh
Với Ubuntu hoặc Debian, Endlessh đã có sẵn trong kho ứng dụng chính thức. Việc cài đặt chỉ mất vài giây:
sudo apt update
sudo apt install endlessh
Nếu bạn dùng các distro khác hoặc muốn tự build từ mã nguồn để tối ưu, hãy dùng Git:
git clone https://github.com/skeeto/endlessh
cd endlessh
make
sudo cp endlessh /usr/local/bin/
Bước 3: Thiết lập thông số bẫy
File cấu hình thường nằm tại /etc/endlessh/config. Nếu chưa có, bạn hãy tạo mới. Dưới đây là bộ cấu hình mình đã tinh chỉnh để đạt hiệu quả cao nhất mà vẫn nhẹ máy:
# Lắng nghe trên port 22 tiêu chuẩn
Port 22
# Gửi một dòng banner sau mỗi 10 giây (10000ms)
Delay 10000
# Giới hạn độ dài mỗi dòng để tiết kiệm băng thông
MaxLineLength 32
# Chấp nhận tối đa 4096 kết nối cùng lúc
MaxClients 4096
LogLevel 1
Bước 4: Cấp quyền và chạy Service
Thông thường, chỉ quyền root mới được dùng port dưới 1024. Để an toàn, chúng ta sẽ dùng setcap để Endlessh chạy được trên port 22 mà không cần đặc quyền root:
sudo setcap 'cap_net_bind_service=+ep' /usr/bin/endlessh
Kế tiếp, tạo file quản lý dịch vụ bằng Systemd:
sudo nano /lib/systemd/system/endlessh.service
Dán nội dung sau vào file:
[Unit]
Description=Endlessh SSH Tarpit
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/endlessh -f /etc/endlessh/config
KillMode=mixed
Restart=always
User=nobody
Group=nogroup
[Install]
WantedBy=multi-user.target
Kích hoạt bẫy bằng lệnh:
sudo systemctl enable endlessh
sudo systemctl start endlessh
Kiểm tra hiệu quả thực tế
Để biết bẫy có hoạt động hay không, hãy thử kết nối vào port 22 từ một máy khác:
ssh -p 22 user@your-server-ip -v
Bạn sẽ thấy terminal đứng im. Nhờ flag -v, bạn sẽ thấy các dòng ký tự ngẫu nhiên xuất hiện nhỏ giọt sau mỗi 10 giây. Để xem danh sách “nạn nhân”, hãy dùng lệnh soi log:
journalctl -u endlessh -f
Mình từng ghi nhận một con bot lỳ lợm bám trụ trong bẫy tới 120.000 giây (hơn 33 tiếng). Nhìn kẻ tấn công phí hoài thời gian thay vì phá hoại hệ thống mang lại cảm giác rất thỏa mãn.
Lời kết
Dù Endlessh rất thú vị, nó không phải là “viên đạn bạc”. Bạn vẫn cần duy trì các lớp bảo mật cốt lõi như dùng SSH Key, bật 2FA và giới hạn IP Whitelist. Endlessh đóng vai trò như một lớp gây nhiễu tâm lý. Nó cực kỳ hiệu quả trong việc quét sạch những đợt tấn công đại trà, giúp server của bạn trở nên yên tĩnh hơn giữa môi trường mạng đầy rẫy rủi ro.

