Cách xác định/chống Spam Mail trên VPS nhanh, dễ hiểu

Trong bài viết này, InterData sẽ hướng dẫn bạn cách xác định dấu hiệu, nguyên nhân và khắc phục lỗi Spam Mail trên VPS từng bước chi tiết nhất. Bạn có thể tham khảo.

Dấu hiệu nhận biết VPS bị Spam Mail

Có một số dấu hiệu rõ ràng cho thấy VPS của bạn đang gặp vấn đề spam mail:
  • Hiệu suất hệ thống giảm: VPS của bạn tự nhiên chậm đi, đồng thời RAM và CPU tăng cao.
  • Vấn đề gửi/nhận Email: Email không đến được người nhận.
  • Thông báo từ Control Panel: Nếu bạn sử dụng DirectAdmin, hệ thống sẽ thông báo lượng mail gửi ra ngoài nhiều.
  • Blacklist IP: Địa chỉ IP của VPS bị đưa vào danh sách đen (Blacklist).
Dấu hiệu nhận biết VPS bị Spam Mail
Dấu hiệu nhận biết VPS bị Spam Mail

Nguyên nhân dẫn đến VPS bị Spam Mail

Nguyên nhân VPS gửi thư rác thường xuất phát từ:
  • Lỗ hổng Source Code: Nếu máy chủ đang chạy website, source code có thể đang gặp vấn đề. Bạn cần đảm bảo các module, plugin, và theme đang sử dụng là đáng tin cậy.
  • Tài khoản bị đánh cắp (SMTP spam): Có thể một tài khoản email nào đó đã bị kẻ xấu đánh cắp thông tin đăng nhập và lợi dụng để spam.
  • Lạm dụng hàm mail(): Hàm mail() được enable (cho phép hoạt động) và bị lạm dụng để gửi thư rác.
  • User chủ động spam: Người dùng cố tình gửi mail ra ngoài với mục đích tiếp thị (Email Marketing)

Cách xác định và khắc phục VPS bị Spam Mail

Dưới đây là hướng dẫn chi tiết về cách xác định (nhận biết và kiểm tra) và các bước khắc phục khi VPS của bạn bị spam mail. Các bước này thường áp dụng cho các máy chủ sử dụng Control Panel như DirectAdmin hoặc Exim.

Cách xác định VPS bị Spam Mail

Để xác định cụ thể VPS có đang spam hay không và nguồn gốc của mail spam, bạn cần kiểm tra queue và log mail:

Bước 1: Kiểm tra số lượng mail trong queue:

Sử dụng lệnh sau để kiểm tra số lượng mail đang chờ gửi đi:

exim -bpc

Nếu con số trả về lớn hơn 100, điều đó đồng nghĩa với việc VPS đang thực hiện spam mail ra ngoài.

Bước 2: Kiểm tra danh sách mail trong queue:

Sử dụng lệnh này để liệt kê danh sách mail trong queue. Tại đây, bạn có thể biết cụ thể user account mail nào đang thực hiện spam:

exim -bp

Bước 3: Kiểm tra log mail:

Bạn có thể kiểm tra log để tìm kiếm chi tiết hơn về hoạt động gửi mail:

1. Di chuyển đến thư mục log:

cd /var/log/exim

2. Xem 100 dòng log cuối cùng: tail -n 100 mainlog |more.

3. Kiểm tra log theo một user cụ thể: tail -n 10000 mainlog |grep [email protected] |more //lệnh này sẽ liệt kê log theo user được truy vấn

Bước 4: Kiểm tra nội dung mail:

Để xem nội dung chi tiết của một mail đang nằm trong queue (xác định bằng ID), bạn sử dụng lệnh:

exim -Mvh [id] // id dạng 1YlI6V-0004K0-MT

Cách xác định và khắc phục VPS bị Spam Mail
Cách xác định và khắc phục VPS bị Spam Mail

Cách khắc phục VPS bị Spam Mail

Sau khi đã xác định được vấn đề, bạn có thể thực hiện các bước sau để khắc phục:

Bước 1: Xóa/Gửi mail trong queue

exim -Mrm {message-id} // xóa 1 mail trong queue, id dạng 1YlI6V-0004K0-MT
exim -bp | awk '{ print $3 }' | xargs exim -Mrm // xóa tòa bộ mail trong queue
exim -bpr | grep frozen | awk {'print $3'} | xargs exim -Mrm // xóa tòa bộ mail trong frozen
/usr/sbin/exim -bp |awk '{print $3}' | xargs -n 1 -P 40 /usr/sbin/exim -v -M //gửi toàn bộ mail trong queue

Bước 2: Config và dừng service Exim

Bạn có thể tạm dừng dịch vụ Exim để ngăn chặn việc gửi mail ngay lập tức:

vim /etc/exim.conf     //Chỉnh sửa bất kỳ 1 dòng nào sau đó lưu lại
/etc/init.d/exim stop     //Stop service exim

Bước 3: Disable hàm mail()

Nếu nguyên nhân là do hàm mail() bị lạm dụng, bạn nên tắt nó đi:

php -i | grep php.ini //Xác định file php.ini

Kiểm tra xem hàm nào đang bị disable (giả sử file php.ini nằm trong /usr/local/php54/lib/php.ini):

grep disable_functions /usr/local/php54/lib/php.ini      //Kiểm tra xem hàm nào bị disable
sed -i 's/disable_functions =/disable_functions = mail/' /usr/local/php54/lib/php.ini      //Thực hiện disable hàm mail()
/etc/init.d/httpd restart      //Restart service httpd

Bước 4: Giới hạn email gửi ra

Nếu bạn sử dụng Control Panel DirectAdmin, bạn có thể thiết lập giới hạn số lượng email mà mỗi user được phép gửi ra mỗi ngày.

Thực hiện bằng cách Login vào DirectAdmin với quyền admin, tìm đến mục Extra Features, và click Administrator Setting.

Bước 5: Suspend user và tìm nguồn mã độc

Đây là bước quan trọng để xử lý tận gốc vấn đề, đặc biệt nếu nguyên nhân là do source code bị tấn công (SMTP spam).

  • Suspend user: Tiến hành khóa (suspend) user có account mail đang thực hiện spam để tạm dừng hoạt động spam.
  • Quét mã độc: Sau đó, bạn nên download full source code + database về máy local và thực hiện quét virus bằng các chương trình antivirus để kiểm tra.

Nếu đã tìm được user spam, hãy vào thư mục source code của user đó (ví dụ: cd /home/username/domains/example.com/public_html). Các file mã độc thường được mã hóa. Bạn có thể tìm nhanh các file PHP chứa đoạn mã độc phổ biến (eval(base64_decode) bằng các 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

Việc xác định và khắc phục VPS bị spam mail giống như việc tìm và sửa một ống nước bị rò rỉ: trước tiên bạn nhận biết qua các dấu hiệu (như hóa đơn tiền nước tăng cao hoặc nhà bị ẩm), sau đó bạn xác định chính xác vị trí rò rỉ (kiểm tra từng đường ống bằng lệnh exim -bp và log), và cuối cùng là khắc phục bằng cách khóa van (suspend user, stop Exim, disable hàm mail()) và sửa chữa nguồn gốc vấn đề (xóa mail trong queue, quét và loại bỏ mã độc)