Помогите написать скрипт, который обрабатывал бы лог rinetd и выполнял бы такие действия:
1. Берем строку лога и смотрим нет ли в 9-ом столбце слова "denied", если есть - переходим к следующей строке.
2. Если "denied" отсутствует, то берем из этой строчки IP из 2-го столбца и запоминаем его.
3. Берем следующую строчку и сравниваем IP из 2-го столбца с IP из п.2
4. Проверяем так еще 5 строчек после строчки из п.2 и если все IP совпадают переходим к п.5, в противном случаем берем строчку на которой прервалось совпадения и возвращаемся к п.1
5. Проверяем нет ли данного IP в массиве deny_ip и если нет, то заносим данный IP в массив deny_ip, а значение времени из 1 столбца в массив deny_time, с таким же ключем массива как и IP.
6.По окончанию лога данные массивов deny_ip и deny_time вставляем в конфигурационный файл rinetd
Код: Выделить всё
echo deny $deny_ip[key] #$deny_time[key] >> /usr/local/etc/rinetd.conf
Код: Выделить всё
cat /var/run/rinetd.pid | xargs kill -1
Запуск скрипта предполагается выполняться каждые 5 минут посредством крона.
Смысл назначения скрипта думаю понятен.
Занести IP адрес "переборщика доступа", после 5 попытки, в конфиг rinetd
Отправлено спустя 4 минуты 24 секунды:
Прочитал сообщение и думаю более оптимальным будет после п.2 сделать проверку на наличие IP в массиве deny_ip и если нету, то продолжать действия дальше. А данную проверку из 5 пункта убрать.
Отправлено спустя 1 минуту 19 секунд:
Ну и еще немного добавлю.
Все это интересует под FreeBSD 10.