Рубрики
mail \ почта

bash: скрипт уведомлений на e-mail о не удачных попытках авторизации


Выполняется поиск по файлу лога веб-сайта, ищется одно из двух совпадений:

вхождение строки "authentication failure";
вхождение строки "user.*not found".

Срабатывает он так:
[Sun Nov 17 17:30:05 2013] [error] [client ***.37.***.**] user user: authentication failure for "/wp-login.php": Password Mismatch
[Sun Nov 17 17:29:52 2013] [error] [client ***.37.***.**] user sdcas not found: /wp-login.php
[Sun Nov 17 17:35:19 2013] [error] [client ***.37.***.**] user sadcsadc not found: /wp-login.php
Первая проверка — на случай, если пользователь был правильный, но пароль не верный. 
Вторая — на случай если пользователь был указан неверно.

Для записи результатов используется временный файл:


# touch /tmp/auth_errors.txt
Собственно, сам скрипт:
#!/usr/local/bin/bash
FILE="/var/log/apache/site.ua-error.log"
FAILF=`cat $FILE | grep -i "authentication failure"`
FAILN=`cat $FILE | grep -i "user.*not found"`
SUBJECT="Last auth failures for site"
EMAIL="mail@domain.com"
EMAILMESSAGE="/tmp/auth_errors.txt"

echo "" > /tmp/auth_errors.txt
echo "$FAILF" > /tmp/auth_errors.txt
echo "$FAILN" >> /tmp/auth_errors.txt

# проверяем не являются ли обе переменные пустыми, иначе  нечего будет отправлять
if [ -n "$FAILN" -o "$FAILF" ]
then
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
fi
В целом, его можно будет ещё улучшить, 
и добавить автоматическое добавление в таблицу IPFW (по аналогии с утилитой SSHIT).

Добавляем задачу в cron:
# crontab -e
Раз в сутки вполне достаточно:
# crontab -l | grep auth
@daily /usr/home/setevoy/scripts/auth_failed.sh
В результате — получим письмо такого содержания:
# cat /usr/mail/domain.kiev.ua/box\@domain.kiev.ua/cur/1384707423.M869856P59034.akira.domain.kiev.ua\,S\=715\,W\=728\:2\,a
Return-Path: 
Delivered-To: box@domain.kiev.ua
Received: by akira.domain.org.ua (Postfix, from userid 0)
        id D2DFA50F32; Sun, 17 Nov 2013 18:57:03 +0200 (EET)
To: box@domain.kiev.ua
Subject: Last auth failures for site
Message-Id: <20131117165703.D2DFA50F32@akira.domain.org.ua>
Date: Sun, 17 Nov 2013 18:57:03 +0200 (EET)
From: box@domain.kiev.ua (Charlie Root)
[Sun Nov 17 17:30:05 2013] [error] [client ***.37.***.**] user user: authentication failure for "/wp-login.php": Password Mismatch
[Sun Nov 17 17:29:52 2013] [error] [client ***.37.***.**] user sdcas not found: /wp-login.php
[Sun Nov 17 17:35:19 2013] [error] [client ***.37.***.**] user sadcsadc not found: /