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

Автор: | 11/17/2013
 

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

вхождение строки «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: <box@domain.kiev.ua>
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: /wp-login.php