Отправляем логи по почте через SSMTP и BASH скрипт

Всем привет!
После сбора логов ICQ переписки я озадачился их доставкой руководству.
Поскольку о слежении должно знать как можно меньше человек было решено отсылать логи на почту начальству с сервера.

В качестве SMTP сервера я воспользовался моим любимым SSMTP.
Скачать его можно здесь
Установка проста:
Пользователи Gentoo делают:
emerge ssmtp

На же моё сервере стоит SuSe 10.2 и всё приходится ставить из сорцов.
Приступим:

cd /tmp
wget ftp://ftp.debian.org/debian/pool/main/s/ssmtp/ssmtp_2.62.orig.tar.gz
tar xvzf ssmtp_2.62.orig.tar.gz
cd ssmtp
./configure --prefix=/usr/ssmtp --enable-ssl --enable-md5auth
make
make install

Всё проставилось в /usr/ssmtp, делаем симлинки при необходимости.

Настраиваем:
Пример для Gmail
Правим /usr/ssmtp/etc/ssmtp/ssmtp.conf
root=youraccount@gmail.com # Это e-mail пользователя root, на него будет приходить почта из программ mail и mailx
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=youraccount@gmail.com
UseSTARTTLS=YES
AuthUser=youraccount
AuthPass=yourpasword
FromLineOverride=YES

/usr/ssmtp/etc/ssmtp/revaliases
root:youraccount@gmail.com:smtp.gmail.com:587 # youraccount@gmail.com - Этот адрес будет писаться в качестве отправителя.
mainuser:youraccount@gmail.com:smtp.gmail.com:587

И пробуем отправить тестовое сообщение:
echo "Hello World" > /tmp/test.txt
ssmtp -v your@mail.com < /tmp/test.txt

Кстати, у меня на сервере почему-то с почтой gmail отправка не заработала.
Хотя дома всё ОК, поэтому я решил воспользоваться почтой от rambler.ru
Подойдёт в принципе любая почта, хотя с mail.ru были проблемы.

Так, сообщения уходят, значит можно переходить ко второй части: Отправка самих логов.
Логи я решил отправлять в архиве, с помощью Bash скрипта и cron'a
Первое что потребовалось - определить MIME тип архива, для этого есть Bash скрипт
Для архива он оказался: application/octet-stream

Затем я написал следующий Bash скрипт:
#!/bin/sh

PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin

ADMIN="Ваша@почта.ru"

CODE="$1"
SENDER="$2"
shift 2
FILE=ICQ-BackUP-`date +%d.%m.%Y`.tar.bz2 # Имя файла бэкапа
LOG="/var/log/imspector/arc/$FILE"  # Файл, который будем пересылать
TMP=/tmp # Директория для временных файлов

find /var/log/imspector -type f -mtime +30 -delete # Удаляем файлы, старше 30 дней
tar cjfP /var/log/imspector/arc/$FILE /var/log/imspector/ICQ-AIM  #Архивируем

TMPMAIL=$TMP/new_mail.$$
trap "rm -f $TMPMAIL; exit" 0 1 2 15

BOUNDARY="newlog-`date +%s`-$$"

# Create mail header:
echo "To: $ADMIN" > $TMPMAIL
echo "Subject: Log from SERVER " >> $TMPMAIL
echo "Mime-Version: 1.0" >> $TMPMAIL
echo "Content-Type: multipart/mixed; boundary=$BOUNDARY" >> $TMPMAIL

# Create first part of the mail
echo "--$BOUNDARY" >> $TMPMAIL
echo "Content-Type: text/plain; charset=utf-8" >> $TMPMAIL #кодировка письма
echo "" >> $TMPMAIL
echo "ICQ message log" >> $TMPMAIL
echo "`date`." >> $TMPMAIL
echo "" >> $TMPMAIL

echo "--$BOUNDARY" >> $TMPMAIL
echo "Content-Type: application/octet-stream" >> $TMPMAIL # тип содержимого
echo "Content-Transfer-Encoding: base64" >> $TMPMAIL
echo "Content-Disposition: attachment; filename=\"$FILE\"" >> $TMPMAIL
echo "" >> $TMPMAIL

cat $LOG | base64 >> $TMPMAIL
echo "" >> $TMPMAIL

echo "--$BOUNDARY--" >> $TMPMAIL

# Send out the created mail:
#sendmail -i -f $SENDER -- $ADMIN -- < $TMPMAIL # FOR SENDMAIL

ssmtp почта@доставки.ru < $TMPMAIL # FOR SSMTP, почта получателя
rm -rf /var/log/imspector/ICQ-AIM/*
exit 0

Это для ознакомления (wordpress частенько код искажает), если будете использовать воспользуйтесь ссылками ниже:

То-же самое выложил сюда
И с подсветкой синтаксиса сюда . Тут-же Вы его можете скачать.

И засунул его в cron на выполнение.
Кстати, скрипт можно использовать и для отправки любых файлов в качестве аттачей.

Всё, задача выполнена.
blog comments powered by Disqus