Giám sát đăng nhập bất thường để secure Ubuntu server bằng auditd và logwatch
Một Ubuntu server thường không bị “hack” bằng kỹ thuật quá phức tạp. Nhiều sự cố bắt đầu từ SSH mở public, mật khẩu yếu, key lộ, user cũ chưa xoá, bot brute-force, đăng nhập ngoài giờ, IP lạ, hoặc leo quyền qua sudo. Vấn đề: nếu không giám sát, bạn chỉ biết khi đã muộn.
– auditd → ghi nhận sự kiện bảo mật cấp hệ thống. – logwatch → tổng hợp log hằng ngày, gửi báo cáo dễ đọc. – Kết hợp → phát hiện đăng nhập bất thường, hành vi đáng nghi, sai lệch auth.
Mục tiêu bài này: cấu hình Ubuntu server để theo dõi login, SSH, sudo, thay đổi file nhạy cảm; nhận báo cáo định kỳ; có checklist xử lý khi thấy dấu hiệu lạ.
1. Tư duy giám sát đăng nhập bất thường
Đăng nhập bất thường không chỉ là “login failed”. Cần nhìn rộng hơn:
– Nhiều lần SSH failed từ 1 IP → brute-force.
– Đăng nhập thành công từ IP lạ → credential/key có thể lộ.
– Login ngoài khung giờ thường lệ → rủi ro.
– User không dùng lâu bỗng login → nghi vấn.
– sudo bất thường → leo quyền.
– Sửa /etc/passwd, /etc/shadow, /etc/sudoers → cực nhạy cảm.
– Thêm SSH key vào authorized_keys → persistence.
– Đăng nhập root trực tiếp → cấu hình nguy hiểm.
Log quan trọng trên Ubuntu:
/var/log/auth.log
/var/log/syslog
/var/log/audit/audit.logTrong đó:
– auth.log → SSH, PAM, sudo, su.
– audit.log → auditd events.
– logwatch → đọc nhiều log → báo cáo.
2. Cài auditd và logwatch
Cập nhật hệ thống:
sudo apt update
sudo apt install auditd audispd-plugins logwatch mailutils -yBật auditd:
sudo systemctl enable auditd
sudo systemctl start auditd
sudo systemctl status auditdKiểm tra audit subsystem:
sudo auditctl -sKết quả nên có:
enabled 1Nếu enabled 0 → audit chưa bật đúng.
3. Cấu hình auditd theo dõi đăng nhập, sudo, file nhạy cảm
Rule auditd nên đặt tại:
/etc/audit/rules.d/Tạo file riêng:
sudo nano /etc/audit/rules.d/login-monitor.rulesThêm rules:
-w /var/log/auth.log -p wa -k authlog
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
-w /home/ -p wa -k home_changes
-w /root/.ssh/authorized_keys -p wa -k root_ssh_key
-w /etc/ssh/sshd_config -p wa -k ssh_config
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
-a always,exit -F arch=b32 -S execve -F euid=0 -k root_commands
Ý nghĩa:
– authlog → thay đổi auth log.
– identity → sửa user/group/password DB.
– sudoers → thay đổi quyền sudo.
– root_ssh_key → thêm/sửa SSH key root.
– ssh_config → sửa cấu hình SSH.
– root_commands → lệnh chạy với quyền root.
Nạp lại rules:
sudo augenrules --load
sudo systemctl restart auditdKiểm tra:
sudo auditctl -l4. Truy vấn auditd: phát hiện dấu hiệu bất thường
Tìm thay đổi user/group:
sudo ausearch -k identityTìm sửa sudoers:
sudo ausearch -k sudoersTìm sửa SSH config:
sudo ausearch -k ssh_configTìm lệnh root:
sudo ausearch -k root_commandsBáo cáo tóm tắt:
sudo aureportBáo cáo auth:
sudo aureport -auBáo cáo lệnh thực thi:
sudo aureport -xXem theo thời gian:
sudo ausearch -k root_commands --start todayHoặc:
sudo ausearch -k identity --start recentĐiểm cần chú ý:
– Lệnh root chạy ngoài giờ.
– User lạ gọi sudo.
– Thay đổi /etc/shadow.
– authorized_keys bị sửa.
– sshd_config bị đổi, ví dụ bật PermitRootLogin yes.
5. Theo dõi SSH login bằng auth.log
Xem login SSH thành công:
grep "Accepted" /var/log/auth.logXem failed login:
grep "Failed password" /var/log/auth.logTop IP brute-force:
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | headLogin thành công theo IP:
grep "Accepted" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nrTheo dõi realtime:
sudo tail -f /var/log/auth.logDấu hiệu nguy hiểm:
Accepted password for root
Accepted publickey for root
Failed password for invalid user
sudo: pam_unix(sudo:auth): authentication failure
session opened for user rootNếu thấy Accepted từ IP lạ → ưu tiên xử lý ngay.
6. Cấu hình logwatch gửi báo cáo hằng ngày
File config chính:
/usr/share/logwatch/default.conf/logwatch.confKhông sửa trực tiếp. Copy sang /etc:
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
sudo nano /etc/logwatch/conf/logwatch.confCấu hình mẫu:
Output = mail
Format = text
MailTo = [email protected]
MailFrom = logwatch@your-server
Range = yesterday
Detail = High
Service = AllTest report:
sudo logwatch --detail High --range today --service sshd --printGửi mail test:
echo "test mail" | mail -s "Logwatch test" [email protected]Nếu server không gửi được mail, dùng SMTP relay như Postfix + Gmail/SES/Mailgun. Tối thiểu, có thể chạy logwatch thủ công:
sudo logwatch --detail High --range yesterday --printCron mặc định thường có sẵn:
/etc/cron.daily/00logwatchKiểm tra:
ls -l /etc/cron.daily/00logwatch7. Những mục cần đọc trong báo cáo logwatch
Trong email logwatch, tập trung các phần:
SSHD
Cần xem:
– Failed logins. – Invalid users. – Successful logins. – Root login attempts. – IP lặp lại nhiều lần.
Ví dụ đáng nghi:
Illegal users from:
203.0.113.10: 120 times
Users logging in through sshd:
deploy:
198.51.100.8
root:
203.0.113.77
root login từ IP lạ → incident.
Sudo
Cần xem:
– Ai chạy sudo. – Chạy lệnh gì. – Thời điểm nào. – Có failed sudo không.
Ví dụ:
user1 : TTY=pts/0 ; PWD=/tmp ; USER=root ; COMMAND=/bin/bashsudo bash từ /tmp → cần kiểm tra.
PAM / Authentication
Cần xem:
– Auth failure tăng đột biến. – User không tồn tại. – Session mở/đóng bất thường.
8. Quy trình phản ứng khi phát hiện login bất thường
Khi thấy IP lạ login thành công, đừng chỉ xoá log hay reboot. Làm theo thứ tự:
1. Giữ bằng chứng
sudo cp /var/log/auth.log /root/auth.log.snapshot
sudo cp /var/log/audit/audit.log /root/audit.log.snapshot2. Xem user đang online
who
w
last
lastlog3. Khoá user nghi vấn
sudo passwd -l username4. Thu hồi SSH key nghi vấn
sudo nano /home/username/.ssh/authorized_keys5. Kiểm tra sudoers
sudo visudo -c
sudo grep -R "" /etc/sudoers /etc/sudoers.d/6. Chặn IP tạm thời
sudo ufw deny from 203.0.113.107. Xem lệnh root gần đây
sudo ausearch -k root_commands --start today8. Rotate credential
– Đổi password. – Thay SSH key. – Thu hồi token. – Kiểm tra CI/CD secret.
Nếu nghi server đã bị chiếm quyền root → ưu tiên dựng server sạch từ image tin cậy, restore data đã kiểm tra. Root compromise → không nên “vá tại chỗ”.
9. Hardening bổ sung cho SSH
Giám sát tốt, nhưng phòng thủ vẫn cần chặt.
Sửa SSH config:
sudo nano /etc/ssh/sshd_configKhuyến nghị:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers deploy adminKiểm tra config:
sudo sshd -tReload:
sudo systemctl reload sshBật UFW:
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw statusCài fail2ban:
sudo apt install fail2ban -yTạo jail SSH:
sudo nano /etc/fail2ban/jail.localMẫu:
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 5
bantime = 1h
findtime = 10mRestart:
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd10. Checklist vận hành hằng ngày
Mỗi ngày:
– Đọc email logwatch.
– Kiểm tra SSH successful login.
– Kiểm tra failed login tăng đột biến.
– So IP login với danh sách IP hợp lệ.
– Xem sudo commands bất thường.
– Xem audit key: identity, sudoers, ssh_config.
Mỗi tuần:
– Review user còn cần quyền SSH không.
– Kiểm tra authorized_keys.
– Kiểm tra sudoers.d.
– Update OS:
sudo apt update && sudo apt upgradeMỗi tháng:
– Diễn tập incident response. – Kiểm tra backup restore. – Rotate key quan trọng. – Rà lại firewall rules.
Kết luận thực tế
Secure Ubuntu server không chỉ là cài firewall rồi quên. Đăng nhập bất thường là tín hiệu sớm của brute-force, credential leak, insider risk, hoặc compromise. auditd giúp ghi nhận sự kiện sâu ở cấp hệ thống. logwatch giúp biến log dài khó đọc thành báo cáo hằng ngày dễ hành động.
Cấu hình tối thiểu nên có:
– auditd theo dõi auth.log, sudoers, passwd, shadow, sshd_config, authorized_keys.
– logwatch gửi mail mỗi ngày.
– SSH tắt root login, tắt password auth nếu có thể.
– fail2ban giảm brute-force.
– checklist phản ứng rõ ràng.
Nguyên tắc cuối: log không ngăn tấn công, nhưng giúp bạn biết chuyện gì xảy ra, khi nào, từ đâu, bởi ai. Biết sớm → xử lý nhanh → giảm thiệt hại.
Bình luận (0)
Chưa có bình luận. Hãy là người đầu tiên!