Giám sát mail queues Zimbra qua Telegram

Tác giả: 19/09/2022

Bài viết này được tham khảo từ các nguồn tại đây

Vào một ngày đẹp trời, máy chủ email của các bạn bỗng dưng không hoạt động, gửi nhận không được,hãy restart dịch vụ và  kiểm tra mail trong hàng chờ đầu tiên.

Tại giao diện Admin: Home > Monitor > Mail Queues

Nếu như hàng đợi deferred  đang có một số lượng lớn mail (khoảng vài trăm đến vài trăm nghìn mail), chắc hẳn một user nào đó đã bị lộ mật khẩu và bị hacker lợi dụng bắn mail tự động ra ngoài.

Bạn cần xử lý ngay vấn đề này, và quan trọng là hãy giám sát nội dung mail queue này.

Thông báo về tình trạng hàng đợi deferred

Đối với một người quản trị hệ thống (admin) mail server, bạn sẽ gặp tình trạng mail bị kẹt lại trong hàng đợi deferred vì các lý do như mất kết nối internet, sai địa chỉ mail, có account gửi spam ra ngoài, địa chỉ IP bị blacklist, v.v… Do vậy, việc giám sát được hàng đợi deferred queue là rất quan trọng.

Nghiêm trọng nhất khi một user trong miền của bạn bị lộ mật khẩu, máy tính nhiễm virus và bị hacker lợi dụng sử dụng email đó gửi thư spam,lừa đảo đi mọi địa chỉ…Hậu quả nghiêm trọng nhất khi bạn không giám sát, xử lý tức thời thì có thể máy chủ mail của bạn sẽ bị  Blacklist (IP/Domain) trong danh sách của các tổ chức giám sát , chống spam.

Tạo Telegram bot

Bước đầu tiên, sử dụng botfather. Tìm BotFather trên Telegram web, nhấn START, nhập /newbot để tạo một bot mới đóng vai trò người gửi thông báo (notification). Tạo name, username cho bot.

Bạn lưu ý, khi tạo bot thì tên bot cần kết thúc = “bot” , ở đây mình đặt tên bot là Giamsatmailcuatoi_bot

Botfather sẽ thông báo bạn đã tạo bot thành công với thông tin về API token.

Tạo Telegram group

Bạn tạo một new group ( ở đây mình đặt tên group là Giám sát mail) với member là bot vừa tạo ở trên (@Giamsatmailcuatoi_bot). Khi ở trong group này, bạn sẽ thấy group ID ở trong địa chỉ trình duyệt, bạn ghi lại ID này. Như vậy đến đây bạn đã có, ví dụ:

Đây là group ID

Lấy API token khi bạn đặt tên bot

API Token: 5625825246:AAF0yZSPgtDTh_p6OgXVcMRTE6OOAKPqGuc

Chat ID: 773289235

Bạn tiến hành test thử như sau, trên server dưới quyền root:

curl -s -X POST https://api.telegram.org/bot5625825246:AAF0yZSPgtDTh_p6OgXVcMRTE6OOAKPqGuc/sendMessage -d chat_id=-773289235 -d text=”Thông báo đầu tiên”

Trên Telegram, trong Group đã tạo, sẽ nhận được tin nhắn “Thông báo đầu tiên”

Tạo Bash Script kiểm tra hàng đợi Deferred.

Đây là script kiểm tra xem có hơn 25 message trong hàng đợi deferred không.
Nếu có, script này sẽ tự động gửi một thông báo đến Telegram.
Tạo script có tên là giamsatmailcuatoi.sh trong /opt/zimbra/scripts/, gán quyền thực thi cho script này.

chmod +x /opt/zimbra/scripts/giamsatmailcuatoi.sh

Bạn lưu ý, trên thực tế bạn có thể thay đổi giá trị 25 bằng một số lớn hơn,và thời gian sau mỗi x phút bạn cần kiểm tra,tùy vào tần suất gửi của máy chủ mail của bạn.

#!/bin/bash
host_name=”$HOSTNAME”
token=”5625825246:AAF0yZSPgtDTh_p6OgXVcMRTE6OOAKPqGuc”
chat_id=”-773289235″
url=”https://api.telegram.org/bot${token}/sendMessage”
count=$(/opt/zimbra/libexec/zmqstat |grep -i deferred |cut -d “=” -f2)
if [[ $count -ge 25 ]]; then
curl -s -X POST $url -d chat_id=$chat_id -d text=”[WARNING QUEUE ${host_name}], Number of messages in deferred queue is larger than ${count}”
fi

Cấu hình cronjob

Bạn hãy ssh vào máy chủ và gõ lệnh:

crontab -e

Và thêm vào đoạn mã sau để kiểm tra hàng đợi mỗi 5 phút.

*/5 * * * * /bin/sh /opt/zimbra/scripts/giamsatmailcuatoi.sh > /dev/null 2>&1

Khóa account và gửi tin nhắn thông báo

Bạn có thể thêm vào script tự động lockout account khi nghi nghờ account này gửi spam ra ngoài.

Nó có nghĩa là scripts sẽ chạy mỗi 5 phút, nếu mail hàng đợi (deferred queue ) vượt quá 25 và kiểm tra user nào đang spam sẽ lập tức khóa tài khoản.

Trên thực tế bạn có thể thay giá trị này bằng một số lớn hơn để chắc chắn rằng email đó đang không phải spam mail.

Thay scripts vào file giamsatmailcuatoi.sh bên trên.

#!/bin/bash
host_name=”$HOSTNAME”
token=”5625825246:AAF0yZSPgtDTh_p6OgXVcMRTE6OOAKPqGuc”
chat_id=”-773289235″
url=”https://api.telegram.org/bot${token}/sendMessage”
maxdeferred=25
count=$(/opt/zimbra/libexec/zmqstat |grep -i deferred |cut -d “=” -f2)
account=$(grep sasl_user /var/log/zimbra.log | sed ‘s/.*sasl_username=//g’ | sort | uniq -c | sort -nr | head -n1 | awk ‘{print $2}’)
if [[ $count -gt $maxdeferred ]]; then
curl -s -X POST $url -d chat_id=$chat_id -d text=”[WARNING QUEUE ${host_name}], Number of messages in deferred queue is larger than ${count}”
su – zimbra -c “/opt/zimbra/bin/zmprov ma $account zimbraAccountStatus locked”
curl -s -X POST $url -d chat_id=$chat_id -d text=”Server has locked ${account} for sending message too much”
su – zimbra -c “zmmtactl restart”
fi

Như vậy mình đã hướng dẫn các bạn cách giám sát mail queue zimbra qua kênh Telegram.Nếu một ngày đẹp trời máy chủ mail zimbra của bạn không gửi thư ra được ngoài, hãy kiểm tra hàng chờ mail nhé.

Hy vọng bài viết này hữu ích với các bạn, chúc các bạn thực hiện thành công!

Các bạn có thể tham khảo thêm các hướng dẫn sử dụng khác tại link sau: https://wiki.nhanhoa.com

Trả lời