Выполняется поиск по файлу лога веб-сайта, ищется одно из двух совпадений:
вхождение строки “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="[email protected]" 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/[email protected]/cur/1384707423.M869856P59034.akira.domain.kiev.ua,S=715,W=728:2,a Return-Path: <[email protected]> Delivered-To: [email protected] Received: by akira.domain.org.ua (Postfix, from userid 0) id D2DFA50F32; Sun, 17 Nov 2013 18:57:03 +0200 (EET) To: [email protected] Subject: Last auth failures for site Message-Id: <[email protected]> Date: Sun, 17 Nov 2013 18:57:03 +0200 (EET) From: [email protected] (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