Xem ai đang đăng nhập VPS + lịch sử login (phát hiện hack sớm)
TL;DR
Lo VPS bị hack mà không biết check ở đâu? 4 lệnh dưới giúp bạn xem ai đang online, lịch sử login 30 ngày, và đếm số lần brute force attack — phát hiện xâm nhập trong 1 phút.
👤 Xem ai đang SSH ngay:
w,who📜 Lịch sử login:
last,lastlog🚨 Brute force attempts:
lastb,/var/log/auth.log🛡 Auto-ban:
fail2ban(cài 5 phút, chạy mãi)📱 Alert Telegram: script bash 30 dòng
Vì sao phải monitor login mỗi ngày?
VPS public IP = tự động bị scan port 22 (SSH) 24/7. Trung bình 1 VPS mới mỗi 5 phút có 1 lần thử password root. Không monitor = ngày nào đó bot brute force trúng.
Pain point thực tế:
🔍 Không biết VPS đang có ai SSH → phát hiện chậm khi bị compromise
💸 Trả tiền VPS để mining crypto cho hacker mà không hay
📊 Log đầy “Failed password” mà không biết có nguy hiểm không
🎯 Bị blacklist IP vì server gửi mail spam (hacker sử dụng VPS làm botnet)
Bài này dạy bạn 4 lệnh + 1 tool + 1 script để bảo vệ VPS — không cần kiến thức security chuyên sâu.
💡 Mẹo: Setup 1 lần
fail2ban+ alert Telegram là 9/10 attack tự fail, bạn ngủ ngon.
4 lệnh login monitor cần nhớ
Tóm gọn: Mỗi lệnh trả lời 1 câu hỏi cụ thể — không lặp lại nhau.
| Lệnh | Trả lời | Khi nào dùng |
|---|---|---|
w | Ai đang SSH lúc này + làm gì | Check nhanh hàng ngày |
last | Lịch sử login thành công 30 ngày | Audit sau nghi ngờ |
lastlog | Lần login cuối của từng user | Tìm account đang bị dùng |
lastb | Lịch sử login THẤT BẠI | Đếm brute force attempts |
Lệnh w — Xem ai đang online NGAY BÂY GIỜ
Tóm gọn: Lệnh 1 ký tự, đầy đủ info: user, IP, thời gian login, đang chạy gì.
w
Output:
14:23:01 up 12 days, 3:42, 3 users, load average: 0.45, 0.62, 0.58
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 14.169.x.x 13:45 0.00s 0.05s 0.01s w
ubuntu pts/1 14.169.x.x 14:10 13:42 0.04s 0.02s -bash
root pts/2 103.241.x.x 02:30 12h11 20.5s 8.5s ./suspicious_script
3 dòng quan trọng:
USER — ai đang login
FROM — IP nguồn (so với IP của bạn để phát hiện lạ)
WHAT — đang chạy lệnh gì (👀 thấy
./suspicious_script= báo động đỏ)
⚠️ Warning: Phát hiện session từ IP lạ (vd IP nước ngoài 103.x trong khi bạn ở VN) + đang chạy script lạ = VPS đã bị compromise, ngắt mạng ngay.
Kill session đáng ngờ
# Lấy PID của shell từ output 'w'
ps -t pts/2 -o pid,comm
# Kill nguyên cây process của session
sudo pkill -KILL -t pts/2
Lệnh last — Lịch sử login 30 ngày
Tóm gọn: Audit ai đã từng login, từ IP nào, lúc nào.
last -F | head -20
Output:
ubuntu pts/0 14.169.10.20 Mon May 12 13:45:01 2026 - still logged in
ubuntu pts/1 14.169.10.20 Mon May 12 12:30:11 2026 - 12:48 (00:17)
root pts/0 103.241.99.5 Mon May 12 02:30:00 2026 - 14:22 (11:52)
ubuntu pts/0 14.169.10.20 Sun May 11 18:00:33 2026 - 19:30 (01:29)
reboot system boot Tue Apr 29 11:00:00 2026
Cột:
USER + TTY — ai login, qua kênh nào
FROM — IP nguồn
LOGIN time + duration
rebootrows = lúc VPS khởi động
Filter theo user
last -F ubuntu | head -10 # chỉ user ubuntu
last -F root | head -10 # chỉ root (PHẢI ÍT NHẤT CÓ THỂ)
⚠️ Pitfall: Thấy
rootlogin từ IP lạ → 100% bị hack. Disable root login ngay (sẽ hướng dẫn bài về SSH hardening).
Tìm login từ IP cụ thể
last -F | grep "103.241.99.5"
Đếm số lần IP đó login thành công.
Lệnh lastb — Brute force attempts (login THẤT BẠI)
Tóm gọn: Số dòng = số lần bot/hacker đã thử password sai. Càng cao = càng nguy hiểm.
sudo lastb -F | head -20
Output:
admin ssh:notty 220.181.x.x Mon May 12 14:00:11 2026 - 14:00:11 (00:00)
root ssh:notty 180.76.x.x Mon May 12 13:58:30 2026 - 13:58:30 (00:00)
test ssh:notty 222.111.x.x Mon May 12 13:55:22 2026 - 13:55:22 (00:00)
oracle ssh:notty 103.x.x.x Mon May 12 13:50:01 2026 - 13:50:01 (00:00)
postgres ssh:notty 61.177.x.x Mon May 12 13:45:33 2026 - 13:45:33 (00:00)
Username admin, root, test, oracle, postgres = bot scan database default credentials.
Đếm tổng số attempt
sudo lastb | wc -l
Kết quả thường gặp:
< 100/ngày → bình thường, internet noise
100-1000/ngày → trong target list, nên cài fail2ban
> 1000/ngày → đang bị focus attack, đổi port SSH ngay
Top 10 IP brute force nhiều nhất
sudo lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head -10
Output:
342 220.181.205.42
287 180.76.15.30
156 222.111.190.11
...
Có thể block thủ công IP top trong UFW:
sudo ufw insert 1 deny from 220.181.205.42
Bonus 1 — Setup fail2ban auto-ban brute force
Tóm gọn: Cài 5 phút, chạy mãi. 9/10 brute force attack sẽ tự bị ban sau 5 lần fail.
sudo apt install fail2ban -y # Ubuntu/Debian
sudo dnf install fail2ban -y # AlmaLinux/Rocky
sudo systemctl enable --now fail2ban
Tạo file config riêng cho SSH:
sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = 22
logpath = /var/log/auth.log
EOF
sudo systemctl restart fail2ban
Tham số:
maxretry 5— sai password 5 lần trong 10 phút → banbantime 24h— ban 24 giờfindtime 10m— window đếm 10 phút
Check fail2ban đang ban ai
sudo fail2ban-client status sshd
Output:
Status for the jail: sshd
|- Filter
| |- Currently failed: 12
| |- Total failed: 8541
|- Actions
|- Currently banned: 47
`- Banned IP list: 220.181.x.x 180.76.x.x ...
Currently banned: 47 — fail2ban đang giúp bạn block 47 IP độc hại ngay lúc này.
Unban IP (vô tình ban nhầm)
sudo fail2ban-client set sshd unbanip 14.169.10.20
Bonus 2 — Alert Telegram khi có login mới
Tóm gọn: Mỗi khi ai SSH thành công, Telegram bot ping ngay. Phát hiện hack realtime.
Bước 1 — Tạo bot Telegram:
- Chat với @BotFather
/newbot→ đặt tên → nhận TOKEN- Chat 1 tin nhắn cho bot, lấy chat_id ở:
https://api.telegram.org/bot<TOKEN>/getUpdates
Bước 2 — Hook vào SSH login PAM:
sudo tee /etc/profile.d/ssh-alert.sh > /dev/null <<'EOF'
#!/bin/bash
# Chỉ alert khi SSH login (không alert local)
[ -z "$SSH_CLIENT" ] && return
TOKEN="<dán_token_của_bạn>"
CHAT_ID="<dán_chat_id>"
IP=$(echo "$SSH_CLIENT" | awk '{print $1}')
USER=$(whoami)
HOST=$(hostname)
TIME=$(date '+%Y-%m-%d %H:%M:%S')
MSG="🔐 SSH LOGIN: $USER@$HOST from $IP @ $TIME"
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d "chat_id=$CHAT_ID" \
-d "text=$MSG" > /dev/null &
EOF
sudo chmod +x /etc/profile.d/ssh-alert.sh
Log out → log in lại → kiểm tra Telegram. Mỗi lần SSH thành công sẽ có alert kèm IP + time.
💡 Mẹo: Customize thêm dòng cảnh báo nếu IP không phải IP nhà bạn (vd
[ "$IP" != "14.169.x.x" ] && MSG="⚠️ $MSG").
Sai lầm phổ biến
❌ Coi
lastb100+ entries là “đang bị hack” → không, đó là internet noise. Chỉ nguy hiểm khi maxretry chưa setup fail2ban.❌ Cho
rootlogin qua SSH password → bot brute force focus 100% vào userroot. Sửa: disablePermitRootLogintrong/etc/ssh/sshd_config.❌ Quên kiểm
wtrước khi đi ngủ → có session đáng ngờ chạy cả đêm. Sửa: aliaslh="last -F | head -10 && echo --- && w".❌ Cấu hình
fail2banbantime = 10m→ bot quay lại sau 10p, vô dụng. Sửa: dùng24hhoặc lâu hơn.❌ Setup alert Telegram nhưng quên test → 1 tháng sau phát hiện không nhận tin. Sửa: SSH thử ngay sau cài, verify nhận alert.
Routine 1 phút check security hàng ngày
# 1. Ai đang online?
w
# 2. Có ai login từ IP lạ trong 24h?
last -F | head -10
# 3. Tổng brute force hôm nay?
sudo lastb -s today | wc -l
# 4. fail2ban đang ban bao nhiêu IP?
sudo fail2ban-client status sshd | grep "Currently banned"
Lưu vào script vps-security:
sudo tee /usr/local/bin/vps-security > /dev/null <<'EOF'
#!/bin/bash
echo "═══ VPS SECURITY @ $(date '+%Y-%m-%d %H:%M') ═══"
echo ""
echo "▶ Online users:"
w | tail -n +2
echo ""
echo "▶ Last 5 logins:"
last -F | head -5
echo ""
echo "▶ Brute force today:"
echo " $(sudo lastb -s today 2>/dev/null | wc -l) failed attempts"
echo ""
echo "▶ fail2ban:"
sudo fail2ban-client status sshd 2>/dev/null | grep -E "Currently failed|Currently banned"
EOF
sudo chmod +x /usr/local/bin/vps-security
Mỗi sáng gõ vps-security → full report 1 giây.
Key takeaways
w— ai đang SSH ngay bây giờlast -F— lịch sử login 30 ngày (thành công)lastb— lịch sử login THẤT BẠI (brute force)fail2ban— auto-ban IP sau 5 lần failTelegram alert — realtime notification login mới
vps-securityscript — routine 1 lệnh mỗi sáng
Setup đủ 6 thứ này = 99% brute force tự fail, sếp ngủ ngon.
FAQ
Q: VPS mới mua đã thấy 50 attempts brute force trong 1 giờ — bình thường không?
A: Bình thường. IP public bị scan 24/7. Quan trọng là setup fail2ban + disable root login + đổi port 22 sang port khác (vd 2222).
Q: fail2ban có ban nhầm IP của tôi không?
A: Có thể nếu sếp gõ sai password 5 lần liên tiếp. Fix: dùng SSH key thay password (sai key không vào sshd jail), hoặc whitelist IP nhà:
[DEFAULT]
ignoreip = 127.0.0.1/8 14.169.10.20
Q: Có nên dùng port SSH khác 22 không?
A: Có. Đổi sang port 2200-65535 (random) giảm 90% brute force vì bot chủ yếu scan port 22 mặc định. Sửa trong /etc/ssh/sshd_config → Port 2222 → sudo systemctl restart ssh.
Q: Alert Telegram có lộ TOKEN không?
A: Có nguy cơ nếu file /etc/profile.d/ssh-alert.sh rò rỉ. Best practice: lưu TOKEN trong /root/.telegram-env (chmod 600), source vào script.
Q: Có giải pháp monitor VPS toàn diện hơn không?
A: Có. Netdata (free, 50MB RAM) — web UI realtime + alert email/Slack. Hoặc Wazuh SIEM cho enterprise. Bài tiếp theo sẽ hướng dẫn cài Netdata trên VPS 1GB.
Cần VPS Linux để setup security stack?
VSIS có VPS Linux từ 99k/tháng (Ubuntu 24.04 LTS), preinstall fail2ban + ufw sẵn — chỉ cần SSH vào enable là chạy.
👉 Đăng ký VPS Linux: vsis.net/vps
📺 Xem video 60 giây tóm tắt: link Reels (sẽ cập nhật)
📖 Bài tiếp theo: “tail -f, journalctl, multitail — đọc log Linux như pro” — đăng Thứ 2 tuần sau.



