Hướng dẫn khắc phục lỗi Spam Mail trên VPS
Rất nhiều người thuê VPS hoặc máy chủ vật lý không có (hoặc rất ít) kiển thức quản lý máy chủ. Họ chỉ quản trị dựa vào các Control Panel như Cpanel hay DirectAdmin, hoặc sự hỗ trợ của kỹ thuật của các nhà cung cấp dịch vụ. Bài viết này cung cấp một số cách tìm kiếm một user trong vps spam mail chạy DirectAdmin hoặc Exim.
Nhận biết:
- VPS của bạn tự nhiên chậm, RAM và CPU tăng cao
- Email không đến được người nhận
- DirectAdmin thông báo lượng mail gửi ra nhiều
- Địa chỉ IP bị Blacklist
Nguyên nhân:
- Nếu là máy chủ website có thể source code bạn có vấn đề. Hãy chắc chắn rằng các module, plugin, theme là đáng tin cậy.
- SMTP spam: Có thể tài khoản nào đó bị đánh cắp
- User chủ động spam mail ra ngoài (Email Marketing)
Cách xác định:
# exim -bpc // số lượng mail queue. Nếu lượng mail queue > 100 mail thì chắc chắn vps của bạn đang spam ra ngoài.
# exim -bp / danh sách mail trong mail queue. Tại đây bạn sẽ thấy user nào đang spam ra ngoài.
Bạn cũng có thể kiểm tra log bằng lệnh:
# cd/var/log/exim
# tail -n 100 mainlog |more
hoặc
tail -n 10000 mainlog |grep [email protected] |more // lệnh này sẽ liệt kê log theo user được truy vấn
Để xem nội dung mail dùng lệnh sau:
# exim -Mvh [id] // id dạng 1VwdCb-0001ze-5c
Xoá một mail đang nằm trong Queue:
# exim -Mrm {message-id}
Xoá toàn bộ email đang có trong Queue:
# exim -bp | awk ‘{ print $3 }’ | xargs exim -Mrm
Gửi toàn bộ email đang có trong Queue:
# /usr/sbin/exim -bp |awk ‘{print $3}’ | xargs -n 1 -P 40 /usr/sbin/exim -v -M
Tìm nguồn spam
Giả sử rằng sau một loạt câu lệnh trên bạn đã tìm được user nào đang spam. Việc làm đầu tiên là bạn nên suspend tài khoản đó để tạm dừng việc spam. Sau đó bạn vào source code của user đó:
# cd /home/username/domains/example.com/public_html
Cách tốt nhất là bạn download source code về máy dùng các trình antivirus để quét. Đừng quên backup lại một bản vì có thể khi quét sẽ mất file làm hỏng source. Thường thì các file mã độc này sẽ được mã hóa. Tuy nhiên bạn có thể tìm nhanh bằng câu lệnh sau:
# find . -name ‘*.php’ | while read FILE; do if grep ‘eval(base64_decode’ “$FILE”; then echo “$FILE” >> filemadoc; fi ; done
hoặc
# find . -name ‘*.php’ | while read FILE; do if grep ‘eval(base64_decode’ “$FILE”; then echo “$FILE”; fi ; done